以下C ++代码:
false
表示:
缺少类型说明符 - 假设为int。注意:C ++不支持default-int
我搜索了错误消息,每个人都建议将template<typename State>
class Node
{
public:
typedef typename State::Move Move;
...
}
关键字添加到typename
行,在我的情况下已经存在。我该怎么办?
答案 0 :(得分:0)
感谢所有帮助过的人。问题确实存在于其他地方。让我解释一下:
在C#中,我们在类定义中使用泛型(它们是C ++模板系统的粗略等价物)并且可以对它们应用约束:
class Node<T> where T:SomeClass { ... }
允许我们在这个类中实例化T
类型的对象。这些对象将自动拥有SomeClass
的所有成员。你获得了很好的智能感知作为奖励。关于这个系统的好处是可以在编译时验证这个类的完整性,而无需我们实例化Node<T>
类型的对象。
[免责声明:以下是我的理解。如果我错了,请纠正我。]
C ++不会这样工作。 C ++将允许您访问模板参数的任何内容(在我的情况下,它是State::Move
)。模板化的类本身并不能确保模板参数实际上具有名为Move
的成员。只有在实例化模板化类的对象(例如Node<SomeType> x;
)时,它才能确保SomeType
必须包含名为Move
的成员,并且如果不是这种情况则抛出错误。
在我的问题中,我正在实例化一个Node
的对象,并将int
作为模板参数传递给它,这显然没有任何名为Move
的成员,所以它抱怨(不幸的是指向一个非常错误的地方,但这是另一个故事)。用适当的类型替换它为我修复了错误。
希望这可以帮助有人在路上。