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

__Stdcall

Frischling

  • »__Stdcall« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler(Klasse 11)

  • Private Nachricht senden

1

04.10.2012, 21:36

Deklarations-Kompatibilitätsprobleme

Hey Leute,

bin grade an einem Adventure dran(ala Monkey Island 1-5 etc.) doch nun taucht ein komischer Fehler auf.

Folgender Aufbau:
Die Klasse CRoom(Room.h) und die Klasse CItem.
In CRoom ist ein Array von 64xCItem angelegt, welcher auch problemlos mit einer Methode füllbar ist.
Außerdem in CRoom die Methode: CItem CursorOn(tbVector2 MausPos);
Doch wenn ich die nun in Room.cpp unter CItem CRoom::CursorOn(tbVector2 MausPos) definiere (alles richtig gelinkt) bekomme ich folgenden Error: "Die Deklaration ist nicht mit ""<error-type> CRoom::CursorOn(tbVectpr2 MausPos)" (deklariert in Zeile 50 von "...\Room.h")" kompatibel."

Was kann das sein, stehe ich einfach nur auf dem Schlauch?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

04.10.2012, 22:27

Fehler durch Mehrfachdeklaration.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

__Stdcall

Frischling

  • »__Stdcall« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler(Klasse 11)

  • Private Nachricht senden

3

04.10.2012, 22:32

Kann net sein habe die ganze Klasse (bis jetz eh nur 50 Zeilen) durchsucht, nur 1 Deklaration von CursorOn... (Kann auch den Funktionsnamen ändern ändert nichts...)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

04.10.2012, 23:11

Mehrfach-Includes oder falsche Includes enden ebenfalls in Mehrfachdeklaration oder Mehrfachdefinition.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

5

05.10.2012, 07:38

Ansonsten wäre mehr Quellcode (also hier geposteter) sicherlich nützlich.
Lieber dumm fragen, als dumm bleiben!

__Stdcall

Frischling

  • »__Stdcall« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler(Klasse 11)

  • Private Nachricht senden

6

05.10.2012, 14:49

Hm mehrfach Includes finde ich auch nicht, hier mal der Quellcode:

Room.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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class CRoom
{
public:
    // Variablen
    tbVector2       m_vPos1a;           // Punkt begebar
    tbVector2       m_vPos1b;           // Punkt begebar
    tbVector2       m_vPos2a;           // Punkt begebar
    tbVector2       m_vPos2b;           // Punkt begebar
    tbVector2       m_vPos3a;           // Punkt begebar
    tbVector2       m_vPos3b;           // Punkt begebar
    tbVector2       m_vPos4a;           // Punkt begebar
    tbVector2       m_vPos4b;           // Punkt begebar
    tbVector2       m_vPos5a;           // Punkt begebar
    tbVector2       m_vPos5b;           // Punkt begebar
        
    short           m_sZonen;           // Zahl der Zonen

    CItem       m_Items[64];                    // Gegenstände

    // Konstruktor
    inline CRaum()
        : m_sZonen(0)
    {
        m_vPos1a = tbVector2(0.0f, 0.0f);
        m_vPos1b = tbVector2(0.0f, 0.0f);
        m_vPos2a = tbVector2(0.0f, 0.0f);
        m_vPos2b = tbVector2(0.0f, 0.0f);
        m_vPos3a = tbVector2(0.0f, 0.0f);
        m_vPos3b = tbVector2(0.0f, 0.0f);
        m_vPos4a = tbVector2(0.0f, 0.0f);
        m_vPos4b = tbVector2(0.0f, 0.0f);
        m_vPos5a = tbVector2(0.0f, 0.0f);
        m_vPos5b = tbVector2(0.0f, 0.0f);
    }

    // Methoden
    inline CItem AddItem(char* Name, tbVector2 vPosa, tbVector2 vPosb){return CGegenstand(Name, vPosa, vPosb);} // Item hinzufügen, wird warsch abgelöst
    tbResult NewItem(char* Name, tbVector2 vPosa, tbVector2 vPosb, short Pos); // Neues Item, löst AddItem warsch ab
    BOOL MoveZone(tbVector2 MausPos);               // Kann man dahin laufen?
    CItem CursorOn(tbVector2 MausPos);  // Maus auf welchem Gegenstand?

};


Adv.h, der Includes-Teil:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
#include <TriBase.h>
#include "Intro.h"
#include "MainMenu.h"
#include "Game.h"
#include "Room.h"
#include "Item.h"
#include "Resource.h"

#pragma warning(disable:4244)


Room.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
#include "Adv.h"

// __________________________________________________________________
// Neues Item
tbResult CRoom::NewItem(char* Name, tbVector2 vPosa, tbVector2 vPosb, short Pos)
{
// Ausgeschnitten da unwichtig
}

// __________________________________________________________________
// Kann man dahin laufen?
BOOL CRoom::MoveZone(tbVector2 MausPos)
{
// Ausgeschnitten da unwichtig
}

// __________________________________________________________________
// Maus auf welchem Gegenstand?
CItem CRoom::CursorOn(tbVector2 MausPos)
{
    for(int i = 0; i <= 63; i++)
    {
        if(m_Items[i].m_bExists && (MausPos.x < m_Items[i].m_Posa.x && MausPos.y < m_Items[i].m_Posa.y) 
                                       && (MausPos.x > m_Items[i].m_Posb.x && MausPos.y > m_Items[i].m_Posb.y)) 
                                       return m_Items[i];
    }
}

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

05.10.2012, 15:58

Du musst CItem im Header von CRoom ebenfalls bekannt machen (d.h. Inkludieren).
@D13_Dreinig

__Stdcall

Frischling

  • »__Stdcall« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler(Klasse 11)

  • Private Nachricht senden

8

05.10.2012, 16:04

Du meinst also #include? Oder meinst du das CRoom von CItem erben soll?
Meinst du ersteres in Room.cpp? Weil dies müsste doch über Adv.h gelinkt sein...

9

05.10.2012, 16:40

Ja, aber du inkludierst erst die Room.h da wird CItem schon benutzt und ist noch gar nicht bekannt, weil Item.h erst danach inkludiert wird.
Das mit dem Adv.h Header ist übrigens ziemlich hässlich. Normalerweise würdest du in der Room.cpp auch die Room.h inkludieren und dich nicht darauf verlassen, dass das über eine dritte Datei geschieht. Damit CItem.h überall bekannt ist, woe Room.h benutzt wird, sollte Room.h die CItem.h einbinden.
Lieber dumm fragen, als dumm bleiben!

__Stdcall

Frischling

  • »__Stdcall« ist der Autor dieses Themas

Beiträge: 18

Beruf: Schüler(Klasse 11)

  • Private Nachricht senden

10

05.10.2012, 16:50

Wie jetzt?
Habe ich dich richtig verstanden?
Habe jetzt Item.h in Room.cpp einzeln includiert. Bringt aber nichts.
Oder soll ich in Room.h Item.h einbinden? Seit wann includiert man was in Header Dateien :?:
Oder bin ich wieder zu dumm? :dash:

Werbeanzeige