错误C4430:缺少类型说明符/错误C2143:语法错误:缺少';'在'*'之前

时间:2009-11-29 12:45:15

标签: c++ visual-c++

我在同一行上遇到两个错误。 Bridge *首先在Lan班级。我错过了什么?

#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;
}

5 个答案:

答案 0 :(得分:4)

Bridge

之前声明Lan
#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 :(得分:2)

您错过了Bridge的前瞻性声明。否则,在编译Lan类时,编译器不知道Bridge*是什么。您应该告诉编译器Bridge是一个您稍后要定义的类。转发在class Bridge;

之前将其声明为class Lan

答案 2 :(得分:1)

在Lan类的声明之前放一个class Bridge;

答案 3 :(得分:1)

Bridge在使用时尚未定义。

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

class Bridge;

答案 4 :(得分:1)

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