3
操作系統:Windows 8.1爲什麼編譯器在範圍中看不到變量?
編譯器:GNU C++
我有兩個模板類:基類和派生。在基類中,我聲明變量value
。當我嘗試從派生類的方法申請到value
時,編譯器向我報告錯誤。 但是,如果我不使用模板,我不會收到錯誤消息。
有錯誤消息:
main.cpp: In member function 'void Second<T>::setValue(const T&)':
main.cpp:17:3: error: 'value' was not declared in this scope
value = val;
^
有代碼:
#include <iostream>
using namespace std;
template<class T>
class First {
public:
T value;
First() {}
};
template<class T>
class Second : public First<T> {
public:
Second() {}
void setValue(const T& val) {
value = val;
}
};
int main() {
Second<int> x;
x.setValue(10);
cout << x.value << endl;
return 0;
}
此代碼的工作:
#include <iostream>
using namespace std;
class First {
public:
int value;
First() {}
};
class Second : public First {
public:
Second() {}
void setValue(const int& val) {
value = val;
}
};
int main() {
Second x;
x.setValue(10);
cout << x.value << endl;
return 0;
}
不合格查找不查看依賴基類。必須有一個巨大的複製品在那裏... –
適用於VS2015。當您將'value = val;'更改爲'First :: value = val;'時,它也可以工作。 (http://coliru.stacked-crooked.com/a/3f6103bc3ae99c8f) –
@SimonKraemer:在這種情況下,MSVC不符合要求。 –