C++代码报错Function definition is not allowed here,第22、25行错误如何解决?
报错诱因
- 核心原因:C++语法禁止在函数内部嵌套定义其他函数,你当前将
void main()、void traverse(node head)两个函数的定义写在了外层int main()的函数体内部,直接触发了语法规则校验报错。 - 附带逻辑错误:
- 重复定义
main()函数,C++规定程序有且仅有一个int main()入口函数,不允许多次定义; traverse函数的参数类型设置错误,你实际要传入的是node*指针类型,定义时写的node head是值传递,类型不匹配后续调用也会报错。
- 重复定义
解决方法
- 删除嵌套在
int main()内部的重复main()定义,不需要二次声明入口函数,直接在原有main()里调用traverse即可; - 将
traverse函数的定义移到main()函数的外部,放在node类定义之后即可,同时修正参数类型为node*。
修复后可正常运行的完整代码如下:
#include<bits/stdc++.h> using namespace std; class node{ public: int data; node *next; node (int data){ this->data = data; } }; // traverse函数移到main外部定义,参数修正为node*类型 void traverse(node* head){ node* cur = head; // 补充遍历输出逻辑 while(cur != NULL){ cout << cur->data << " "; cur = cur->next; } } int main() { node *n1 = new node(10); node *n2 = new node(15); node *n3 = new node(20); node *head = n1; head->next = n2; n2->next = n3; n3->next = NULL; // 直接调用traverse即可 traverse(head); return 0; }
内容的提问来源于stack exchange,提问作者Arjit Mishra
相关产品推荐
相关产品推荐

