Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » error C2259 - Problem mit Erzeugung einer Instanz

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
25.12.2006, 15:06 Uhr
DonKnilch




Zitat von ao:
Bitte aktuellen Code zeigen, Fehlermeldung wörtlich zitieren und die Codestelle markieren, auf die sich der Fehler bezieht. Sonst stochern wir im Nebel.


Also ich gebe mal ein Beispiel, da es sich sowieso überall um die gleichen Fehler handelt:

class Position{

public:
virtual ~Position() {}
virtual vector<Position*> possibleMoves() const=0;
virtual bool isGoal() const=0;
virtual string moveDescription(const Position* next) const=0 {
return "";
}
virtual bool equals(const Position* other) const=0;
virtual string toString() const=0;
virtual void createPossibleMoves() const=0;
virtual int getMerkmal() const=0;

};

class PositionZahlen : public Position {

private:
vector<Position*> moves;
string description;
int zahl;
int wurzel;
bool goal;
int ziel;

public:
PositionZahlen();
PositionZahlen(int startzahl);
vector<Position*> possibleMoves()const;
bool isGoal()const;
void setGoal(bool wert);
int getZahl();
int getZiel();
void setZiel(int zahl);
string moveDescription(Position *next)const;
bool equals(Position *other)const;
string toString()const;
void createPossibleMoves()const;
int getMerkmal()const;
};

Fehlermeldung:

1>deigene dateien\projekte\rushhour\rushhour\positionzahlen.h(99) : error C2511: 'bool PositionZahlen::isGoal(void)': Überladene Memberfunktion nicht in 'PositionZahlen' gefunden
1> deigene dateien\projekte\rushhour\rushhour\positionzahlen.h(1): Siehe Deklaration von 'PositionZahlen'

Codestelle:

bool PositionZahlen::isGoal() {
return goal;
}

Genauso ist es dann bei allen anderen Methoden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
25.12.2006, 20:54 Uhr
ao

(Operator)



C++:
bool PositionZahlen::isGoal() const  // <--- auch hier const!
{
    return goal;
}


Dieser Post wurde am 25.12.2006 um 20:55 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
27.12.2006, 20:42 Uhr
DonKnilch



Ok, danke, das hat schon mal etwas weitergeholfen. Dummer Fehler.

Jetzt habe ich allerdings noch das ursprüngliche Problem, nämlich dass er mich keine Instanzen der Unterklasse erzeugen lässt.

Beispiel:

PositionZahlen *pos1 = new PositionZahlen(zahl-7);

Fehlermeldung:

1>deigene dateien\projekte\rushhour\rushhour\positionzahlen.h(48) : error C2259: 'PositionZahlen': Instanz von abstrakter Klasse kann nicht erstellt werden
1> aufgrund folgender Member:
1> "std::string Position::moveDescription(const Position *) const": ist abstrakt
1> deigene dateien\projekte\rushhour\rushhour\start.h(17): Siehe Deklaration von 'Position::moveDescription'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
27.12.2006, 20:53 Uhr
ao

(Operator)


Du bist wirklich ein Knilch, lies doch mal, was dir bisher geschrieben wurde!

C++:
class Position{

// so sieht eine rein virtuelle Funktion aus!
virtual string moveDescription(const Position* next) const=0;

// das hier weg!
// {
//return "";
//}
};

class PositionZahlen : public Position {
// hier wird const Position *next gebraucht,
// damit die Signatur mit der in der Basisklasse übereinstimmt!
// virtual darf bzw. sollte hier stehen, der Rest muss!
virtual string moveDescription(const Position *next) const;
};



PositionZahlen::moveDescription braucht jetzt noch ne Implementierung, und dann gehts.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
27.12.2006, 22:35 Uhr
DonKnilch



Vielen Dank, das habe ich trotz etlicher Male des Durchlesens immer übersehen.

Jetzt folgendes Problem:

Wie kann ich Zeiger auf Objekte in einen Vector packen?

Bei mir kommt folgende Fehlermeldung:

1>deigene dateien\projekte\rushhour\rushhour\positionzahlen.h(53) : error C2662: 'std::vector<_Ty>::push_back': this-Zeiger kann nicht von 'const std::vector<_Ty>' in 'std::vector<_Ty> &' konvertiert werden
1> with
1> [
1> _Ty=Position *
1> ]
1> Durch die Konvertierung gehen Qualifizierer verloren

Code:

PositionZahlen *pos1 = new PositionZahlen(zahl-7);
moves.push_back(pos1);
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
27.12.2006, 22:45 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


würde tippen: dein "void createPossibleMoves()const;" sollte evtl nicht "const" sein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
27.12.2006, 23:06 Uhr
DonKnilch



Ok, hat geholfen.

Danke

Der Code ist jetzt (zumindest vom Compiler) fehlerfrei.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: