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

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

1

06.11.2009, 12:27

Kein geeigneter Standardkonstruktor

Hallo

Ich habe ein Problem bei meinem Programm. Es ist kein geeigneter Standardkonstruktor verfügbar.

Hier ist der Code:

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
// main.h

//

#ifndef MAIN_HPP
#define MAIN_HPP

#include <windows.h>
#include <Cube3DEngine.h>
#pragma comment(lib, "Cube3DEngine.lib")

#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

// Klasse erzeugen

//

class CApplication : public C3E::Cube3DEngine
{
public:

    CApplication(){}
    virtual ~CApplication(){}

};

#endif


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
29
30
31
32
33
34
// main.cpp

//

#include "main.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    MSG msg;
    HWND hwnd;
    bool bDone = false;
    C3E::SCube3DEngineProperties props;
    CApplication * pApp = new CApplication();

    pApp->SetWindowProperties(1200, 1000);
    pApp->SetWindowColor(0, 0, 255);
    hwnd = pApp->OpenWindow(hInstance);

    while(!bDone)
    {
        while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);

            if(KEY_DOWN(VK_ESCAPE))
            {
                bDone = true;
                PostMessage(hwnd, WM_CLOSE, 0, 0);
            }
        }
    }

    delete pApp;
    return 0;
}


Und hier ist die Fehlerausgabe:

C-/C++-Quelltext

1
2
3
4
5
6
7
1>------ Erstellen gestartet: Projekt: Cube3DEngineTest, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>main.cpp
1>c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3denginetest\cube3denginetest\main.h(19) : error C2512: 'C3E::Cube3DEngine': Kein geeigneter Standardkonstruktor verfügbar
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngineTest\Cube3DEngineTest\Debug\BuildLog.htm" gespeichert.
1>Cube3DEngineTest - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Kann mir jemand helfen?

Gruss Patrick

2

06.11.2009, 12:30

Re: Kein geeigneter Standardkonstruktor

Ich kenn den Aufbau der Cube Engine jetzt nicht, aber ich würde einmal sagen, dass es für C3E::Cube3DEngine einfach keinen Standardkonstruktor gibt. Das steht eigentlich eh schon in der Fehlermeldung ;)
Tutorials zu OpenGL, Ubuntu und Programmieren allgemein: www.tomprogs.at

Forum und Wiki zum Programmieren lernen: proggen.org/forum.proggen.org

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

3

06.11.2009, 14:50

Nun habe ich diesen Fehler behoben. Doch jetzt kommt ein weiterer Fehler in der Cube3DEngine. Hier ist der Code von Cube3DEngine.

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
29
30
31
32
33
34
35
36
37
38
// Cube3DEngine.h : Definiert die exportierten Funktionen für die DLL-Anwendung.

//

#include <windows.h>
#include "Structures.h"
#include "Definitions.h"

#ifndef CUBE3DENGINE_HPP
#define CUBE3DENGINE_HPP

namespace C3E
{

// Klasse erzeugen

//

class ME Cube3DEngine
{
public:

    Cube3DEngine();
    bool Initialize(C3E::SCube3DEngineProperties & props);
    void SetWindowProperties (const int WindowWidth, const int WindowHeight);
    void SetWindowColor (int R, int G, int B);
    HWND OpenWindow (HINSTANCE hInstance);
    static LRESULT WINAPI MsgProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

private:
    
    SCube3DEngineProperties & Cubeprops;
    static int m_WindowWidth;
    static int m_WindowHeight;
    static int m_R;
    static int m_G;
    static int m_B;
};

}

#endif


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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Cube3DEngine.cpp

//

#include "Cube3DEngine.h"

namespace C3E
{

int Cube3DEngine::m_WindowHeight; // = 0

int Cube3DEngine::m_WindowWidth;  // = 0

int Cube3DEngine::m_R;            // = 0

int Cube3DEngine::m_G;            // = 0

int Cube3DEngine::m_B;            // = 0


Cube3DEngine::Cube3DEngine()
{
}

bool Cube3DEngine::Initialize(C3E::SCube3DEngineProperties & props)
{
    Cubeprops = props;

    return true;
}

void Cube3DEngine::SetWindowProperties(const int WindowWidth, const int WindowHeight)
{
    Cubeprops.sWindowWidth = WindowWidth;
    Cubeprops.sWindowHeight = WindowHeight;
}

void Cube3DEngine::SetWindowColor(int R, int G, int B)
{
    Cubeprops.ColorRed = R;
    Cubeprops.ColorGreen = G;
    Cubeprops.ColorBlue = B;
}

HWND Cube3DEngine::OpenWindow(HINSTANCE hInstance)
{
    WNDCLASSEX wc;

    wc.style            = CS_HREDRAW | CS_VREDRAW;
    wc.cbSize           = sizeof (wc);
    wc.lpfnWndProc      = MsgProc;
    wc.cbClsExtra       = 0;
    wc.cbWndExtra       = 0;
    wc.hInstance        = hInstance;
    wc.hIcon            = LoadIcon (NULL, IDI_APPLICATION);
    wc.hCursor          = LoadCursor (NULL, IDC_ARROW);
    wc.hbrBackground    = (HBRUSH)CreateSolidBrush(RGB(Cubeprops.ColorRed, Cubeprops.ColorGreen, Cubeprops.ColorBlue));
    wc.lpszMenuName     = NULL;
    wc.lpszClassName    = TEXT ("Cube3DEngine");
    wc.hIconSm          = LoadIcon (NULL, IDI_APPLICATION);

    if (RegisterClassEx (&wc) == 0) return 0;

    return CreateWindowEx (NULL, TEXT("Cube3DEngine"), TEXT("Cube3DEngine"),
                           WS_OVERLAPPEDWINDOW | WS_VISIBLE,
                           GetSystemMetrics(SM_CXSCREEN)/2 - 250,
                           GetSystemMetrics(SM_CYSCREEN)/2 - 187,
                           Cubeprops.sWindowWidth, Cubeprops.sWindowHeight, NULL,
                           NULL, hInstance, NULL);
}

LRESULT WINAPI Cube3DEngine::MsgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        // key was pressed

