簡體   English   中英

C++ Clang 模板“使用未聲明的標識符”編譯器標志

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM