[英]C++ Clang template “use of undeclared identifier” Compiler Flag
在 Clang 編譯這給了我錯誤
template<typename TYPE> struct Base
{
bool variable;
};
template<typename TYPE> struct Ext : Base<TYPE>
{
void clear() {variable=false;} // <- error here
};
錯誤:使用未聲明的標識符。
從為什么我必須通過 this 指針訪問模板庫 class 成員? ,我知道一種解決方法是使用“this->variable”,但這總是使用起來很痛苦,是否有任何編譯器標志可以禁用它?
我正在尋找一個 Clang 編譯器標志選項來完全禁用此錯誤。 在 MSVC 上,您可以使用“/permissive”命令行標志來做到這一點。 我在 Clang 上尋找類似的選項,但“-fpermissive”標志不起作用。
(更正:顯然,某些編譯器允許禁用此錯誤,請參見上面的 OP)。
在此上下文中, variable
是一個依賴名稱,因為它是依賴於模板參數的Base<T>
的一部分。 這是語言要求。
您可以在派生的 class 中using Base<Type>::variable
,即
template<typename TYPE> struct Ext : Base<TYPE>
{
using Base<TYPE>::variable; // <- do this once per class
void clear() {
variable = false; // <- this is fine now
}
};
如果您在子類中使用this->variable
而不是variable
,它也將起作用,因為這會改變變量的查找規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.