2009-11-29 5 views
1

같은 줄에 두 가지 오류가 표시됩니다. Lan 클래스의 Bridge *. 나는 무엇을 놓치고 있습니까?오류 C4430 : 누락 된 형식 지정자/오류 C2143 : 구문 오류 : 누락 된 ';' before '*'

#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 

using namespace std; 


class Lan{ 
    Bridge *first; 
    Bridge *second; 
    Host hostList[10]; 
    int id; 
}; 

class Bridge{ 
    Lan lanList[5]; 
}; 




class Host{ 
    Lan * lan; 
    int id; 
public: 
    Host(int newId) 
    { 
     id=newId; 
    } 
}; 



void main(){ 

return; 
} 

답변

4

전에 class Bridge;로 선언합니다.

+1

+1. 그러나 다음 문제는 Lan *에 필요한 호스트 * 정의 *가 될 것입니다. –

+0

그래서 선언에 관한 것입니다. 감사 – melih

2

Bridge에 대한 전달 선언이 누락되었습니다. 그렇지 않으면 Lan 클래스 컴파일러를 컴파일 할 때 Bridge*이 무엇인지 알 수 없습니다. 나중에 정의 할 클래스 인 Bridge임을 컴파일러에 알려야합니다. 앞으로 그냥 란 클래스의 선언 전에 class Bridge;을 넣어 Bridge

#include <stdio.h> 
#include <stdlib.h> 
#include <iostream> 

using namespace std; 

class Bridge; 

class Lan{ 
    Bridge *first; 
    Bridge *second; 
    Host hostList[10]; 
    int id; 
}; 

class Bridge{ 
    Lan lanList[5]; 
}; 
1

Lan 전에 선언 class Lan

1

Bridge은 사용되는 순간에 정의되지 않습니다.

컴파일러에서 Bridge이 유효한 클래스 이름임을 알 수 있도록 정방향 선언이 필요합니다. Lan 클래스 전에 다음을 작성하십시오.

class Bridge; 
1

LAN 선언 이후까지는 브리지가 존재하지 않습니다. 다리를 앞으로 선언해야합니다. 게다가 컴파일러는 호스트의 크기를 알아야하기 때문에 Host가 알려지지 않았기 때문에 Lan이 컴파일되지 않고 앞으로 선언이 도움이되지 않습니다.