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ファイルをコンパイラのコマンドラインに指定する必要があります。これらは両方とも最終的なプログラムをアセンブルするために必要だからです。この複雑さがあっても、この方法はcppsを含めるよりもはるかに優れています。

于 2012-09-06T22:31:39.717 に答える
1

1つの問題はmain、ヘッダーではなく.cppファイルにある必要があることです。

もう1つは、通常#includeはヘッダー(.hまたは.hpp)を.cppファイルに挿入することであり、その逆ではありません。

また、まともなC++の本を読んでください。

于 2012-09-06T22:33:00.760 に答える
0

を含めないでくださいlonggcd.cpp.cpp(本当に、本当に、何が起こっているのかを知っている場合を除いて)を含めるべきではありません

cppコンパイラにすべてを指定する必要があります。例えば:g++ main.cpp longgcd.cpp

また、long gcd(long m, long n);行をメイン関数の上に移動します。

于 2012-09-06T22:31:53.860 に答える