Einer Klasse Werte geben



  • Ich bin C++ Anfänger und habe jetzt vor zum Üben eine Art kleines Rollenspiel zu machen. Ich will es erstmal hinbekommen, dass ich eine Tasche hab, wo ich definieren kann, an welcher Stelle der Tasche welches Item ist. Zum Testen habe ich mir erstmal Diamand, Edelstein, Granit und einen Felsbrocken gedacht (würden dann aber viel mehr werden). Ich habe mir gedacht, ein Vector (tasche) zu erstellen, das die Tasche darstellt. Der Inhalt ist vom Typ ein Objekt (item).
    Jetzt will ich durch "tasche[0].setitem(2)" sagen, dass an der 1. Stelle in der Tasche das Item "Granit" ist und mit 2 anderen Funktionen (getname und getpreis) will ich den Namen bzw den Preis Zurück geben lassen.

    Ich habe mal versucht so etwas hinzubekommen, aber es kommen Fehler. Hier mal die 3 betroffenen Dateien, um zu zeigen, was ich meine:
    haupt.cpp

    #include "includes.h"
    
    using namespace std;
    
    void main(){
    	int i;
    
    	//initarray();
    
    	vector<item> tasche(10);
    
    	tasche[0].setitem(0);
    	tasche[1].setitem(2);
    	tasche[2].setitem(1);
    	tasche[3].setitem(3);
    
    	cout << tasche[0].getname() << tasche[0].getpreis() << endl;
    	cout << tasche[1].getname() << tasche[1].getpreis() << endl;
    	cout << tasche[2].getname() << tasche[2].getpreis() << endl;
    	cout << tasche[3].getname() << tasche[3].getpreis() << endl;
    }
    

    class_item.h

    // class_item.h: Schnittstelle für die Klasse item.
    //
    //////////////////////////////////////////////////////////////////////
    
    #if !defined(CLASS_ITEM)
    #define CLASS_ITEM
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include <string>
    using namespace std;
    
    class item{
    private:
    	string i_name;
    	int i_preis;
    public:
    
    	struct itemstruct{
    		string name;
    		int preis;
    	};
    
    	itemstruct bigarray[4];
    
    	bigarray[0].name = "Diamand";
    	bigarray[0].preis = 500;
    	bigarray[1].name = "Edelstein";
    	bigarray[1].preis = 200;
    	bigarray[2].name = "Granit";
    	bigarray[2].preis = 100;
    	bigarray[3].name = "Felsbrocken";
    	bigarray[3].preis = 50;
    
    	item();
    	void setitem(int id);
    	string getname();
    	int getpreis();
    };
    
    #endif // !defined(CLASS_ITEM)
    

    class_item.cpp

    #include "class_item.h"
    
    item::item(){
    	i_name = "-leer-";
    	i_preis = 0;
    }
    void item::setitem(int id){
    	i_name = bigarray[id].name;
    	i_preis = bigarray[id].preis;
    }
    string item::getname(){
    	return(i_name);
    }
    int item::getpreis(){
    	return(i_preis);
    }
    

    Fehlermeldungen:

    1>class_item.cpp
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(28) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(28) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(28) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(29) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(29) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(29) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(30) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(30) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(30) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(31) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(31) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(31) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(32) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(32) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(32) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(33) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(33) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(33) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(34) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(34) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(34) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(35) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(35) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(35) : error C2238: Unerwartete(s) Token vor ';'
    1>haupt.cpp
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(28) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(28) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(28) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(29) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(29) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(29) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(30) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(30) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(30) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(31) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(31) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(31) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(32) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(32) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(32) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(33) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(33) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(33) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(34) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(34) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(34) : error C2238: Unerwartete(s) Token vor ';'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(35) : error C2143: Syntaxfehler: Es fehlt ';' vor '.'
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(35) : error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    1>c:\dokumente und einstellungen\rbs_phoenxi\eigene dateien\visual studio 2008\projects\test_vector\class_item.h(35) : error C2238: Unerwartete(s) Token vor ';'
    

    Jetzt ist die Frage, wie kriege ich die Fehlermeldungen weg, wie bekomme ich das Array mit den Verschiedenen Items in eine extra Datei und gibt es vielleicht noch eine andere bessere Möglichkeit, mein Vorhaben zu realisieren.

    MFG Michael



  • Zuweisungen haben in einer Klassendefinition nichts verloren. Wenn du dein bigarray füllen willst, mach das im Konstruktor.

    Du solltest dir aber auch nochmal Gedanken über das Design machen. Warum muss jedes item eine Kopie deiner Preis-Namen-Liste mitschleppen?



  • ich hatte es vorher auch nicht in der klasse. Ich hatte es in einer Extra Datei zusammen mit der Struktur. Doch auch wenn ich den include-befehl zu der Datei vor den include-Befehl der Datei class_item.cpp stelle, kommen die Gleichen Fehler und dazu noch, dass die Variable bigarray in der Klasse nicht definiert ist.

    Wie könnte man es denn noch machen?



  • rbs_phoenix schrieb:

    Wie könnte man es denn noch machen?

    Zuweisungen gehören in eine Funktion. Du kannst das nicht einfach irgendwo machen.



  • oh ja. Stimmt... Bin noch zu sehr PHP gewohnt^^
    Also ich hab es jetzt so hinbekommen, dass es geht:

    #include "class_item.h"
    
    item::item(){
    	i_name = "-leer-";
    	i_preis = 0;
    }
    void item::setitem(int id){
    	struct itemstruct{
    		string name;
    		int preis;
    	};
    
    	itemstruct bigarray[4];
    
    	bigarray[0].name = "Diamand";
    	bigarray[0].preis = 500;
    	bigarray[1].name = "Edelstein";
    	bigarray[1].preis = 200;
    	bigarray[2].name = "Granit";
    	bigarray[2].preis = 100;
    	bigarray[3].name = "Felsbrocken";
    	bigarray[3].preis = 50;
    
    	i_name = bigarray[id].name;
    	i_preis = bigarray[id].preis;
    }
    string item::getname(){
    	return(i_name);
    }
    int item::getpreis(){
    	return(i_preis);
    }
    

    Wobei halt es sehr unpraktisch ist, das Array in die Klasse reinzuschreiben. Deshalb dache ich, dass ich das wo anders mache.

    Habe das so gedacht, dass ich die Header-Datei so gestalte:
    includes.h

    #include <iostream>
    #include <vector>
    #include <string>
    #include "items.cpp"
    #include "class_item.h"
    

    items.cpp

    #include <string>
    using namespace std;
    
    struct itemstruct{
    	string name;
    	int preis;
    };
    
    void initarray(){
    	itemstruct bigarray[4];
    
    	bigarray[0].name = "Diamand";
    	bigarray[0].preis = 500;
    	bigarray[1].name = "Edelstein";
    	bigarray[1].preis = 200;
    	bigarray[2].name = "Granit";
    	bigarray[2].preis = 100;
    	bigarray[3].name = "Felsbrocken";
    	bigarray[3].preis = 50;
    }
    

    haupt.cpp

    #include "includes.h"
    
    using namespace std;
    
    void main(){
    	initarray();
    
    	vector<item> tasche(10);
    
    	tasche[0].setitem(0);
    	tasche[1].setitem(2);
    	tasche[2].setitem(1);
    	tasche[3].setitem(3);
    
    	cout << tasche[0].getname() << tasche[0].getpreis() << endl;
    	cout << tasche[1].getname() << tasche[1].getpreis() << endl;
    	cout << tasche[2].getname() << tasche[2].getpreis() << endl;
    	cout << tasche[3].getname() << tasche[3].getpreis() << endl;
    }
    

    und die Klasse so:

    #include "class_item.h"
    
    item::item(){
    	i_name = "-leer-";
    	i_preis = 0;
    }
    void item::setitem(int id){
    	i_name = bigarray[id].name;
    	i_preis = bigarray[id].preis;
    }
    string item::getname(){
    	return(i_name);
    }
    int item::getpreis(){
    	return(i_preis);
    }
    

    Doch dann kommt die Fehlermeldung, dass er bei class_item.cpp i_name und i_preis nichts zuweisen kann, da bigarray nicht deklariert ist.
    Wie kann ich das machen, dass die Klasse weiß, dass es das bigarray gibt?



  • void main()
    

    tzztzz...

    Sollte der Beitrag nicht eigentlich nach C++ statt MFC verschoben werden?
    Ich sehe keine MFC.


Anmelden zum Antworten