2009-11-29 5 views
1

Je reçois les deux erreurs sur la même ligne. Bridge * premier dans la classe Lan. Qu'est-ce que je rate?erreur C4430: spécificateur de type manquant/erreur C2143: erreur de syntaxe: manquant ';' avant '*'

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

Répondre

4

Déclare Bridge avant 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

+1. Mais le prochain problème sera la définition de l'hôte *, requise pour Lan :) –

+0

donc tout est une question de déclarations. Merci – melih

2

Il vous manque la déclaration avant pour Bridge. Sinon, lors de la compilation Lan compilateur de classe ne sait pas ce que Bridge* est. Vous devriez dire au compilateur que Bridge est une classe que vous allez définir plus tard. Avant de déclarer comme class Bridge; avant class Lan

1

Il suffit de mettre un class Bridge; avant la déclaration de la classe Lan.

1

Bridge n'est pas défini au moment où il est utilisé.

vous avez besoin d'une déclaration directe afin que le compilateur sache que Bridge est un nom de classe valide. avant la classe Lan, écrivez:

class Bridge; 
1

Le pont n'existe pas avant la déclaration Lan. vous devriez transférer-déclarer Bridge. en outre, Lan ne compilera pas car Host n'est pas connu non plus, et forward ne sera d'aucune aide, car le compilateur doit connaître la taille de l'hôte.

Questions connexes