[英]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;
};
tl; dr:模板不會引起您的注意。 您仍然必須告訴他們該怎么做。
const auto
不是“變量類型”。 auto
是一個關鍵字,可以從您提供的某些信息中推斷出類型。 例如,它知道5
是一個int
(因為它們是規則),所以auto x = 5;
是可能的。
在這種情況下,您只是沒有提供任何信息。 您如何看待它應該為T
使用什么? 我們甚至都不知道! 你知道嗎? query
應該是什么? 應該怎么辦? 仔細考慮,然后讓您的計算機知道您的決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.