2012-09-06 7 views
0

저는 C++의 초보자이고 가장 큰 공통 요소를 찾는 프로그램을 작성하려고합니다.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; 
} 

을하고 난

#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 컴파일 할 수 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

두 파일을 같은 파일에 넣고 컴파일 해 보았습니까? – sarsnake

+0

코드를 더 잘 만들려면 몇 가지 요령이 필요합니다. 1) 인수에 액세스하기 전에 'argv'가 실제로 적어도 '3'인지 테스트 해보십시오. 2) 일반적으로 C++에서는 함수의 시작 부분이 아닌 초기화 된 시점에서 변수를 선언하는 것이 좋습니다. 이로 인해 코드가 더욱 긴장되고 성능이 더욱 향상 될 수 있습니다. – Grizzly

답변

1

컴파일하는 데 사용한 줄을 표시 할 수 있습니까? longgcd.cpp을 독립적으로 실행 파일로 컴파일하려고 시도한 것 같습니다. 해당 파일에 main이 없으므로, 링커는 정확하게 main을 찾을 수 없다고 불평했습니다.

가장 간단한 해결책은 함께

g++ $FLAGS longgcd.cpp main.cpp 
+0

사실 그것은 해결책이 아닙니다. main.cpp에있는'#include "longgcd.cpp"를 주목하라. 그것은 나쁜 생각 일지 모르지만,'longgcd.cpp'의 의미는 실제로 따로 따로 컴파일 할 필요가 없습니다. – Grizzly

+0

@ 그리즐리 : 나는 그것을 알아 차리지 못했다. 그러나 OP가 longgcd.cpp를 독립적으로 컴파일하려고 시도한 것처럼 들립니다. –

+0

나는 그 부분에 대해 논쟁하지 않을 것이다. 나는 당신의 대답이 정확하다는 것을 언급하기를 원한다면, include를 제거하거나 컴파일러 호출에서'longgcd.cpp'를 언급하지 말아야한다. – Grizzly

1

당신은 main() 기능이 포함 된 소스 파일을 컴파일해야 두 파일을 컴파일하는 것입니다.

참고 #include는 CPP의는 일반적으로 권장되지 않습니다 ING. gcd에 대한 선언을 헤더 파일에 넣고이 코드를 포함하는 구현 cpp와이 파일을 호출하는 주 파일에서이 파일을 포함 할 수 있습니다. 이 경우 컴파일러 명령 행에 cpp 파일을 지정해야합니다. 둘 다 최종 프로그램을 어셈블 링하는 데 필요하기 때문입니다. 이러한 합병증에도 불구하고이 방법은 cpps를 포함하는 것보다 훨씬 낫습니다.

0

longgcd.cpp를 포함하지 마십시오. 당신은 포함 거의 절대해야 .cpp

당신은 컴파일러에 모든 cpp의를 지정해야합니다 (당신은 정말, 정말, 추락 알고 제외). 예컨대 :

g++ main.cpp longgcd.cpp 또한 주요 기능 위의 long gcd(long m, long n); 라인을 이동합니다.

1

한 가지 문제는 main이 헤더 당신의 .cpp 파일에, 그리고하지 말아야한다는 것입니다.

또 다른

은 당신 일반적으로 #include .cpp 파일에 헤더 (.H 또는 .HPP) 및 다른 길은 없어.

또한 C++ 책을 읽어보십시오.

관련 문제