C++;没有默认构造函数?正在尝试为LinkedList创建插入方法 我对C++是很新的,并且在插入链接()函数中使用链接表有困难。以下是我收到的代码,从以下开始: #include <iostream> #include <cassert> #include <stdexcept> using namespace std; template<typename T> class mylist; template<typename T> ostream& operator<< (ostream &out, const mylist<T> &l); template <typename T> class mylist { public: // node definition struct node { T data; node* next_ptr; // node constructor node(const T &d, node* n):data(d),next_ptr(n){} }; // alternative node definition /* class node { public: T data; node* next_ptr; // node constructor node(const T&d, node* n):data(d),next_ptr(n){} }; */ // linked list head pointer node* head_ptr; //friend ostream& operator<< <>(ostream& out, const mylist<T>&l); friend ostream& operator<< (ostream &out, const mylist<T> &l); public: // default constructor mylist():head_ptr(nullptr) {} // head_ptr points nowhere // adds element to the front of the linked list void push_front(const T &elem) { head_ptr = new node(elem, head_ptr); } // check if linked list is empty bool empty() { return head_ptr == nullptr;} // number of nodes in linked list unsigned size() { return length();} unsigned length() { unsigned l = 0; for(node* current = head_ptr; current != nullptr; current = current->next_ptr) { ++l; } return l; } // copy constructor mylist(const mylist &other) { for(node* current_other = other.head_ptr; current_other != nullptr; current_other = current_other->next_ptr) { this.push_back(current_other->data); // inefficient, but easy :) } } // destructor ~mylist() { node* tmp; for(node* current = head_ptr; current != nullptr; current = tmp) { tmp=current->next_ptr; delete current; } } // at accessor method (returns the element at the ith position in the linked list) T& at(unsigned i){ unsigned l=0; node* current; for(current = head_ptr; current != nullptr; current = current->next_ptr) { if(l == i) break; ++l; } if (current == nullptr) throw out_of_range("index i is out of range"); else return current->data; } // bracket operator (returns the element at the ith position in the linked list) T& operator[](unsigned i){ return at(i); } // adds element to the end of the linked list void push_back(const T &elem) { if(empty()) { push_front(elem); return; } node* last_ptr; for(last_ptr = head_ptr; last_ptr->next_ptr != nullptr; last_ptr = last_ptr->next_ptr); last_ptr->next_ptr = new node(elem, nullptr); } // prints the contents of the linked list void print_all(void) { cout << "mylist{"; for(node* current_ptr = head_ptr; current_ptr != nullptr; current_ptr = current_ptr->next_ptr){ cout << current_ptr->data << " "; } cout << "}" << endl; }

