2010-01-24 7 views
1

다른 .cpp 파일의 클래스를 사용하는 C++ 프로그램을 실행하고 있습니다. 클래스에는 생성자 만 있습니다. 그것은 별도로 테스트 할 때 작동합니다. 메인 프로그램이 컴파일되지만, 실행할 때 생성자에 버그가 있습니다. 어떤 상황이 발생할 수 있다고 생각할 수 있습니까? 감사.C++ 클래스 컴파일 문제가 발생했습니다.

터미널에서 코드를 실행 한 것 같습니다. 괜찮습니다. 하지만 이클립스에서 프로젝트를 빌드 할 때, 그것은 다음 보여줍니다 코드는 여러 정의 오류가 있습니다 :

class model 
{ 
    public: 
    int textures []; 
    float vertices[][3]; 
    float triangles[][13]; 
    public: 
    model(const char*); // constructor 
}; 

model::model(const char* filename) 
{ 

오류 메시지는 다음과 같습니다 모델 : 모델 (숯불 CONST *) '

어떤`의 여러 정의 생각?

+3

버그를 생성하는 코드를 보여주십시오. – AraK

+0

코드는 어디에 있습니까? – wilhelmtell

+0

정보가 충분하지 않습니다. – Drakosha

답변

2

당신은 .H (헤더)와 a.cpp (실행) 파일에 코드를 분할하고 둘 필요가 : 후자에

model::model(const char* filename) 
{ 

. 이 기능 때마다 헤더의 새로운 정의를 얻을 수 있기 때문에

class model { 
    ... 
    model(const char*) { 
    // constructor body here 
    } 
}; 
2

어쨌든, 임의의 추측을 시도 할 것입니다. 삼각형 배열이 오버플로 된 것 같습니다 (아마도 카운터가 너무 큽니다). 그리고 힙이나 스택을 파기하고 있습니다.

한 가지 더. 이 줄 :

if (str[0] != '#' and !str.empty()) 

은 버그입니다. str이 비어 있으면 str [0]을 읽고 싶지 않습니다. 당신은 주변의 순서를 전환해야합니다

if (!str.empty() and str[0] != '#') 
+1

실제로 '및'은 '&&';과 동일합니다. C에서는'iso646.h'를 포함해야했지만 C++에서는 암묵적으로 사용할 수 있습니다. 그것들을 대체 토큰이라고 부르며, 2.5 절에서 찾을 수 있습니다. 나는 개인적으로 그들을 사용하는 관행을 싫어한다. – GManNickG

+0

@GMan - 감사합니다. 전 그 언어의 모서리를 알지 못했습니다. –

+0

아무런 문제가 없습니다. 실제로 이상한 곳입니다. – GManNickG

0

오류가 발생합니다 생성자의 정의 (그리고 다른 멤버 함수) 헤더 파일의 클래스 내에 있도록 또는 클래스를 다시 작성 어딘가에 포함되어 있습니다. 이 파일이 프로그램의 둘 이상의 장소에서 사용되면 오류가 발생합니다.

생성자를 별도의 구현 파일 (다른 사람들이 사용할 수 있도록 클래스가 헤더로 이동하고 함수 구현은 .cpp/cc 파일로 이동)에서 정의해야 할 수 있습니다. 또는 외부에서 수행하는 대신 클래스 블록 내에서 정의 할 수도 있습니다.

관련 문제