Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
12.01.2002, 17:15
thinktank



Ich hab einen neuen Button gemacht, dessen Basisklasse CommandButton ist
( Der einzige Unterschied liegt darin, dass es rot glühen soll, wenn eine Variable false ist). Jetzt musste ich natürlich auch Konstruktoren machen, die hab ich einfach von CommandButton kopiert und sie natürlich auch zur der Klasse passend bearbeitet. Die Konstruktoren sehen so aus :

CSpawnButton::CSpawnButton( const char* text,int x,int y,int wide,int tall, bool bNoHighlight)
{
CommandButton("",x,y,wide,tall);
}

CSpawnButton::CSpawnButton( int iPlayerClass, const char* text,int x,int y,int wide,int tall)
{
CommandButton("",x,y,wide,tall);
}

Jetzt kommen folgende Errors :
C:\Sierra\Half-Life\Sw\Source Code\cl_dll\vgui_CustomObjects.cpp(540) :
error C2512: 'CommandButton' : Kein geeigneter Standardkonstruktor
verfuegbar
C:\Sierra\Half-Life\Sw\Source Code\cl_dll\vgui_CustomObjects.cpp(545) :
error C2512: 'CommandButton' : Kein geeigneter Standardkonstruktor
verfuegbar

Dann schau ich in der MSDN nach C2512. Folgende Beschreibung wird angezeigt :

Compiler-Fehler C2512
'Bezeichner' : Kein geeigneter Standardkonstruktor verfügbar

Für die angegebene Klasse, Struktur oder Union steht kein Standardkonstruktor zur Verfügung.

Der Compiler generiert nur dann einen Standardkonstruktor, wenn keine anderen Konstruktoren vom Programmierer definiert werden. Sie müssen also einen Standardkonstruktor selbst definieren, wenn Sie auch andere Konstruktoren (mit Parametern) benötigen. Ersatzweise kann auch ein anderer Konstruktor als Standardkonstruktor dienen, wenn alle seine Parameter Standardwerte besitzen und er sich damit ohne eine explizite Übergabe von Parametern aufrufen läßt.

Jetzt kommt meine Frage :
CommandButton hatte vorher doch auch keinen Standardkonstruktor, wie kann das denn sein o_O ? ( Diese haben keine default-Parameter (ausser bNoHighlight)

Und :
Wie kriege ich das jetzt hin ?

--

zum Seitenanfang zum Seitenende Profil || Suche
001
12.01.2002, 17:27
Mazze



Einfach einen geeigneten Standartkonstruktor programmieren.. =)

Wieso will er denn einen Standartkonstruktor?
Wird mal ein SpawnButton ohne Argumente, also so CSpawnButton button erstellt?

--

BattleTech-MOD:
http://bthl.unitedgaming.net/

zum Seitenanfang zum Seitenende Profil || Suche
002
12.01.2002, 17:29
Kriz



a) Falsches Forum -> Halflife-Coding
b) Kann es sein, daß die Instanzierung des Objekts keine passenden Parameter an den Konstruktor übergibt? Prüfe mal die Instanzierungen...

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
003
12.01.2002, 19:46
thinktank



Hier, das wirst du wohl meinen :

m_pButtons[i] = new CSpawnButton("",XRES(5),(YRES(24)+(YRES(30)*i)),XRES(124),YRES(18),false);

m_pButtons[i] = new CSpawnButton("",XRES(300),(YRES(24)+(YRES(30)*(i-16))),XRES(124),YRES(18),false);

Die Parameter sind 100% richtig, da ich vorher statt CSpawnButton CommandButton verwendet hab. Und da die Konstruktoren 1:1 übernommen wurden, müssen sie eigentlich richtig sein.

Instanzierung des Objekts ? Ich dachte ein Objekt sei eine Instanz.

Hier nochmal die Deklaration von CSpawnButton :

class CSpawnButton : public CommandButton
{
public:

CSpawnButton(const char* text,int x,int y,int wide,int tall, bool bNoHighlight = false);
CSpawnButton( int iPlayerClass, const char* text,int x,int y,int wide,int tall);

virtual void paint();
virtual void paintBackground();
virtual int IsNotValid();

bool IsValid;
};

--


Dieser Beitrag wurde am 12.01.2002 um 19:56 von thinktank bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
004
13.01.2002, 12:30
Prefect



Ahem.. müßte das nicht so aussehen:

CSpawnButton::CSpawnButton( const char* text,int x,int y,int wide,int tall, bool bNoHighlight)
: CommandButton("",x,y,wide,tall)
{
}

cu,
Prefect

--

Widelands - Gemütliche Aufbaustrategie, Free Software
Noch ein Blog - Lerne, wie die Welt wirklich ist, aber vergiss niemals, wie sie sein sollte.

zum Seitenanfang zum Seitenende Profil || Suche
005
13.01.2002, 21:38
Kriz



*Back at home*

Jo, die Initialisierungsliste muß Vaterkonstruktoren initialisieren, falls dessen Konstruktor keine indirekte Initialisierung unterstützt.
Quellcode:class A
{
....int m_i;
public:
....A(int i) : m_i(i) {}
....inline int Get(void) const { return m_i; }
};

class B : public A
{
public:
....B(int i) : A(i) {}
};

#include <iostream.h>

void main()
{
....B obj(5);
....cout << "m_i = " << B.Get() << endl;

Ausgabe:

m_i = 5

Cu

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
006
14.01.2002, 07:37
Kriz



ARGHHHHHHHH, so isses richtig:

Quellcode:class A
{
....int m_i;
public:
....A(int i) : m_i(i) {}
....inline int Get(void) const { return m_i; }
};

class B : public A
{
public:
....B(int i) : A(i) {}
};

#include <iostream.h>

void main()
{
....B obj(5);
....cout << "m_i = " << obj.Get() << endl;

--

K:R-I)Z++
"CSS ist cascading style sheets. Und nicht so'n Ranzspiel." - dp
In memory of Voice († 2005/03/30)

zum Seitenanfang zum Seitenende Profil || Suche
007
14.01.2002, 17:36
thinktank



Aha , wieder was gelernt, Danke !
Bisher dachte, dass die Initialisierungsliste auch im Rumpf stehen könnte
( was meistens auch stimmt ).

--

zum Seitenanfang zum Seitenende Profil || Suche