2017-10-18 22 views
-2

Je veux accéder aux méthodes et champs de la classe Product dans la classe Menu. Donc j'écrire le code suivant:Erreur de syntaxe C++ dans le constructeur - arugment fait référence à l'objet d'une autre classe

Menu.h

#include "Product.h" 
class Menu{ 
public: 
    Menu(Product& prod); 
    Menu(); 
private: 
    Product product;} 

Menu.cpp

#include "Menu.h" 
Menu::Menu(Product& prod) { this->product = prod; } 
Menu::Menu() {} 

Product.h

#include "Menu.h" 
Class Product{ 
public: 
    Product(): 
} 

et j'obtiens l'erreur suivante dans le constructeur du Menu: erreur de syntaxe: identifiant 'Product'.

i changé constructeur Menu pour:

Menu(const Product& prod) 

mais ça n'a pas trop.

Quelqu'un peut-il résoudre le problème?

+2

Veuillez fournir [mcve]. Actuellement, on ne sait pas ce qui est déclaré dans 'Product.h' (si la classe' Product' est même déclarée ici). –

+0

Le produit est une classe vide sans champ et sans méthodes avec le constructeur defualt mais je l'ai ajouté. – qblacksheep

+0

Placez le point-virgule après la définition de classe comme suit: 'class Menu {...};' – scopchanov

Répondre

0

Après avoir nettoyé votre code des erreurs, il ressemble à ceci et compile comme un charme:

Menu.h

#include "Product.h" 

class Menu { 
public: 
    Menu(Product& prod); 
    Menu(); 
private: 
    Product product; 
}; 

Menu.cpp

#include "Menu.h" 

Menu::Menu(Product& prod) 
{ 
    product = prod; 
} 

Menu::Menu() 
{ 

} 

Product.h

class Product { 
public: 
    Product() 
    { 

    } 
}; 
0

supprimer #include "Menu.h" de Product.h

et oui, s'il vous plaît donner un exemple complet.

+0

S'il y a des gardes d'en-tête, cela ne fait certainement pas de différence. –

+1

@SamerTufail Avez-vous vu des protections d'en-tête dans l'exemple montré? –

+0

@ AlgirdasPreidžius généralement ils sont générés automatiquement et lors de la publication des exemples, généralement ils ne sont pas ajoutés. Point étant j'attendrais [mcve] –