导入标头时出现此错误,但找不到原因(此处为C ++新手)。
main.cpp:
#include <iostream>
#include <string>
#include "add.h"
using namespace std;
int main()
{
cout << "The addition result is " << myAddition(2,3) << endl;
return 0;
}
add.cpp:
#include "add.h"
int myAddition(int nb1, int nb2)
{
return nb1+nb2;
}
add.h:
int myAddition(int nb1, int nb2);
当我尝试编译main.cpp(在OS X 10.12.6中使用Atom和“ gpp-compiler”加载项)时,出现此错误:
体系结构x86_64的未定义符号: “ myAddition(int,int)”,引用自: _main在main-a2ca70.o中 ld:找不到架构x86_64的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)
它也说:
未捕获的回调必须是一个函数
堆栈跟踪为:
TypeError [ERR_INVALID_CALLBACK]:回调必须是一个函数 在maybeCallback(fs.js:157:9) 在Object.fs.writeFile(fs.js:1290:14) 在ChildProcess.child.on(/Users/sessiondel/.atom/packages/gpp-compiler/index.js:299:12) 在ChildProcess.emit(events.js:182:13) 在也许关闭(internal / child_process.js:961:16) 在Socket.stream.socket.on(内部/child_process.js:380:11) 在Socket.emit(events.js:182:13) 在Pipe._handle.close [作为_onclose](net.js:596:12)
谢谢!
答案 0 :(得分:1)
在C ++中,如果要编译位于多个文件中的某些代码,则必须明确告知编译器在哪里可以找到某些函数,在这种情况下为函数add
,因此为了为此,您必须以这种方式在编译器中指定文件:
g++ main.cpp add.cpp
,在编译后,编译器将使用编译后的文件生成一个a.out
文件,并运行./a.out
。
也许不是Atom的C ++ IDE,Atom只是尝试编译该文件,而C ++编译器找不到object file
(扩展名为.o)中的函数。
答案 1 :(得分:1)
尝试一下
g++ -c add.cpp
g++ -c main.cpp
g++ add.o main.o -o exe_name