        //

    case WM_KEYDOWN:
        {
            switch (wParam)
            {
            case VK_ESCAPE:
                {
                    PostMessage (hwnd, WM_CLOSE, 0, 0);
                    return 0;
                } break;
            default: break;
            }
        } break;
            
    case WM_DESTROY:
        {
            PostQuitMessage (0);
            return 0;
        }
    default: break;
    }

    return DefWindowProc(hwnd, msg, wParam, lParam);
}

}


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
// Structures.h

//

#ifndef STRUCTURES_HPP
#define STRUCTURES_HPP

#include "Definitions.h"

namespace C3E
{

struct ME SCube3DEngineProperties
{
    int sWindowWidth;
    int sWindowHeight;
    int ColorRed;
    int ColorGreen;
    int ColorBlue;
};

}

#endif


Nun die Fehlerausgabe:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
1>------ Erstellen gestartet: Projekt: Cube3DEngine, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Cube3DEngine.cpp
1>c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3dengine\cube3dengine\cube3dengine.cpp(15) : error C2758: 'C3E::Cube3DEngine::Cubeprops': muss in der Basisklassen/Element-Initialisierungsliste des Konstruktors initialisiert werden
1>        c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3dengine\cube3dengine\cube3dengine.h(28): Siehe Deklaration von 'C3E::Cube3DEngine::Cubeprops'
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngine\Cube3DEngine\Debug\BuildLog.htm" gespeichert.
1>Cube3DEngine - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========



Kann mir jemand helfen?

Gruss Patrick

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

06.11.2009, 14:56

C-/C++-Quelltext

1
2
3
4
5
class ME Cube3DEngine
{
public:

    Cube3DEngine(); 


Cube3DEngine hat doch nen Standardkonstruktor?!

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

5

06.11.2009, 15:05

Ja diesen Standartkonstruktor habe ich jetzt programmiert. Doch die Frage ist nun eine andere, wieso kommt dieser Fehler:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
1>------ Erstellen gestartet: Projekt: Cube3DEngine, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Cube3DEngine.cpp
1>c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3dengine\cube3dengine\cube3dengine.cpp(15) : error C2758: 'C3E::Cube3DEngine::Cubeprops': muss in der Basisklassen/Element-Initialisierungsliste des Konstruktors initialisiert werden
1>        c:\dokumente und einstellungen\patrick\eigene dateien\visual studio 2008\projects\cube3dengine\cube3dengine\cube3dengine.h(28): Siehe Deklaration von 'C3E::Cube3DEngine::Cubeprops'
1>Das Buildprotokoll wurde unter "file://c:\Dokumente und Einstellungen\Patrick\Eigene Dateien\Visual Studio 2008\Projects\Cube3DEngine\Cube3DEngine\Debug\BuildLog.htm" gespeichert.
1>Cube3DEngine - 1 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Kann mir jemand helfen?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

06.11.2009, 15:08

Zitat von »"Patrick Egli"«

Ja diesen Standartkonstruktor habe ich jetzt programmiert.


:roll: Ohje... 1000 mal schreiben: "Ich darf nicht Code fremder Bibliotheken verändern!"

Zu deinem, selbst gemachten, Problem: Die Referenz muss bei der Initialisierung initialisiert werden.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

7

06.11.2009, 15:11

Sieht eher nach seiner eigenen Engine aus....
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

06.11.2009, 15:16

Zitat von »"Nox"«

Sieht eher nach seiner eigenen Engine aus....


Gabs nicht mal ne Engine die ähnlich hieß? Naja, wie auch immer... Dann muss er die Referenz trotzdem in der Initialisierungsliste initialisieren. :)

Patrick Egli

Treue Seele

  • »Patrick Egli« ist der Autor dieses Themas

Beiträge: 161

Wohnort: Rainstrasse 38

  • Private Nachricht senden

9

06.11.2009, 15:34

Ich habe diesen Code nicht kopiert! Ich wusste gar nicht das eine Engine so heisst! Ich kann sie gerne umbenennen!

Kann mir jemand sagen was den Fehler auslöst?

10

06.11.2009, 15:40

Du musst die Referenz im Konstruktor in der Initialisierungsliste initialisieren.

Also:

C-/C++-Quelltext

1
2
3
4
Cube3DEngine::Cube3DEngine():
Cubeprops (IrgendEinWert)
{
}


Dass ist bei Referenzen muss. (glaub ich jedenfalls ;))

Wenn du das nicht so willst, sondern die Cubeprops irgendwann wenn der Benutzer Init aufruft zuweisen willst, nehm doch Zeiger.

Werbeanzeige