C++:初始化结构中的模板变量
C++: Initialize template variable in struct
更新:问题源于 Passenger class 没有默认构造函数这一事实。我不明白为什么这会破坏列表的实现。如果有人可以发表评论向我解释这一点,我将不胜感激!
OGPost:
大家好Whosebugers。我正在做一项简单的大学作业,但 运行 遇到了一个我似乎无法全神贯注解决的问题。我是 C++ 的新手,现在我了解到在 C++ 中实现泛型并不像在 Java 中那样简单。在我的 LinkedList class 中有一个结构节点:
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
我还有一个乘客class。当我尝试创建 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;
链表class中的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);
更新:问题源于 Passenger class 没有默认构造函数这一事实。我不明白为什么这会破坏列表的实现。如果有人可以发表评论向我解释这一点,我将不胜感激!
OGPost:
大家好Whosebugers。我正在做一项简单的大学作业,但 运行 遇到了一个我似乎无法全神贯注解决的问题。我是 C++ 的新手,现在我了解到在 C++ 中实现泛型并不像在 Java 中那样简单。在我的 LinkedList class 中有一个结构节点:
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
我还有一个乘客class。当我尝试创建 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;
链表class中的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);