2017-04-19 6 views
1

lifeform.hwie Struktur in einer Klasse

class lifeform 
{ 
    public: 
    struct item; 
    void buyItem(item &a); 
    //code.. 
}; 

lifeform.cpp verwenden

struct lifeform::item 
{ 
std::string type,name; 
bool own; 
int value,feature; 

    item(std::string _type,std::string _name,int _value,int _feature):type(_type), name(_name),value(_value),feature(_feature) 
    { 
     own=false; 
    } 
}; 

lifeform::item lBoots("boots","Leather Boots",70,20); 

void lifeform::buyItem(item &a) 
{ 
if(a.own==0) 
{ 

    inventory.push_back(a); 
    a.own=1; 
    addGold(-a.value); 
    std::cout << "Added " << a.name << " to the inventory."; 

    if(a.type=="boots") 
    { 
     hp-=inventory[1].feature; 
     inventory[1]=a; 
     std::cout << " (HP + " << a.feature << ")\n"; 
     maxHp+=a.feature; 
     hp+=a.feature; 
    } 
    } 

gibt es keine Fehler so weit, aber wenn ich sie will wie diese

in main.cpp verwenden

Compiler sagt mir [Error] 'lBoots' wurde in diesem Bereich nicht deklariert, aber ich erklärte es Klasse bin ich etwas fehlt?

+1

Es kann relevant sein zu teilen, was 'IGauntlets' ist. –

+0

Ich sehe keine Definition von 'lGauntlets'. Meinst du 'lBoots'? Und du musst * declare * in der Header-Datei oder keiner anderen [Übersetzungseinheit] (https://en.wikipedia.org/wiki/Translation_unit_ (Programmierung)) darüber wissen. –

+0

@RedPotato Denken Sie daran, dass 'struct' und' class' in C++ wirklich dasselbe sind. Der einzige Unterschied besteht darin, dass die Standardzugriffsebene von struct öffentlich ist, daher sind Vererbung und Mitglied standardmäßig öffentlich, während die Standardstufe der Klasse privat ist. Abgesehen davon gibt es keinen Unterschied. –

Antwort

1

Um Ihre lifeform::item lBoots Sie müssen verwenden Sie es in Haupt erklären:

#include "lifeform.h" 

extern lifeform::item lBoots; // <-- you need this. 

int main() 
{ 
    lifeform p; 
    p.buyItem(lBoots); 
} 

Oder alternativ sollten Sie extern lifeform::item lBoots; in Ihrem lifeform.h platzieren.

+0

Das Problem mit op ist nicht 'lifeform :: item', um ein unvollständiger Typ zu sein, sondern' lBoots' als externe Variable in seinem Header zu entlarven. –

+0

@GuillaumeRacicot gibt es kein Problem mit lifeform :: item, das Problem ist, erklärte ich 'lBoots' in _class.cpp_ kann aber nicht in _main.cpp_ – RedPotato

+0

@GuillaumeRacicot ja ich sehe es jetzt, ich denke, die Frage wurde bearbeitet. – Pavel

Verwandte Themen