كيف يمكنك إرجاع مكرر متجه من متغير في فئة قالب؟

StackOverflow https://stackoverflow.com/questions/425430

  •  06-07-2019
  •  | 
  •  

سؤال

وأنا أحاول العودة مكرر للناقلات في فئة قالب (لست متأكدا إذا كان هذا يحدث فرقا، ولكن لقد قرأت أنه يجوز، حتى ظننت أنني أذكر ذلك). والمشكلة هي أن أحصل على خطأ حول C ++ لا تدعم الافتراضية الباحث عندما أحاول ذلك. لقد بحثت على الانترنت ومن ما أستطيع أن أرى في المنتديات وexplanaions، وأنا لا أعتقد أنا <م> أن بعيدا، هو فقط لن ترجمة.

template<class T>
class Table
{
public:
  ...

  vector<shared_ptr<vector<T>>>::iterator GetRowIterator();
  //vector<shared_ptr<vector<CellValueType> > >::const_iterator GetRowIterator();

  ...
protected:

  vector<shared_ptr<vector<CellValueType> > > data;  //outside vector is rows, inside vector is columns

  ...
};

vector<shared_ptr<vector<T> > >::const_iterator Table<T>::GetRowIterator()
{
  return data.begin();
}

والأخطاء التي أحصل هي:

error C2146: syntax error : missing ';' before identifier 'GetRowIterator'

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   

تحرير:
غيرت أقواس زاوية نهاية بحيث لا تكون أقرب معا - نفس الخطأ

أي أفكار لماذا هذا يحدث منتديات كما هو الحال دائما، وذلك بفضل لنصيحة / مساعدة مقدما!

هل كانت مفيدة؟

المحلول

ونتذكر أيضا لاستخدام typename عندما يعلن تعتمد على قالب نوع الإرجاع:

typename vector< shared_ptr< vector< T > > >::iterator GetRowIterator();

ووتعريف الأسلوب

typename vector< shared_ptr< vector< T > > >::const_iterator Table<T>::GetRowIterator()
{
  return data.begin();
}

لاحظ أيضا أنه عندما تعريف أسلوب فئة القالب خارج تعريف الفئة، لديك لاستخدام الكلمة قالب:

template <class T> typename vector< shared_ptr< vector< T > > >::const_iterator Table<T>::GetRowIterator()
    {
      return data.begin();
    }

وذلك أن المترجم يستطيع أن يعرف ما T هو حول.

نصائح أخرى

وهذا جزء هنا:

vector<shared_ptr<vector<T>>>

وانها مشكلة مع C ++ بناء جملة لا يمكنك وضع >> معا من هذا القبيل.

vector<shared_ptr<vector<T> > >

وهذه هي المشكلة التي يتم تناولها من قبل المعيار الجديد.

ولأن lexer هي المرحلة الأولى من المجمع أنه يرى >>> كمشغل تحول اليسار تليها>. وهكذا كنت تحصل أخطاء في بناء الجملة في التعليمات البرمجية. لتقمع هذه المشكلة تحتاج فقط لإضافة مساحة بيضاء بين> عند إغلاق القوالب.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top