Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

10.10.2014, 16:58

"no matching function to call IScene::IScene()"?

Hallo,
ich habe ein Problem, und zwar das mich Eclipse mit

Quellcode

1
no matching function to call IScene::IScene()
bewirft..

Ich hoffe ihr könnt mir helfen:

ILevel.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/*
 * ILevel.h
 *
 *  Created on: 10.10.2014
 *      Author: felipe
 */

#ifndef ILEVEL_H_
#define ILEVEL_H_

#include "Player.h"
#include "IScene.h"

class ILevel : public IScene {
public:
    ILevel();
    virtual ~ILevel();

};



#endif /* ILEVEL_H_ */


ILevel.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/*
 * ILevel.cpp
 *
 *  Created on: 10.10.2014
 *      Author: felipe
 */
#include "ILevel.h"
//#include "Player.h"

ILevel::ILevel() {  //die gesamte Zeile(auch der Comment) ist als Error markiert

}

ILevel::~ILevel() {

}


IScene.h:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/*
 * IScene.h
 *
 *  Created on: 10.10.2014
 *      Author: felipe
 */

#ifndef ISCENE_H_
#define ISCENE_H_

class IScene {
public:
    IScene(bool isMenu);
    virtual ~IScene();
    bool menu;
    virtual void update();

};



#endif /* ISCENE_H_ */


und schließlich IScene.cpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 * IScene.cpp
 *
 *  Created on: 10.10.2014
 *      Author: felipe
 */
#include "IScene.h"


IScene::IScene(bool isMenu) {
    menu = isMenu;


}

IScene::~IScene() {


}

bool IScene::isMenu() {
    return menu;
}

void IScene::update(float delta)
{

}


Wo liegt hier der Fehler :dash:?

Ich hoffe ihr könnt mir helfen..

LG & danke im Voraus

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

10.10.2014, 17:08

Der Compiler sucht einen Standardkonstruktor für IScene, findet aber nur einen mit einem bool-Parameter. Den rufst du aber nicht auf. Daher meckert er.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

birdfreeyahoo

Alter Hase

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

3

10.10.2014, 17:55

BTW Sollten Interfaces nicht irgendwie abstrakt sein?

4

10.10.2014, 18:09

Es gibt eine sogenannte Initialisierungsliste, in der man die Membervariablen iniitialisieren und ggf. geerbte Konstruktoren aufrufen kann und sollte.
Hierbei auch auf die Reihenfolge achten, struct foo{foo() : b(1), a(0) {} int a; int b;}; ist ineffizienter als struct foo{foo() : a(0),b(1) {} int a; int b;};!

C-/C++-Quelltext

1
2
3
ILevel::ILevel() : IScene(false)
{
}

Analog dazu:

C-/C++-Quelltext

1
2
3
IScene::IScene(bool isMenu) : menu(isMenu)
{
}

Im übrigen geht auch so etwas hier:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class A
{
public:
    A() = default;

private:
    int a {0};
    int b {1};
};

Das ist fast das gleiche wie:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class A
public:
    A() : a(0), b(1) {}

private:
    int a;
    int b;
}

Der einzige Unterschied ist, dass sich letzteres ggf. nicht ganz so gut vom Compiler optimieren lässt.

MfG
Check

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »Checkmateing« (10.10.2014, 18:16)


5

10.10.2014, 20:05

Hierbei auch auf die Reihenfolge achten, struct foo{foo() : b(1), a(0) {} int a; int b;}; ist ineffizienter als struct foo{foo() : a(0),b(1) {} int a; int b;};!

Die Reihenfolge ist wichtig, ja, aber nicht wegen der Effizienz. Egal ob und in welcher Reihenfolge die Elemente in der Initialisierungsliste angegeben werden: Membervariablen werden immer in der Reihenfolge initialisiert, in der sie im Header auftauchen!

Beispiel:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct A
{
    int a;
};

struct B
{
    B()
        : ptr(new A{42})
        , ref(*ptr)     // Hier wird auf einen nicht initialiserten Pointer zugegriffen
    {};
    ~B() { delete ptr; };
    
    A& ref;
    A* ptr;
};

int main()
{
    B b;
}
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

Werbeanzeige