跨C++源文件调用类成员函数编译错误求助
问题排查与解决
我来帮你梳理代码里的问题,一步步解决编译错误:
1. 头文件类定义缺少分号
你的header.h里类c的定义结尾少了分号,这是C++的强制语法要求,类定义结束必须以};收尾:
#ifndef HEADER_H_ #define HEADER_H_ class c { public: int foo(int bar); // 必须添加下面这个函数的声明,否则编译器不知道它是类的成员 int other_function(int num); }; // 这里的分号不能少! #endif /*HEADER_H_*/
2. 未声明成员函数other_function
你在function_call.cpp里定义了c::other_function,但这个函数并没有在类c的声明里出现。编译器需要先在头文件的类中看到函数声明,才能识别后续的实现属于类成员,所以必须补上这个声明(上面的代码已经添加)。
3. 编译时需链接所有相关源文件
foo函数的实现放在definition.cpp里,other_function放在function_call.cpp里,编译时必须把两个源文件一起参与编译链接,否则会出现未定义符号的错误。比如用GCC编译的命令应该是:
g++ definition.cpp function_call.cpp -o your_program
也可以先分别编译生成目标文件,再链接:
g++ -c definition.cpp # 生成definition.o g++ -c function_call.cpp # 生成function_call.o g++ definition.o function_call.o -o your_program
额外说明
你在other_function里直接调用foo(num)是完全没问题的——因为它们属于同一个类的成员函数,编译器会自动识别为调用当前对象的foo方法,也可以显式写成this->foo(num),效果一致。
把以上修改完成后,编译就能正常通过了。
内容的提问来源于stack exchange,提问作者Christophe Brown
相关产品推荐
相关产品推荐

