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

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

1

17.06.2006, 21:27

Fehler: struct bereits definiert

Hi,

ich bekomme andauernd folgenden Fehler: [list]KeyboarDancer error LNK2005: "struct _uhr Uhr" (?Uhr@@3U_uhr@@A) bereits in keyboardancer.obj definiert
KeyboarDancer fatal error LNK1169: Ein oder mehrere mehrfach definierte Symbole gefunden[/list]Ich habe den Namen der Strukltur schon mehrfach geändert, ohne Erfolg. Warum ist diese Struktur immer schon definiert? Was muss ich ändern?

mfg spacegaier

Anonymous

unregistriert

2

17.06.2006, 21:28

1. Zeig mal die Definition der Struktur
2. Prüfe Deine Includeguards
3. Lösche alle obj-Dateien der jeweiligen Erstellungsversion

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

3

17.06.2006, 21:42

Definition:

C-/C++-Quelltext

1
2
3
4
5
typedef struct _uhr
{
    int     iMin;
    int     iSec;
}UHR;


Sind Includeguards des: #ifndef DEFS_HPP #define DEFS_HPP #endif ?
Wenn ja sind sie korrekt.

Das mit dem Löschen hab ich auch schon versucht.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

17.06.2006, 22:09

Zeig mal den ganzen Code.

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

5

17.06.2006, 22:24

Nur die ganze Datei oder wirklich alles? Ich poste jetzt nur mal die Abschnitte, in denen die Variabeln der Struktur vorkommen.

Die Datei "defs.hpp"

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
#ifndef DEFS_HPP
#define DEFS_HPP

//##############################################################


#include <windows.h>

//##############################################################


typedef struct _keyd
{
    HWND    hWnd;
}KEYD;

//##############################################################


typedef struct _arrow
{
    int     iZufall;
    BOOL    bArrow;
}ARROW;

//##############################################################


typedef struct _uhr
{
    int     iMin;
    int     iSec;
}UHR;

//##############################################################


#define OK                                          0;
#define UNABLE_TO_BLIT_ARROW                        1;
#define UNABLE_TO_RANDOMIZE_ARROW                   2;
#define ERROR_UNABLE_TO_RETRIEVE_DC                 3;
#define ERROR_UNABLE_TO_CREATE_COMPATIBLE_DC        4;
#define ERROR_UNABLE_TO_CREATE_COMPATIBLE_BITMAP    5;
#define ERROR_UNABLE_TO_SELECT_BACKBUFFER_BITMAP    6;

//##############################################################


#endif


weitere Abschnitte:

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
int UpdateTimer()
{
    if (Uhr.iSec < 59)
        --Uhr.iSec;
    else
    {
        Uhr.iSec = 0;
        --Uhr.iMin;
    }
    InvalidateRect(KeyD.hWnd, NULL, FALSE);

    return OK;
}

//########################################################################


int DrawTimer()
{
    PAINTSTRUCT   ps;   
    HDC hDC = GetDC(KeyD.hWnd);
    char sTime[6];

    int iLength = wsprintf(sTime, "%i:%02i", Uhr.iMin, Uhr.iSec);

    hDC = BeginPaint(KeyD.hWnd, &ps);
    {
    SetBkMode(hDC,TRANSPARENT);
    TextOut(hDC,10,440,sTime,iLength);
    }
    EndPaint(KeyD.hWnd, &ps); 
     
    return OK;

}

//########################################################################


int StartTimer()
{          
    SetTimer(KeyD.hWnd, TimerID, 1000, NULL);

    Uhr.iMin = 1;
    Uhr.iSec = 30; 
    InvalidateRect(KeyD.hWnd, NULL, FALSE);
    return OK;
}


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while(Uhr.iMin > 0 || Uhr.iSec > 0)
    {
        ProcessFrame();

        if(PeekMessage(&msg,NULL,0,0,PM_REMOVE) == TRUE)
        {
            if(msg.message == WM_QUIT)
                break;

            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    
    return msg.wParam;

6

18.06.2006, 07:40

Wieviele *.cpp Dateien hast du in deinem Projekt und in welcher instanzierst du das Objekt "Uhr"? :idea:
Always remember to keep yourself alive

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

7

18.06.2006, 11:29

Ich habe drei .cpp-Dateien. Würde die Struktur gerne in zwei von denen instanzieren. Oder sollte ich sie nur einmal instanzieren und dann an die anderen per extern weitergeben? (Aber bei den anderen Strukturen habe ich auch mehrere Instanzen).

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

8

18.06.2006, 15:41

Zitat

Würde die Struktur gerne in zwei von denen instanzieren. Oder sollte ich sie nur einmal instanzieren und dann an die anderen per extern weitergeben?

Soll es sich um mehrere parallel laufende Uhren handeln, oder um eine einzige Uhr? Eine einzige Uhr muss zwangsweise per extern den anderen Modulen bekannt gemacht werden. Soll es sich um zwei Uhren handeln, dann müssen diese verschiedene Namen tragen (oder du musst ein wenig mit static rumpfuschen).
Why is 6 afraid of 7?
Because 7 8 9

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

18.06.2006, 16:34

Ich wollte noch kurz anmerken, dass die Semikola hinter #define-Anweisungen nur dann korrekt sind, wenn sie vom Preprozessor auch wirklich in den Code eingefügt werden sollen. Ich denke, in Deinem Fall sind sie dann fehl am Platz.

spacegaier

Alter Hase

  • »spacegaier« ist der Autor dieses Themas

Beiträge: 572

Beruf: Student

  • Private Nachricht senden

10

18.06.2006, 18:43

Autsch hätt ich auch selber merken können. Bei den anderen Strutkuren habe ich auch mit extern gearbeitet, deshalb lief's ja mit denen. Nun mach ich's mit der dritten auch so und siehe da: es läuft.

Danke für die Hinweise.

@Steven77: welche Semikola?

Werbeanzeige