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

04.08.2003, 10:39

Fehler: 'void *' kann nicht in 'int [1]' konvertiert werden

Edited by David Scherfgen:
Bitte aussagekräftigen Titel wählen! Der ursprüngliche Titel "C++" sagt dem Leser nicht sehr viel.


Hallo,

ich arbeite im Moment an einem dynamischen Menüsystem, auf Basis des tbGUI. Das geht so: alle Elemente sind im Array iFrameElemente[] werden von Anfang an deaktiviert, nur die IDs, die in iFrameElement[] stehen, werden aktiviert. Ich hatte das so probiert:


[edit]
Der neue Code steht unten...
[/edit]

Kann sich jemand die Fehler erklären???

Danke,

Chrissi

Patrick

Alter Hase

Beiträge: 1 264

Wohnort: Düren

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

2

04.08.2003, 10:44

wie wäre es mit casten?

3

04.08.2003, 10:45

Bin mir nicht sicher, aber deine Variable iFrameElement ist doch ein Array
müsste es in Zeile 31 dann nicht :

Quellcode

1
iFrameElement[e] = tbMemReAlloc(iFrameElement, iSize + iFrameElement[0]);

heissen, und in Zeile 40:

Quellcode

1
2
iFrameElement[f] = tbMemReAlloc(iFrameElement, iSize - iFrameElement[0]);
 
In a world without fences and walls - who needs windows and gates ?

http://www.Paid4Mailer.de/?refid=8422

4

04.08.2003, 12:35

@ David: Ja, danke. Das nächste mal wähle ich gleich solche Titel...

@TheDeath: Aber ich meine, der ganze Array sollte um ein Element vergrößert werden, und nicht, ein Element eines Arrays soll vergrößert werden... Aber da bin ich mir auch nicht sicher.

So kommt aber jetzt der Fehler:[edit]
Der neue Code steht unten...
[/edit]
PS: Ich habe ganz vergessen dass man bei dieser Funktion ja den iArray als Pointer deffinieren muss...

5

04.08.2003, 20:58

Ich habe das Problem jetzt gelöst; mit der Vector-Template.

Also,

schüssi, :huhu:

Chrissi

6

04.08.2003, 20:58

Hmm....es ist glaub ich nett so klug ein fest definiertes Array in seiner Größe zu ändern. Da hier nicht Garantiert ist, das die Speicheradress auch bleibt. Des weiteren steht für den Compiler fest, das er nur zwei Elemente freigeben brauch und nett n Elemente. Das ist das selbe als wenn ich versuchen würde

Quellcode

1
2
3
int array[100];
...
delete[] array;


Wenn sich die Arraygröße ändert empfehle ich dir den Speicher Dynamisch zu reservieren. Oder nutz gleich std::vector ;)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

7

05.08.2003, 13:39

Ja, mit std::vector habe ich das gemacht...

Aber ich habe trotzdem eine Frage. Bei einem Element funktioniert das alles wunderbar, aber bei zwei< Elementen funktioniert garnichts mehr. Ich kann auf die Buttons drücken, nichts funktioniert. Hier einmal der Quellcode:







Quellcode

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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
// Include-Datei
#include "missile.h"
#include <vector>

using namespace std;

vector<int> iFrameElement;
bool bFrameElementClicked = false;

// ...


// globale Variablen
bool g_bStartGame = FALSE; 
int iFrameElemente[] = {115};
int isizeFrameElemente = (sizeof(iFrameElemente)/sizeof(iFrameElemente[0]));
int isizeFrameElement = (sizeof(iFrameElemente)/sizeof(iFrameElement[0]));

// Neuen Eintrag...
void newNumberOfIframeEntry(int iNewNumber) {
if(iNewNumber != 0) {
    if(isizeFrameElement == iNewNumber) {}
    else if(isizeFrameElement > iNewNumber) {
        for(int a;isizeFrameElement == iNewNumber;a++) {
            iFrameElement.resize(isizeFrameElement-1);
        }
    }
    else {
        for(int b;isizeFrameElement == iNewNumber;b++) {
            iFrameElement.resize(isizeFrameElement+1);
        }
    }
}
else {
iFrameElement.resize(1);
iFrameElement[0] = 0;
}
}

// ...

