Есть код:
template<class T>
class test1
{
public:
test1()
{
}
protected:
T a;
};
template <class T>
class test2: public test1<T>
{
test2(T const &tmp){
a = tmp;
}
};
int main(int argc, char **argv)
{
}
Выдает:
Invoking: GCC C++ Compiler
g++ -D__GXX_EXPERIMENTAL_CXX0X__ -D_GLIBCXX_USE_C99 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/main.d" -MT"src/main.d" -o "src/main.o" "../src/main.cpp"
../src/main.cpp: In constructor «test2<T>::test2(const T&)»:
../src/main.cpp:25:3: ошибка: нет декларации «a» в этой области видимости
А так все ок:
template<class T>
class test1
{
public:
test1()
{
}
protected:
T a;
};
class test2: public test1<int>
{
test2(int const &tmp){
a = tmp;
}
};
int main(int argc, char **argv)
{
}
Invoking: GCC C++ Compiler
g++ -D__GXX_EXPERIMENTAL_CXX0X__ -D_GLIBCXX_USE_C99 -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/main.d" -MT"src/main.d" -o "src/main.o" "../src/main.cpp"
Finished building: ../src/main.cpp
Почему так происходит?
Как использовать переменную 'a' в шаблоне?
Спасибо.