我有以下代码:
#include <iostream>
using namespace std;
class testing{
int test() const;
int test1(const testing& test2);
};
int testing::test() const{
return 1;
}
int testing::test1(const testing& test2){
test2.test();
return 1;
}
编译后,它给出了以下错误:
Undefined symbols:
"_main", referenced from:
start in crt1.10.5.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
为什么抱怨主?我不能在另一个文件中声明main并包含这个吗?
非常感谢!
答案 0 :(得分:23)
您已尝试将其链接:
g++ file.cpp
这不仅会编译它,还会尝试创建可执行文件。然后链接器无法找到它需要的主要功能。嗯,这样做:
g++ -c file.cpp
g++ -c hasmain.cpp
这将创建两个文件file.o和hasmain.o,两者都只编译到目前为止。现在你可以用g ++链接它们了:
g++ -omy_program hasmain.o file.o
它会自动确定那些已编译的文件,并调用它们上的链接器来创建一个文件“my_program”,这是你的可执行文件。
答案 1 :(得分:1)
如果在另一个文件中声明main函数,则必须单独编译这两个文件,然后将它们链接到1个可执行文件中。
除非你使用main函数从文件中包含文件的全部内容,否则这也会有效,尽管有点奇怪。但是,如果你这样做,那么你必须确保编译具有main()函数的文件。
答案 2 :(得分:0)
尝试这些(它们对我有用):
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install mingw-w64
请在运行之前保存您的代码。
有关参考,请参见此video