ошибка C4430: отсутствует спецификатор типа / ошибка C2143: синтаксическая ошибка: отсутствует ';' до '*' - PullRequest
1 голос
/ 29 ноября 2009

Я получаю обе ошибки в одной строке. Мост * первый в классе 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 ]

4 голосов
/ 29 ноября 2009

Объявить 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];
};
2 голосов
/ 29 ноября 2009

Отсутствует предварительное объявление для Bridge. В противном случае при компиляции Lan компилятор класса не знает, что такое Bridge*. Вы должны сообщить компилятору, что Bridge - это класс, который вы собираетесь определить позже. Вперед объявить его как class Bridge; до class Lan

1 голос
/ 29 ноября 2009

Мост не существует, пока после объявления Lan. Вы должны заранее объявить Бридж. кроме того, Lan не будет компилироваться, потому что Host также не известен, и предварительное объявление не поможет, потому что компилятору нужно знать размер Host.

1 голос
/ 29 ноября 2009

Bridge не определено в момент его использования.

вам нужно предварительное объявление, чтобы компилятор знал, что Bridge является допустимым именем класса. перед классом Lan напишите:

class Bridge;
1 голос
/ 29 ноября 2009

Просто поставьте class Bridge; перед объявлением класса Lan.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...