我是c ++的初学者,我正在尝试编写一个程序来找到最大的共同因素。在主要我有:
#include <iostream>
#include <cstdlib>
#include "longgcd.cpp"
int main(int argc, char* argv[]){
long gcd(long m, long n);
long m,n,g;
m=atol(argv[1]);
n=atol(argv[2]);
g=gcd(m,n);
std::cout<<"gcd("<<m<<","<<n<<")="<<g<<std::endl;
return 0;
}
然后我将子函数放入另一个名为longgcd.cpp
的文件中#include <iostream>
#include <cstdlib>
long gcd( long m, long n){
long r;
while(n !=0){
r=m%n;
m=n;
n=r;
}
return m;
}
不知何故longgcd.cpp无法编译。我收到一个错误:
/usr/lib/gcc/i486-linux-gnu/4.3.2/../../../../lib/crt1.o: In function `_start':
(.text+0x18): undefined reference to `main'
collect2: ld returned 1 exit status
make: *** [longgcd] Error 1
不知怎的,我运行这个程序并使它工作有困难,我看不出它有什么问题。感谢您提供任何帮助或建议。
答案 0 :(得分:1)
你能展示你用来编译的那一行吗?听起来你试图独立编译longgcd.cpp
作为可执行文件,并且由于该文件没有main
,链接器正确地抱怨它找不到main
。
最简单的解决方案是将两个文件一起编译
g++ $FLAGS longgcd.cpp main.cpp
答案 1 :(得分:1)
您应该编译包含main()
函数的源文件。
请注意,通常不鼓励使用#include
cpp。您可以将gcd
的声明放在头文件中,并从包含其代码的实现cpp和调用它的主文件中包含此文件。在这种情况下,您需要将两个 cpp文件指定到编译器命令行,因为它们都需要组装最终程序。即使有这种复杂性,这种方式也比包括cpps好得多。
答案 2 :(得分:1)
一个问题是{。{1}}应该在您的.cpp文件中,而不是您的标题。
另一个原因是您通常main
将一个标题(.h或.hpp)放入.cpp文件而不是相反。
另外,请阅读一本不错的C ++书籍。
答案 3 :(得分:0)
不要包含longgcd.cpp
。你几乎不应该包括.cpp
(除非你真的,真的,知道发生了什么)
您应该为编译器指定所有cpp
。例如:g++ main.cpp longgcd.cpp
同时将long gcd(long m, long n);
行移到主要功能上方。