0

我是 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

不知何故,我很难运行这个程序并使它工作,我看不出它有什么问题。感谢您的任何帮助或建议。

4

4 回答 4

1

你能显示你用来编译的那行吗?听起来您试图longgcd.cpp独立编译为可执行文件,并且由于该文件没有main. 链接器正确地抱怨它找不到main.

最简单的解决方案是将两个文件一起编译

g++ $FLAGS longgcd.cpp main.cpp
于 2012-09-06T22:31:00.897 回答
1

您应该编译包含该main()函数的源文件。

请注意,#include通常不鼓励使用 cpp。您可以将声明gcd放在头文件中,并从包含它的代码的实现 cpp 和调用它的主文件中包含此文件。在这种情况下,您需要将两个cpp 文件都指定到编译器命令行,因为它们都是汇编最终程序所必需的。即使有这种复杂性,这种方式也比包含 cpp 要好得多。

于 2012-09-06T22:31:39.717 回答
1

一个问题是它main应该在您的 .cpp 文件中,而不是您的标头中。

另一个是您通常#include将标头(.h 或 .hpp)放入 .cpp 文件中,而不是相反。

另外,请阅读一本不错的 C++ 书籍。

于 2012-09-06T22:33:00.760 回答
0

不包括longgcd.cpp. 你几乎不应该包含一个.cpp(除非你真的,真的,知道发生了什么)

您应该将所有cpps 指定给编译器。例如:g++ main.cpp longgcd.cpp

还要将这long gcd(long m, long n);条线移到您的主要功能上方。

于 2012-09-06T22:31:53.860 回答