gpt4 book ai didi

c++ - 模板类型未定义

转载 作者:行者123 更新时间:2023-11-30 02:54:53 26 4
gpt4 key购买 nike

我正在学习 C++,现在我正在使用模板。

我正在尝试实现一个链表:

ListElement.hpp

#ifndef LIST_ELEMENT_HPP_
#define LIST_ELEMENT_HPP_

template <class Type> class SingleLinkedList;

template <class Type>
class ListElement
{
public:
ListElement(const Type element);
~ListElement(void);
public:
Type val;
ListElement* next;
};

#endif

ListElement.cpp:

#include "ListElement.hpp"

ListElement<Type>::ListElement(const Type element)
{
*next = NULL;
val = element;
}


ListElement<Type>::~ListElement(void)
{
}

我在 ListElement.cpp 上收到与 Type 相关的错误:Type is undefined

我找到了很多关于如何实现链表的例子,但没有一个使用分离的 hpp 和 cpp。

您知道我该如何解决这个错误吗?

最佳答案

第一个问题:

您需要修正定义类模板成员函数的方式:

template<typename Type> // <== ADD THIS!
ListElement<Type>::ListElement(const Type& element)
// ^
// And perhaps also this?
// (don't forget to modify the
// corresponding declaration if
// you change it)
{
*next = NULL;
val = element;
}

第二个问题:

您应该将这些定义移动到包含类模板定义的同一个头文件中,否则链接器会提示 undefined reference 。有关详细信息,请参阅 this Q&A on StackOverflow .

第三个问题:

在您的构造函数中,您目前正在通过取消引用未初始化的指针来导致未定义的行为。你不应该这样做:

*next = NULL;
^^^^^^^^^^^^^
Undefined Behavior! next is uninitialized and you are dereferencing it!

而是:

next = NULL;

或者更好(使用构造函数初始化列表和 C++11 的 nullptr):

template<typename Type>
ListElement<Type>::ListElement(const Type& element) :
val(element),
next(nullptr)
{
}

关于c++ - 模板类型未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16772937/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com