所以我正在做一个链表作业,在链表表单中给定两个数字,将数字相加并在链表表单中做出最终答案。我的代码不断收到"未声明的标识符"错误,我想知道如何解决它。
错误信息:
List.cpp:48:3:错误:使用未声明的标识符"追加" 附录(h, c(;
谢谢。
#include <iostream>
#ifndef LISTNODE_H
#define LISTNODE_H
using namespace std;
class ListNode {
public:
ListNode();
ListNode(int value, ListNode* next);
int value;
ListNode *next;
private:
friend class List;
};
#endif
#include <iostream>
#include "ListNode.h"
using namespace std;
ListNode:: ListNode() {
value = 'b';
next = NULL;
}
#include <iostream>
#include "ListNode.h"
#include <vector>
#ifndef LIST_H
#define LIST_H
using namespace std;
class List {
public:
List();
void append(ListNode* node, vector<char> c);
ListNode *head;
};
#endif
#include <iostream>
#include <string>
#include "List.h"
#include <vector>
#include "ListNode.h"
using namespace std;
void List:: append(ListNode *node, vector<char> c) {
//ListNode *temp
for(int i = 0; i < c.size(); i++) {
if(head == NULL) {
head = node;
}
else {
ListNode* itr = head;
while(itr -> next != NULL) {
itr = itr -> next;
}
node = itr -> next;
node -> value = c[i];
cout << node -> value << endl;
}
}
}
List:: List() { //Initializes the head and the tail for the whole class
head = NULL;
}
int main() {
ListNode *h;
string num1, num2, sentence;
vector<char> c;
cout << "Type in two numbers" << endl;
cout << "Number 1: " << endl;
cin >> num1;
cout << "Number 2: " << endl;
cin >> num2;
//cout << "Type in a sentence: " << endl;
//cin >> sentence;
cout << "--------" << endl;
for(int i = 0; i < num1.size(); i++) {
c.push_back(num1[i]);
}
append(h, c);
return 0;
}
此代码:
append(h, c);
调用名为append
的自由函数。但是您的代码中没有这样的函数。
List
类中确实有一个append
函数,但它是一个成员函数,因此您需要一个List
对象来调用该函数。所以你需要这样的东西:
List l;
l.append(h, c);
您在类列表中定义了成员函数附加(顺便说一下,(函数(没有任何意义(
void List:: append(ListNode *node, vector<char> c) {
//...
}
但是在 main 内部,您正在调用一个独立的函数附加
append(h, c);
与类列表无关。
您甚至没有在主要声明一个 List 类型的对象。
请注意,类 ListNode 具有类型为int
的数据成员。
int value;
但是,您正在尝试在此数据中保存 char 类型的成员对象,这些对象是声明为vector<char> c
的向量的元素。
并且完全不清楚为什么类ListNode的默认构造函数使用字符'b'
初始化数据成员值。
ListNode:: ListNode() {
value = 'b';
next = NULL;
}
所以整个代码没有意义。
似乎您的意思是类ListNode的数据成员值的类型为char
而不是int
。
char value;
在这种情况下,类List
的函数append
可以通过以下方式声明和定义
void List:: append( const std::vector<char> &v )
{
ListNode **current = &head;
while ( *current ) current = &( *current )->next;
for ( const auto &item : v )
{
*current = new ListNode( item, nullptr );
current = &( *current )->next;
}
}