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 ]
000
13.12.2006, 16:17 Uhr
DonKnilch



Hi,

Ich habe folgendes Problem:

Ich habe eine abstrakte Oberklasse mit Methoden, die als const = 0 deklariert wurden. Diese werden an eine (eigentlich nicht abstrakte) Unterklasse vererbt und dort implementiert. Wenn ich jetzt versuche, eine Instanz der Unterklasse zu erzeugen, erscheint jedoch die Fehlermeldung vom Compiler (error C2259), dass dies nicht möglich sei, da die Klasse abstrakt ist. Dabei verweist der Compiler immer auf Methoden der Oberklasse.

Ich komme dort einfach nicht weiter. Kennt jemand die Lösung bzw. die Quelle des Problems?

Vielen Dank

MfG
DonKnilch
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.12.2006, 16:40 Uhr
BoBtheREapER
kein job für nen BoB


1. wäre es nett wenn du die den text den es zum compiler error gibt mit kopierst denn nur mit der nummer können wir wenig anfangen weil das auch von compiler zu compiler varieren kann.
2. wäre estwas code auch ganz hiflreich
--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
13.12.2006, 16:50 Uhr
DonKnilch



1>deigene dateien\projekte\rushhour\rushhour\start.cpp(15) : error C2259: 'PositionZahlen': Instanz von abstrakter Klasse kann nicht erstellt werden
1> aufgrund folgender Member:
1> "std::vector<_Ty> Position::possibleMoves(void) const": ist abstrakt
1> with
1> [
1> _Ty=Position *
1> ]

Das ist die Compilermeldung (eine der Meldungen, insgesamt sind es 7 dieser Art (= 7 Instanzen).

Das ist die Oberklasse:

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;

};

Und die Unterklasse (Rumpf):

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();
bool isGoal();
void setGoal(bool wert);
int getZahl();
int getZiel();
void setZiel(int zahl);
string moveDescription(Position *next);
bool equals(Position *other);
string toString();
void createPossibleMoves();
int getMerkmal();
};
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
13.12.2006, 18:05 Uhr
ao

(Operator)


const fehlt. Die Methodensignaturen in der Basisklasse und der abgeleiteten Klasse müssen genau übereinstimmen. Bei moveDescription und equals müssen auch die formalen Parameter gleich sein; auch hier fehlt const.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
13.12.2006, 18:11 Uhr
DonKnilch



Danke, das dachte ich mir auch schon und hatte es auch mal probiert. Dann allerdings kommt diese Meldung:

1>deigene dateien\projekte\rushhour\rushhour\positionzahlen.h(47) : error C2511: 'void PositionZahlen::createPossibleMoves(void)': Überladene Memberfunktion nicht in 'PositionZahlen' gefunden
1> deigene dateien\projekte\rushhour\rushhour\positionzahlen.h(1): Siehe Deklaration von 'PositionZahlen'
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
13.12.2006, 20:46 Uhr
xXx
Devil


das selbe ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.12.2006, 20:31 Uhr
DonKnilch



Also das stimmt jetzt aber überein und ich bekomme den Fehler trotzdem noch.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
15.12.2006, 10:20 Uhr
ao

(Operator)


Bitte aktuellen Code zeigen, Fehlermeldung wörtlich zitieren und die Codestelle markieren, auf die sich der Fehler bezieht. Sonst stochern wir im Nebel.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
15.12.2006, 19:18 Uhr
~testuser
Gast


Hi,
hab das mal geändert, so dass es kompiliert.
Schau es dir einfach mal an. Die anderen Funktionen,
die noch auskommentiert sind genau so wie die bereits
geänderten ändern.

Viel Spaß noch

#include <vector>
#include <string>
#include <iostream>

using namespace std;

class Position
{
public:
Position(){}
virtual ~Position() {}

virtual vector<Position*> possibleMoves() const=0;
virtual bool isGoal() const=0;


virtual string moveDescription(const Position* next) const;
virtual bool equals(const Position* other) const=0;
virtual string toString() const=0;
virtual int getMerkmal() const=0;

/*
virtual void createPossibleMoves() const=0;

*/
};

//Und die Unterklasse (Rumpf):

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

public:
PositionZahlen(){};
virtual ~PositionZahlen(){}

PositionZahlen(int startzahl) : zahl( startzahl )
{
}

virtual vector<Position*> possibleMoves() const
{
std::vector< Position* > myvec;
return myvec;
}
virtual bool isGoal() const {return true;}

virtual string moveDescription(const Position* next) const
{
std::string sText = "mist";
return sText;
}

virtual bool equals(const Position* other) const
{
if ( this != other )
return true;
}

virtual string toString() const
{
char buffer[256];
sprintf( buffer, "%d", zahl );
std::string sZahl = buffer;
return sZahl;
}

virtual int getMerkmal() const
{
return 1;
}


/*
void setGoal(bool wert);
int getZahl();
int getZiel();
void setZiel(int zahl);
void createPossibleMoves();
*/
};

int main()
{

int zahl = 2;
PositionZahlen num( zahl );

/*
std::string sZahl = num.toString();

std::cout << sZahl << std::endl;
*/
return 1;
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
16.12.2006, 10:12 Uhr
BoBtheREapER
kein job für nen BoB



Zitat von ao:
Fehlermeldung wörtlich zitieren.

--
"Zwei Dinge sind unendlich: Das Universum und die menschliche Dummheit. Aber beim Universum bin ich mir nicht ganz sicher." - Albert Einstein
www.blue-xenon.de.vu
 
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: