2015-04-01 6 views
-2

Я пытаюсь определить унаследованный класс из класса std :: vector. Ниже приведен кодОшибка при наследовании std :: vector

template<class t> 
class Vector:vector<t> 
{ 
    public: 
    using vector<t>::vector; 
}; 

int main(int argc, char *argv[]) 
{ 
    Vector<int> v; 
    return 0; 
} 

И я получаю сообщение об ошибке, как это:

"error: 'std::vector<t, std::allocator<_CharT> >::vector' names constructor" 

Поэтому в основном я хотел бы знать, почему моя программа терпит неудачу и что все процедуры должны быть перегружены в моем унаследованном классе из родительского класса std :: vector.

Заранее спасибо.

+2

При наследовании от 'std :: vector' обратите внимание, что ему не нужно определять виртуальный деструктор. Таким образом, наследование от него обычно не считается хорошей идеей. – Bathsheba

+0

Какая версия и опции GCC? – immibis

+3

@Bathsheba Это личное наследование, поэтому я сомневаюсь в отсутствии виртуального деструктора. – juanchopanza

ответ

1

Я пробовал:

#include <vector> 

template<class t> 
class Vector: std::vector<t> 
{ 
    public: 
     using std::vector<t>::vector; 
}; 

int main() 
{ 
    Vector<int> v; 
    return 0; 
} 

и она отлично работает на gcc 4.8. при прохождении флага -std=c++11.

Похоже, ваш компилятор не может понять, что вы пытаетесь выполнить с помощью этой директивы using. Поскольку наследование конструкторов является функцией C++ 11, я предлагаю вам убедиться, что вы используете свой компилятор в режиме C++ 11.

+0

Иногда вы не можете изменить свой компилятор, поэтому вам нужно выяснить, как адаптировать код к компилятору – Brainless

Смежные вопросы