2009-11-29 123 views
1

我在同一行上得到这两个错误。桥首先在兰课上。我错过了什么?错误C4430:缺少类型说明符/错误C2143:语法错误:缺少';'之前'*'

#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

声明BridgeLan

#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

+1。但接下来的问题将是主机*定义*,Lan需要:) –

+0

所以关于声明。谢谢 – melih

2

您错过了Bridge的转发声明。否则编译时Lan类编译器不知道Bridge*是什么。您应该告诉编译器Bridge是您稍后要定义的类。远期声明为class Bridge;以前class Lan

1

兰类的声明之前,只要把class Bridge;

1

Bridge在使用时尚未定义。

您需要一个前向声明,以便编译器知道Bridge是一个有效的类名。在Lan类之前,写入:

class Bridge; 
1

桥接器在Lan声明之后才存在。你应该向前宣布Bridge。除此之外,Lan也不会编译,因为Host也不知道,而且前向声明也无济于事,因为编译器需要知道主机的大小。

相关问题