2012-03-23 4 views
1

I 받고있어 오류 전에 :예상 클래스 이름이 '{'토큰

#ifndef __VEICULO__ 
#define __VEICULO__ 
#include <iostream> 
#include "proprietario.h" 
#include "roda.h" 
#include "motor.h" 

using namespace std; 
class Motor; 
class Proprietario; 
class Veiculo{ 
protected: 
    int nPassageiros; 
    string modelo; 
    string placa; 
    int aFabricacao; 
    Proprietario* pai; 
    Roda* rodas; 
    Motor* mMotor; 
    int nRodas; 
    }; 

메소드를 삭제했습니다. 그 코드를 추가하면 오랫동안 미안합니다. 코드는 PT-BR에 있습니다. 문제는 일반적으로 전달 선언입니다. 하지만 문제를 찾을 수 없습니다. 많은 포럼을 보았지만 문제를 찾을 수 없습니다 ..

누군가가 도와 줄 수 있습니까?

코드의 다른 부분이 필요합니까?

+0

Proprietario.h 및 Veiculo.h의'#endif's가 누락 되었습니까? 아니면 복사 붙여 넣기로 삭제 되었습니까? – Shahbaz

+0

@Shahbaz 복사 붙여 넣기 오류가 아니라면 오류 메시지는'expected # endif '줄에 표시됩니다. –

+0

@LuchianGrigore 그 이유는 그것을 대답으로 쓰지 않았기 때문입니다. 나는 단지 이것을 사이드 오류로 말하고 싶었다. – Shahbaz

답변

2

실제 문제는 #include 사전 처리기 지시어의 자유로운 사용입니다. 일반적으로 필요한 가장 낮은 범위에 헤더 파일을 포함하고 앞으로 할 수있는 모든 것을 선언해야합니다. 일반적으로 헤더 파일에 대해 전체 클래스 선언이 필요하지는 않습니다. 헤더 파일은 일반적으로 구현 세부 정보를 알 필요가 없습니다. 헤더를 포함하여 이라고 명시 적으로 선언해서는 안됩니다.

이 답변을 작성할 당시 코드는 질문에 의미가 있으므로 veiculo.h (및 proprietario.h)에 대한 순환 의존성이 있습니다. veiculo.h는 하위 클래스 Motocicleta의 헤더에 실제로 필요하므로 각 헤더에서 이미 전달 선언 한 클래스에 대한 #include 지시문을 제거해야합니다. 그런 다음 필요에 따라 소스 파일에 헤더를 포함 할 수 있습니다.

관련 문제