LINUX.ORG.RU

C++ что бы это значило ???


0

0

$ cat test.cpp
#include <vector>

template <class T>
class CRList : public std::vector<T*>
{
public:
int count() const { return size(); };
};

int main()
{
return 0;
}
$ g++-2.95 test.cpp
$ g++-4.2 test.cpp
test.cpp: In member function ‘int CRList<T>::count() const’:
test.cpp:7: error: there are no arguments to ‘size’ that depend on a template parameter, so a declaration of ‘size’ must be available

Подскажите плиз как побороть ??? Что изменить в коде чтобы g++-4.2 его съел так же как g++-2.95 ???


или в начале класса написать:

using std::vector<T*>::size;

Если используемых методов предка несколько, то можно так:

typedef std::vector<T*> Base;

using Base::size;

и т.д.

GPFault ★★
()

#include <vector>

template <class T> class CRList : public std::vector<T*> { typedef std::vector<T*> base_t; public: int count() const { return base_t::size(); }; };

int main() { return 0; }

acefsm
()

А вообще - не наследуйте свои классы от стандартных контейнеров. Это технически осуществимо, но очень не рекомендуется по многим причинам. Используйте агрегацию вместо наследования где возможно.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.