You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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是值传递,类型不匹配后续调用也会报错。
解决方法
  1. 删除嵌套在int main()内部的重复main()定义,不需要二次声明入口函数,直接在原有main()里调用traverse即可;
  2. 将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:24:03