簡體   English   中英

即使使用typename關鍵字,typedef也會引發錯誤

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

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