c++:在struct中初始化模板变量



UPDATE:问题源于Passenger类没有默认构造函数这一事实。我不明白为什么这会破坏列表的实现。如果有人能给我留言解释一下,我会非常感激的!

OG邮报:

你好同胞stackoverflowers。我正在做一项简单的大学作业,但遇到了一个问题,我似乎无法思考如何解决。我是c++的新手,我现在正在学习在c++中实现泛型并不像在Java中那样简单。在我的LinkedList类中有一个结构体Node:

struct Node {
T data;
Node *next;
}; // Node

很简单。当我在main.cpp中创建一个整数列表时,实现的功能就像它应该的那样。

int main() {
LinkedList<int> integers;
integers.append(1);
integers.append(2);
integers.append(3);
// append, prepend, get, insert, and remove 
// functions all work as they should.
} // main

我也有乘客舱。当我试图创建一个Passenger实例列表时,出现了这个问题。

int main() {
LinkedList<Passenger> passengers;
Passenger passenger1("LastName1", "FirstName1", 0);
Passenger passenger2("LastName2", "FirstName2", 1);
passengers.append(passenger1);
passengers.append(passenger2);
} // main

错误信息如下所示:

./LinkedList.hpp:21:10: error: implicit default constructor 
for 'LinkedList<Passenger>::Node' must explicitly initialize 
the member 'data' which does not have a default constructor
./LinkedList.cpp:26:23: note: in implicit default constructor 
for 'LinkedList<Passenger>::Node' first required here:
Node *newNode = new Node;

LinkedList类中的追加函数如下:

template<class T>
void LinkedList<T>::append(T data) {
Node *newNode = new Node;
newNode->data = data;
newNode->next = NULL;
if (head == NULL) {
newNode->next = head;
this->head = newNode;
} else {
Node *ptr = head;
while (ptr->next != NULL) {
ptr = ptr->next;
} // while
ptr->next = newNode;
} // if
length++;
} // append

非常感谢任何帮助我的人!

似乎您调用了:

Node *newNode = new Node;

等于

Passenger *newNode = new Passenger;

看起来是无效的,因为Passenger没有无参数构造函数。我怀疑你可以这样做来解决这个问题:

Node *newNode = new Node(data, nullptr);

最新更新