// Lädt den Spielzustand
tbResult CMainMenu::Load()
{
    // aktuelle IFrame-Elemente auf NULL setzen...
    iFrameElement.resize(1);
    iFrameElement[0] = 0;

    // Die Menüeinräge aus der lang.ini laden
    GetPrivateProfileString("MainMenu","StartGameButtonText","Default",g_pMissile->m_pMainMenu->m_cStartGameButtonText,sizeof(g_pMissile->m_pMainMenu->m_cStartGameButtonText),".\\data\\lang.ini");
    GetPrivateProfileString("MainMenu","MultiplayerButtonText","Default",g_pMissile->m_pMainMenu->m_cMultiplayerButtonText,sizeof(g_pMissile->m_pMainMenu->m_cMultiplayerButtonText),".\\data\\lang.ini");
    GetPrivateProfileString("MainMenu","CampaignButtonText","Default",g_pMissile->m_pMainMenu->m_cCampaignButtonText,sizeof(g_pMissile->m_pMainMenu->m_cCampaignButtonText),".\\data\\lang.ini");
    GetPrivateProfileString("MainMenu","HelpButtonText","Default",g_pMissile->m_pMainMenu->m_cHelpButtonText,sizeof(g_pMissile->m_pMainMenu->m_cHelpButtonText),".\\data\\lang.ini");
    GetPrivateProfileString("MainMenu","OptionButtonText","Default",g_pMissile->m_pMainMenu->m_cOptionButtonText,sizeof(g_pMissile->m_pMainMenu->m_cOptionButtonText),".\\data\\lang.ini");
    GetPrivateProfileString("MainMenu","EndGameButtonText","Default",g_pMissile->m_pMainMenu->m_cEndGameButtonText,sizeof(g_pMissile->m_pMainMenu->m_cEndGameButtonText),".\\data\\lang.ini");

// ...

    float fButtonSpace = 65.0f;
    // Benutzeroberfläche erstellen
    // Erste Seite
    m_pGUI->CreateFrame(100, 0, tbVector2(10.0f, 10.0f), tbVector2(780.0f, 580.0f));
    m_pGUI->CreateButton(101, 0, tbVector2(fButtonSpace, 50.0f), tbVector2(140.0f, 50.0f), (char*)(&g_pMissile->m_pMainMenu->m_cStartGameButtonText));
    m_pGUI->CreateButton(102, 0, tbVector2(fButtonSpace-10, 120.0f), tbVector2(140.0f, 50.0f), (char*)(&g_pMissile->m_pMainMenu->m_cMultiplayerButtonText));
    m_pGUI->CreateButton(103, 0, tbVector2(fButtonSpace-25, 190.0f), tbVector2(140.0f, 50.0f), (char*)(&g_pMissile->m_pMainMenu->m_cCampaignButtonText));
    m_pGUI->CreateButton(104, 0, tbVector2(fButtonSpace-40, 260.0f), tbVector2(140.0f, 50.0f), (char*)(&g_pMissile->m_pMainMenu->m_cHelpButtonText));
    m_pGUI->CreateButton(105, 0, tbVector2(fButtonSpace-50, 330.0f), tbVector2(140.0f, 50.0f), (char*)(&g_pMissile->m_pMainMenu->m_cOptionButtonText));
    m_pGUI->CreateButton(106, 0, tbVector2(fButtonSpace, 400.0f), tbVector2(140.0f, 50.0f), (char*)(&g_pMissile->m_pMainMenu->m_cEndGameButtonText));
    m_pGUI->CreateFrame(104, 0, tbVector2(230.0f, 50.0f), tbVector2(520.0f, 510.0f));

    m_pGUI->CreateText(125, 2, tbVector2(20.0f, 20.0f), "The Creator of this Game:\n\n\nChristopher Schmidt\n\nVisit also my Hompage, http://www,chrissi-in-the-web.de");
    m_pGUI->CreateButton(121, 2, tbVector2(250.0f, 500.0f), tbVector2(80.0f, 50.0f), (char*)(&g_pMissile->m_cBackButtonText));

    // Der Hilfetext
    m_pGUI->CreateText(115, 0, tbVector2(235.0f, 55.0f), (char*)(&g_pMissile->m_cHelpText));

    // Erste Seite ist aktiv
    m_pGUI->SetCurrentPage(0);
    g_bStartGame = FALSE;

    return TB_OK;
}

// ...
// Bewegt den Spielzustand
tbResult CMainMenu::Move(float fTime)
{

    if(iFrameElement[0] != 0) {
        for(int b = 0; b<isizeFrameElemente; b++) {
                for(int c = 0; c<isizeFrameElement; c++) {
            if(iFrameElemente[b] == iFrameElement[c]) {
                m_pGUI->GetElement(iFrameElemente[b])->Show(TRUE); }
            else {
                m_pGUI->GetElement(iFrameElemente[b])->Show(FALSE); }
            }
        }
    }
    else {
        for(int c = 0; c<isizeFrameElemente; c++) {
        m_pGUI->GetElement(iFrameElemente[c])->Show(FALSE);
        }
    }

    // Benutzeroberfläche bewegen
    m_pGUI->Move(fTime, g_pbButtons, g_pfButtons);

// ...


// Nachrichtenfunktion für das Hauptmenü
tbResult MainMenuMsgProc(int iID,
                         tbGUIMessage* pMsg,
                         tbGUI* pGUI)
{
switch(pMsg->Type)
    {
    case TB_GMT_ELEMENTCLICKED:
        switch(iID)
        {
        // Spiel Beenden
        case 106: PostQuitMessage(0); break;
        // Hilfe anzeigen
        case 104: if(bFrameElementClicked != true) {bFrameElementClicked = true; newNumberOfIframeEntry(1); iFrameElement[0] = 115;} else {bFrameElementClicked = false; newNumberOfIframeEntry(0);} break;
        // Zurück-Button des Credit-Screen
        case 121: pGUI->SetCurrentPage(0); break;
        }
    }
    return TB_OK;
}

8

05.08.2003, 13:43

[edit]
steht unten...
[/edit]

Anonymous

unregistriert

9

05.08.2003, 14:15

Ich habe nochmal geguckt und debuggt. Es liegt alles deffinitiv an diesen Zeilen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// Neuen Eintrag...
void newNumberOfIframeEntry(int iNewNumber) {
if(iNewNumber != 0) {
    if(isizeFrameElement == iNewNumber) {}
    else if(isizeFrameElement > iNewNumber) {
        for(int a;isizeFrameElement == iNewNumber;a++) {
            iFrameElement.resize(isizeFrameElement-1);
        }
    }
    else {
        for(int b;isizeFrameElement == iNewNumber;b++) {
            iFrameElement.resize(isizeFrameElement+1);
        }
    }
}
else {
iFrameElement.resize(1);
iFrameElement[0] = 0;
}
}


Aber vielleicht ist auch falsch:

Quellcode

1
2
int isizeFrameElemente = (sizeof(iFrameElemente)/sizeof(iFrameElemente[0]));
int isizeFrameElement = (sizeof(iFrameElemente)/sizeof(iFrameElement[0]));

10

05.08.2003, 14:16

Oh,

ich habe wieder vergessen, mich einzuloggen

Werbeanzeige