有人能告诉我为什么这个简单的函数调用会返回底部显示的编译器错误吗?
//This is a type definition that I use below to simplify variable declaration
typedef vector<int> islice;
typedef vector<islice> int2D;
// therefore int2D is of type vector<vector<int> >
// This is the function prototype in the DFMS_process_spectra_Class.hh file
int DumpL2toFile(int2D&);
// This is the type declaration in the caller
int2D L2Data;
// This is the function call where error is indicated
int DumpL2toFile(L2Data); (**line 90 - error indicated here**)
// this is the function body
int DFMS_process_spectra_Class::DumpL2toFile(int2D& L2) {
string file=sL3Path+L2Info.fileName;
fstream os;
os.open(file.c_str(), fstream::out);
os << "Pixel A-counts B-counts" << endl;
char tmp[80];
for (int i=0; i<512; ++i) {
sprintf(tmp,"%5d %8d %8d\n",L2[i][0],L2[i][1],L2[i][2]);
os << string(tmp) << endl;
}
os.close();
return 1;
}
//这是编译器命令和错误
g++ -w -g -c src/DFMS_process_spectra_Class.cc -o obj/DFMS_process_spectra_Class.o
src/DFMS_process_spectra_Class.cc:
In member function 'int DFMS_process_spectra_Class::processL2()':
src/DFMS_process_spectra_Class.cc:90: error:
cannot convert 'int2D' to 'int' in initialization
为什么编译器会将int2D&
与int
混淆?调用,函数原型和函数始终是int2D
类型!!
//这是我的编译器版本 i686-apple-darwin11-llvm-g ++ - Mac OS X 10.8.3上的4.2
顺便说一下,我在使用g ++ 4.3
的Linux机器上遇到了同样的错误感谢任何帮助,迈克
答案 0 :(得分:1)
// This is the function call where error is indicated
int DumpL2toFile(L2Data); (**line 90 - error indicated here**)
那不是函数调用!假设这一行发生在一个函数体内(你的代码中不清楚),函数调用将是:
DumpL2toFile(L2Data); // No int
OP,这就是你需要知道的全部内容。但是如果你很好奇,编译器会将你的语句解析为
int AnyOldIdentifier(L2Data);
这是一个名为int
的{{1}}变量的声明,初始化为值AnyOldIdentifier
。并且它无法初始化L2Data
到int
,因为L2Data
是L2Data
,而不是int2D
。
答案 1 :(得分:0)
此行周围有语法错误:
// This is the function call where error is indicated
int DumpL2toFile(L2Data); (**line 90 - error indicated here**)
如果您致电DumpL2toFile
。你不再需要返回类型了。这样,编译器将其视为函数声明,但L2Data
不是类型,它是int2D
的对象,这会触发编译错误
同时,编译错误说错误insde processL2()
函数,而你没有发布这部分的代码。