C++;没有默认构造函数?正在尝试为LinkedList创建插入方法 我对C++是很新的,并且在插入链接()函数中使用链接表有困难。以下是我收到的代码,从以下开始: #include <iostream> #include <cassert> #include <stdexcept> using namespace std; template<typename T> class mylist; template<typename T> ostream& operator<< (ostream &out, const mylist<T> &l); template <typename T> class mylist { public: // node definition struct node { T data; node* next_ptr; // node constructor node(const T &d, node* n):data(d),next_ptr(n){} }; // alternative node definition /* class node { public: T data; node* next_ptr; // node constructor node(const T&d, node* n):data(d),next_ptr(n){} }; */ // linked list head pointer node* head_ptr; //friend ostream& operator<< <>(ostream& out, const mylist<T>&l); friend ostream& operator<< (ostream &out, const mylist<T> &l); public: // default constructor mylist():head_ptr(nullptr) {} // head_ptr points nowhere // adds element to the front of the linked list void push_front(const T &elem) { head_ptr = new node(elem, head_ptr); } // check if linked list is empty bool empty() { return head_ptr == nullptr;} // number of nodes in linked list unsigned size() { return length();} unsigned length() { unsigned l = 0; for(node* current = head_ptr; current != nullptr; current = current->next_ptr) { ++l; } return l; } // copy constructor mylist(const mylist &other) { for(node* current_other = other.head_ptr; current_other != nullptr; current_other = current_other->next_ptr) { this.push_back(current_other->data); // inefficient, but easy :) } } // destructor ~mylist() { node* tmp; for(node* current = head_ptr; current != nullptr; current = tmp) { tmp=current->next_ptr; delete current; } } // at accessor method (returns the element at the ith position in the linked list) T& at(unsigned i){ unsigned l=0; node* current; for(current = head_ptr; current != nullptr; current = current->next_ptr) { if(l == i) break; ++l; } if (current == nullptr) throw out_of_range("index i is out of range"); else return current->data; } // bracket operator (returns the element at the ith position in the linked list) T& operator[](unsigned i){ return at(i); } // adds element to the end of the linked list void push_back(const T &elem) { if(empty()) { push_front(elem); return; } node* last_ptr; for(last_ptr = head_ptr; last_ptr->next_ptr != nullptr; last_ptr = last_ptr->next_ptr); last_ptr->next_ptr = new node(elem, nullptr); } // prints the contents of the linked list void print_all(void) { cout << "mylist{"; for(node* current_ptr = head_ptr; current_ptr != nullptr; current_ptr = current_ptr->next_ptr){ cout << current_ptr->data << " "; } cout << "}" << endl; },c++,templates,singly-linked-list,C++,Templates,Singly Linked List,我的问题是我遇到了以下错误,我不知道如何修复它,也不知道它意味着什么: 1>c:\users\jaysen\documents\data structures\lab 2\lab 2\mylist_tpt.h(184): error C2512: 'mylist<T>::node' : no appropriate default constructor available 1> with 1> [ 1>

我的问题是我遇到了以下错误,我不知道如何修复它,也不知道它意味着什么:

1>c:\users\jaysen\documents\data structures\lab 2\lab 2\mylist_tpt.h(184): error C2512: 'mylist<T>::node' : no appropriate default constructor available
1>          with
1>          [
1>              T=std::string
1>          ]
1>          c:\users\jaysen\documents\data structures\lab 2\lab 2\mylist_tpt.h(182) : while compiling class template member function 'void mylist<T>::insert(const T &,unsigned int)'
1>          with
1>          [
1>              T=std::string
1>          ]
1>          c:\users\jaysen\documents\data structures\lab 2\lab 2\mylist_main.cpp(20) : see reference to class template instantiation 'mylist<T>' being compiled
1>          with
1>          [
1>              T=std::string
1>          ]
1>c:\users\jaysen\documents\data structures\lab 2\lab 2\mylist\u tpt.h(184):错误C2512:“mylist::node”:没有合适的默认构造函数可用
1> 与
1>          [
1> T=std::string
1>          ]
1> c:\users\jaysen\documents\data structures\lab 2\lab 2\mylist\u tpt.h(182):编译类模板成员函数“void mylist::insert(const T&,unsigned int)”时
1> 与
1>          [
1> T=std::string
1>          ]
1> c:\users\jaysen\documents\data structures\lab 2\lab 2\mylist\u main.cpp(20):请参阅正在编译的类模板实例化“mylist”的参考
1> 与
1>          [
1> T=std::string
1>          ]
提前谢谢你能给我的任何帮助

node* current, prev;
应该是:

node *current, *prev;
正如您编写的那样,
prev
不是指针。它是一个
节点


正如错误所述,没有办法以这种方式构造
节点。(需要两个参数)

错误在这一行:

node* current, prev;
这将声明
当前
指向
节点的指针
上一个
节点
的实例。像
*
&
[]
这样的声明符每次只应用于一个标识符。这就是为什么最好将它们放在标识符旁边,而不是放在类型旁边:

node *current, *prev;

错误信息非常清楚。非常感谢!我不明白星号是什么意思,我的老师从来没有解释过。这更有意义,现在我的程序运行得很好!你能解释一下其他两个声明符是什么意思吗?@JaysenStoudt
&
声明了一个引用,
[]
(通常在它们之间有一个数字)声明了一个数组。如果你的老师没有涵盖这些内容,那他/她就太可耻了,你可以从一个学校学到这些。
node *current, *prev;