[英]typedef throwing error even with typename keyword
以下C ++代碼:
template<typename State>
class Node
{
public:
typedef typename State::Move Move;
...
}
說:
缺少類型說明符-假定為int。 注意:C ++不支持default-int
我搜索了錯誤消息,每個人都建議將typename
關鍵字添加到typedef
行,在我看來,這已經存在了。 我還應該做什么?
謝謝大家的幫助。 問題確實在其他地方。 讓我解釋:
在C#中,我們在類定義中使用泛型(與C ++模板系統大致等效),並可以對它們應用約束:
class Node<T> where T:SomeClass { ... }
這使我們可以在此類內實例化T
類型的對象。 這些對象將自動具有SomeClass
所有成員。 您還將獲得很好的智能感知作為獎勵。 該系統的優點在於,可以在編譯時驗證此類的完整性,而無需實例化Node<T>
類型的對象。
[ 免責聲明:以下是我的理解。 如果我錯了糾正我。 ]
C ++不能這樣工作。 C ++允許您訪問針對模板參數的任何內容(在我的情況下為State::Move
)。 模板類本身不能/不能確保template參數實際上具有名為Move
的成員。 僅當實例化模板化類的對象時,例如Node<SomeType> x;
,它實際上確保SomeType
必須包含一個名為Move
的成員,如果不是這種情況,則拋出錯誤。
在我的問題中,我實例化了Node
對象,並將其作為模板參數傳遞給int
,該對象顯然沒有名為Move
任何成員,因此它在抱怨(不幸的是指向一個非常錯誤的地方,但這是另一個故事)。 用適當的類型替換它為我修復了錯誤。
希望這可以幫助某人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.