【问题标题】:return a reference/pointer node from a linked list c从链表 c 返回一个引用/指针节点
【发布时间】:2013-04-28 16:41:02
【问题描述】:

我正在尝试从我创建的链表中返回一个引用/指针节点。这是我的类和方法 Return 节点,当我传递一个值时,它会在我的列表中查找,但编译器给了我三个错误: 1-错误 C2143:语法错误:缺少 ';'前 '*' 2 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数 3-错误 C1903:无法从先前的错误中恢复;停止编译

有人可以帮我吗?非常感谢!

template <class Type>
class LinkedList
{
private:
struct Node
{
    Type value;
    Node* next;
};
    Node* list;
public:

//Other functions here

Node* FindNode(Type);

};

template <class Type>
LinkedList<Type>::Node* LinkedList<Type>::FindNode(Type _value)
{ 
Node* q = first;
while(q != NULL && q->value != _value)
    q = q->next;
return q;
}

【问题讨论】:

    标签: c++ templates pointers reference linked-list


    【解决方案1】:

    由于您有一个从属的限定名称,您应该使用typename 消歧符:

        template <class Type>
        typename LinkedList<Type>::Node* LinkedList<Type>::FindNode(Type _value)
    //  ^^^^^^^^
    

    否则编译器不会将Node 解析为类型的名称。

    【讨论】:

    • 非常感谢。我如何从另一个类中的那个类中实例化?我在做: LinkedList list;但它不起作用,给我错误 LNK2001 和 LNK2019。
    • @user2177428:我不确定我是否理解。你这是在哪里做的?错误信息是什么?另外,确保你的类模板成员函数的定义与类模板LinkedList本身的定义在同一个头文件中——通常模板定义属于头文件
    • 是的,这就是问题所在,我的方法在不同的文件中。如果我将所有方法放在同一个头文件中,它就像一个魅力,但我必须做些什么才能将我的方法放在其他 cpp 文件中?我尝试将 template 放在头文件中的每个方法之前,但它不起作用。非常感谢你,因为你帮了我很多。
    • @user2177428:不客气。如果上面的答案解决了问题中的问题,请考虑将其标记为已接受:) 关于在.cpp 文件中具有模板定义所需的内容 - 您需要所谓的“显式实例化”。你可以阅读更多关于它的信息here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多