PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Merkwürdige Fehlermeldung in C++



Roman_1980
16-08-2004, 20:35
Hallo, hab mal wieder ein Problem und hoffe mal das einem C-lernenden Studenten jemand wieder aus der Patsche helfen kann...

Folgende Dateien sind vorhanden:

Main.cpp:
-----------------------
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
// Liste Objekte;
// Objekte.GegenstandvonDatei("E:\\Textadventure\\Gegenstand.txt");
// Objekte.AusgabeGegName();
system("PAUSE");
return 0;
}
--------------------------

Gegenstand.h:
-------------------------
#ifndef _GEGENSTAND_
#define _GEGENSTAND_

#include <iostream>
using namespace std;

class Gegenstand
{
private:
char *Name; //Name des Gegenstandes
char *Beschreibung; //Beschreibung (Kurztext)
unsigned int Nummer; //Nummer des Gegenstandes (so ne Art Index)
unsigned int Gewicht; //Gewicht in Gramm
int BeideHande; //Braucht das Objekt beide Hände? (0=nein, 1=ja)
int Einzigartig; //Darf das Objekt nur einmal im Spiel vorkommen?
//(0=nein, 1=ja, 2=ja, und wurde schon verwendet)
Gegenstand *next; //für verkette Liste
public:
Gegenstand() {this->next=NULL;}
Gegenstand(char *GegName,char *GegBeschreibung,int,int,int,int);
void GegNext(Gegenstand *NeuNext); //diese Funktion will er nicht, warum??
Gegendstand* HoleGegNext(void) {return this->next;}

char* AusgabeName(void) {return this->Name;}
char* AusgabeBeschreibung() {return this->Beschreibung;}
int AusgabeNummer() {return this->Nummer;}
int AusgabeGewicht() {return this->Gewicht;}
int AusgabeHand() {return this->BeideHande;}
int AusgabeArt() {return this->Einzigartig;}

}; //class Gegenstand


#endif
-------------------

Gegenstand.cpp:
-----------------------
#include "Gegenstand.h"

#include <string.h>
#include <iostream>
using namespace std;

Gegenstand::Gegenstand(char *GegName,char *GegBeschreibung,int NR,int Gew,int Hande,int Art)
{
this->Name=new char[strlen(GegName)+1];
strcpy(this->Name,GegName);
this->Beschreibung=new char[strlen(GegBeschreibung)+1];
strcpy(this->Beschreibung,GegBeschreibung);
this->Nummer=NR;
this->Gewicht=Gew;
this->BeideHande=Hande;
this->Einzigartig=Art;
this->next=NULL;
}//Gegenstand::Gegenstand


void Gegenstand::GegNext(Gegenstand *NeuNext)
{
this->next=NeuNext;
}//NextvonGegenstand
---------------------

Beim Kompilieren gibt er mir die Meldung "in File included from Gegenstand.cpp". Hab rausgefunden wenn ich die Funktion in Gegenstand.h auskommentiere (hab sie mit einem Kommentar versehen hinten) funktionierts. Was ist an dieser sch..önen Funktion bitte falsch und warum???

Bin für jede Hilfe dankbar...
Roman

anda_skoa
16-08-2004, 20:51
Gib uns mal die ganze Fehlermeldung.

Ein paar andere Tips:
kein using namespace in .h files

string statt char*, wesentlich bequemer

Ciao,
_

Roman_1980
16-08-2004, 21:15
Ok, hier die Ganze Meldung:
1 E:\Textadventure\Gegenstand.cpp
In file included from Gegenstand.cpp
22 E:\Textadventure\Gegenstand.h
syntax error before `*' token
24 E:\Textadventure\Gegenstand.h
semicolon missing after declaration of `Gegenstand'

Zeile 22 ist die Zeile der Problem - Funktion
24 ist dann wahrscheinlich ein Folgefehler (Kommentier ich Zeile 22 aus dann funkts ja wunderbar).....

In C++ kann ich String schreiben? So wie in Java?

anda_skoa
16-08-2004, 21:26
Ok, hier die Ganze Meldung:
1 E:\Textadventure\Gegenstand.cpp
In file included from Gegenstand.cpp
22 E:\Textadventure\Gegenstand.h
syntax error before `*' token


In der Zeile darunter steht Gegendstand statt Gegenstand



In C++ kann ich String schreiben? So wie in Java?
Natürlich, praktisch jede OOP Sprache hat eine Stringklasse



#include <string>
#include <iostream>

using namespace std:

int main()
{
string s1 = "abcd";
string s2;
s2 = s1; // normale Zuweisung statt strcpy

cout << s2 << ":" << s2.length() << endl; // methode length() für Länge statt strlen
}


Btw, es gibt auch fertige Implementationen für Standardcontainer wie zB Liste :)

Ciao,
_

Roman_1980
16-08-2004, 23:09
Danke, manchmal kann man(n) sich wirklich über sich selbst ärgern...