[英]Template inheritance and a base member variable
嘗試使用模板繼承時出現奇怪的錯誤。 這是我的代碼:
template <class T> class A {
public:
int a {2};
A(){};
};
template <class T> class B : public A<T> {
public:
B(): A<T>() {};
void test(){ std::cout << "testing... " << a << std::endl; };
};
這是錯誤:
error: use of undeclared identifier 'a'; did you mean 'std::uniform_int_distribution<long>::a'?
void test(){ std::cout << "testing... " << a << std::endl; }
如果它可能會影響我使用這些標志的東西:
-Wall -g -std=c++11
我真的不知道出了什么問題,因為與沒有模板的純類相同的代碼可以正常工作。
我真的不知道出了什么問題,因為與沒有模板的純類相同的代碼可以正常工作。
這是因為基類(類模板A
)不是非依賴基類,在不知道模板參數的情況下無法確定其類型。 a
是一個非獨立名稱。 在依賴基類中不查找非依賴名稱。
要更正代碼,您可以使名稱a
從屬名稱,只能在實例化時查找從屬名稱,屆時必須探索確切的基礎專業化並將其知曉。
你可以
void test() { std::cout << "testing... " << this->a << std::endl; };
或者
void test() { std::cout << "testing... " << A<T>::a << std::endl; };
或者
void test() {
using A<T>::a;
std::cout << "testing... " << a << std::endl;
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.