C++:在结构中初始化模板变量

OldLavyGenes474

更新:该问题源于Passenger 类没有默认构造函数这一事实。我不明白为什么这会破坏列表实现。如果有人可以发表评论向我解释这一点,我将不胜感激!

和帖子:

你好,stackoverflowers。我正在完成一项简单的大学作业,但遇到了一个我似乎无法解决的问题。我是 C++ 的新手,现在我正在学习在 C++ 中实现泛型并不像在 Java 中那么简单。在我的 LinkedList 类中有一个结构节点:

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

我也有一个乘客类。当我尝试创建乘客实例列表时会出现问题。

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 类中的 append 函数如下:

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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章