关于语法方面的问题
大家好,我写了一次程序,名字是3_7.cpp,代码如下:
- C/C++ code
#include<iostream>using namespace std;typedef char ElemType;struct GLNode{ bool tag; union{ ElemType data; GLNode* sublist; }; GLNode* next;};void Create1(GLNode*& GL, char* a){ if(NULL == a) { return; } if('\0' == *a) return; if('(' == *a) { GL->tag = true; Create1(GL->sublist, ++a); } else if('#' == *a) { GL = NULL; } else { GL->tag = false; GL->data = *a; } ++a; if(*a == ',') Create1(GL->next), ++a; else if(*a == ')' || *a == ';') else if(*a == ')' || *a == ';') GL->next = NULL;}void Print(GLNode* GL){ if(GL->tag) { cout << '('; if(GL->sublist == NULL) cout << '#'; else Print(GL->sublist); cout << ')'; } else cout << GL->data; if(GL->next != NULL) { cout << ','; Print(GL->next); }}int main(){ GLNode* GL = NULL; char str[] = "(a,(#),b,c(d,(e)));"; Create1(GL, str); Print(GL); return 0;}
但是在fedora上面用命令“g++ 3_7.cpp -g -o 3_7”,编译出问题:
3_7.cpp: 在函数‘void Create1(GLNode*&, char*)’中:
3_7.cpp:15:6: 错误:给予 function‘void Create1(GLNode*&, char*)’的参数太少
3_7.cpp:15:6: 附注:在此声明
请问是什么原因?谢谢!
[解决办法]
楼主粗心了,看这句
if(*a == ',')
Create1(GL->next), ++a;
只有一个参数
[解决办法]
因为你这相当于递归定义了。Create1(GL->next), ++a;调用函数的时候传值过去,结果接收错误,因为参数少了。所以是在定义的时候出错!
[解决办法]
编译器没有办法确定:你是需要Greate1函数带一个参数,还是带两个参数。
所以只能告诉你函数定义有问题。