簡體   English   中英

錯誤:使用未聲明的標識符“ T”

[英]error: use of undeclared identifier 'T'

我是剛開始使用帶有結構的模板。 我的主要目標是在內部結構中具有自動變量。

更重要的是,我正在使用Funct.Methd(const auto,&Handler)的庫函數。 如您所見,在這里,我想代替(基於某些條件)由用戶創建的任何const auto變量。 我期望有20多個變量,根據某些標准,將使用5個變量。

經過研究后,我發現可以將模板用於此目的。 請在下面找到示例代碼:

#include <iostream>
#include <string>

template<typename T>
struct FTmr {
    T query;
};

int main()
{
    FTmr<T> df;    
}

將模板與結構一起use of undeclared identifier 'T'我得到use of undeclared identifier 'T'的錯誤use of undeclared identifier 'T' 首先,我需要解決以上錯誤,然后再使用const auto。

我希望用df實例化FTmr,然后訪問查詢變量。

df.query=<<const auto value>>

我將不勝感激任何幫助。

從聲明起,C ++中的所有變量都具有固定類型。

模板不是類型。 模板是有關如何進行鍵入的說明。

const auto變量的類型取決於您為其分配的內容:

const auto x = foo();

x的類型是固定的,它由foo()的固定返回類型推導得出。 語言就是為您找到的。

結構的成員是變量。 在聲明它時,必須在struct中確定其類型。 您不能推遲使用它的類型。

struct Foo {
  static const auto x = 3;
};

之所以有效,是因為可以在聲明x的位置確定x的類型。

簡而言之, const auto不能那樣工作。

可能可以做您真正想做的事情,但這可能很難 ,並且您可能缺乏詞匯表來描述您真正想要的是什么。 我的建議是不要與語言抗爭,而要使用固定類型。

T是什么? 您必須先定義它,然后再使用它。 前一個T的作用域為上面的templated struct 同樣,您不能使用這種方式。 您必須以這種方式實例化templated結構:

FTmr<int> df;
FTmr<char> df;
// ...

T是模板化參數,這意味着好像將變量傳遞給函數一樣,它意味着傳遞type 因此,編譯將創建一個類型為int的結構實例。

  • 函數以這種方式將變量作為參數:

     void foo(int x, char y, double z, struct foo& the foo, long* pBar, ...); 
  • 模板將types作為參數:

     template< class T> void Power(T& x); template < typename U, typename V> class Baz{ U _uval; V _vVal; }; 

因此,當實例化模板化的類/函數時,編譯器將創建具有該類型的實例:

    Baz<int, std::string> bistr;

編譯器創建的實例:

class Baz{
    int _uval;
   std:: string _vVal;
};
  • 請記住,在編譯時沒有模板或類型T,而是創建了該類的特定版本。

tl; dr:模板不會引起您的注意。 您仍然必須告訴他們該怎么做。

const auto不是“變量類型”。 auto是一個關鍵字,可以從您提供的某些信息中推斷出類型。 例如,它知道5是一個int (因為它們是規則),所以auto x = 5; 是可能的。

在這種情況下,您只是沒有提供任何信息。 您如何看待它應該為T使用什么? 我們甚至都不知道! 你知道嗎? query應該是什么? 應該怎么辦? 仔細考慮,然后讓您的計算機知道您的決定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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