2012-01-05 4 views
1

Java에서 C++로 마이그레이션 중입니다. C++은 클래스 파일을 별도의 파일로 선언하는 것을 어렵게 만듭니다. 그래서 난 내 MAIN.CPP에 도움,g ++에서 헤더 파일을 찾을 수 없습니다.

필요합니다

#include "Sphere.h" 

using namespace std; 
..... 
... 
.. 

int main(void) { 
    Sphere *earth = new Sphere(sphere_start ,sphere_end); 
... 
.. 
. 

을 내 Sphere.h

class Sphere 
{ 

    public: 
     Sphere(int,int); 

} 

에 내 Sphere.cpp

#include "Sphere.h" 

using namespace std; 

int sphere_start, sphere_end; 

Sphere::Sphere (int a, int b) 
{ 
    sphere_start = a; 
    sphere_end = b; 
} 

void Sphere::render(int i) 
{ 
    .... 
    .. 
    . 

} 

에서 이것은 내가 생각하기에 매우 기본적인 코드는 다음과 같은 오류가 발생한다.

main.cpp:14:20: fatal error: Sphere.h: No such file or directory 
compilation terminated. 

왜?

답변

3

Sphere.h는 Sphere.h가 포함 된 각 파일과 동일한 디렉토리에 있어야하며, Sphere.h가있는 디렉토리를 검색하도록 컴파일러에 지시해야합니다.

+0

모든 파일이 같은 디렉토리에있는 ...

g++ -o main.o -c -Iheaders main.cpp g++ -o sphere.o -c -Iheaders sphere.cpp g++ -o app main.o sphere.o -L. 

를 또는 어떤 파일이 –

+0

죄송 파일은 동일한에없는 예배 규칙서. lol stupid me –

+0

어떻게 모든 헤더 파일이 설치되어 있고 필요한 모든 dev-packages가 설치되어 있고 소스 파일이 올바른 헤더 경로를 참조하는지는 분명하지만이 문제를 "디버그"할 수 있지만 컴파일러는 여전히 헤더 파일. –

1

두 잠재적 인 오류 :

  • 는 Sphere.h는 MAIN.CPP과 같은 디렉토리에 있습니까?
  • Sphere.h는 Sphere.h이며 sphere.h는 아닌가?
2

당신은 명령 줄을 게시해야하지만 내 생각 엔 컴파일러에게 헤더 파일의 경로를 알려줘야한다는 것입니다. 당신이 리눅스를 사용하는 경우이 시도 :

g++ main.cpp shpere.cpp -I<path_to_Sphere.h> -o main 
5

당신은 헤더 파일을 찾을 수있는 위치에 컴파일 명령에 경로를 추가해야합니다. 헤더가 headers 디렉토리에있는 경우

-Iheaders을 추가

관련 문제