在尝试编译模板类时遇到问题。
在.h文件中
template <typename dataType>
class Node {
private:
dataType nodeData;
Node<dataType>* nextLink;
Node<dataType>* previousLink;
public:
Node(const dataType& nodeData);
// methods
在.template文件中
template <typename dataType>
Node<dataType>::dataType Node<dataType>::getData() const {
return nodeData;
};
尝试编译时遇到的错误是:
need ‘typename’ before ‘Node<dataType>::dataType’ because ‘Node<dataType>’ is a dependent scope
Node<dataType>::dataType Node<dataType>::getData() const {
然后我添加了typename然后它给了我这个错误:
error: expected nested-name-specifier before ‘dataType’
typename dataType getData() const;
^
error: expected ‘;’ at end of member declaration
error: declaration of ‘int Node<dataType>::dataType’
error: shadows template parm ‘class dataType’
template <typename dataType>
^
我做错了什么?
答案 0 :(得分:2)
没有名为dataType
的成员,我认为返回类型应该只是模板dataType
:
template <typename dataType>
dataType Node<dataType>::getData() const {
return nodeData;
}
在这种情况下编译器消息具有误导性,因为它没有找到正确的定义,它假设dataType
引用了模板参数。
答案 1 :(得分:0)
template <typename DataType>
class Node {
public:
using dataType = DataType;
private:
dataType nodeData;
Node<dataType>* nextLink;
Node<dataType>* previousLink;
public:
Node(const dataType& nodeData);
dataType getData() const;
};
template <typename DataType>
typename Node<DataType>::dataType Node<DataType>::getData() const {
return nodeData;
};
像这样指定typename
。
答案 2 :(得分:0)
显示的示例代码不完整,因此必须猜测具体问题。
然而,这里是如何以实际的方式完成这门课程,没有像你遇到的那样的问题:
template< class Item >
struct Node
{
Node* next;
Node* prev;
Item item;
};
表示有时可以在不知道具体细节的情况下解决问题。