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

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

1

07.12.2006, 16:22

Fehler beim schreiben einer klasse

Hey. Wollte mir ne kleine log Funktion schreiben. Die soll halt nur eine Datei öffnen und dort Tet reinschreiben der vorher der Funktion übergeben werden soll. Wenn ich die Funktion direkt als Funktion in main schreibe ist das kein Problem. Aber sobald ich die Funktion auslager gibt er mir nen Fehler aus.
Habe nun mal die Funktion in eine Klasse gesteckt. Und schon wieder fast der gleiche Fehler. Von der Formulierung halt nur darauf bezogen das es diesmal eine Klasse ist.
Der Fehler:

Quellcode

1
2
main.obj : error LNK2005: "public: int __thiscall cLog::log(char * const)" (?log@cLog@@QAEHQAD@Z) ist bereits in class.obj definiert.
MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".


Der Code ist:
class.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 <iostream>
#include <windows.h>

//log


class cLog
{
public:
    int log(char cString[255]);
};

int cLog::log(char cString[255])
{
    FILE* pfLog;
    fopen_s(&pfLog,"log.txt","a");
    if(cString == "")
    {
        fputs("!\nEs wurde kein Wert übergeben!\n",pfLog);
        fclose(pfLog);
        return 1;
    }else{
        fputs(cString,pfLog);
    }

    fclose(pfLog);
    return 0;
}


und main.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
29
30
#include <iostream>
#include <windows.h>
#include "class.cpp"
//using namespace std;


/*
int log(char cString[100])
{
    FILE* pfLog;
    fopen_s(&pfLog,"log.txt","a");
    if(cString == "")
    {
        fputs("!\nEs wurde kein Wert übergeben!\n",pfLog);
        fclose(pfLog);
        return 1;
    }else{
        fputs(cString,pfLog);
    }

    fclose(pfLog);
    return 0;
}
*/


void main()
{
    cLog logfunc;
    logfunc.log("test");
}


mfg Schorsch
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sheddex

unregistriert

2

07.12.2006, 16:32

Ich würde dir empfehlen die Klassendeklaration in eine .h zu packen und auch nur dort windows.h und iostream zu inkludieren.

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

3

07.12.2006, 16:38

Ah dankeschön.
Aber der Fehler:

Quellcode

1
MSVCRTD.lib(crtexew.obj) : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "_WinMain@16" in Funktion "___tmainCRTStartup".

bleibt.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

4

07.12.2006, 16:42

Du hast ja auch angegeben eine WinAPP erstellen zu wollen, hast aber die main wie bei einer Konsolen Anwendung definiert. Entweder du stellst das Projekt auf Konsole um(Projekt->Eigenschaften und da ein bisschen suchen, bin mir atm nicht ganz sicher wo das da ist) oder du sagst halt statt main

C-/C++-Quelltext

1
2
3
4
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
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.

Sheddex

unregistriert

5

07.12.2006, 17:04

APIENTRY kann auch WINMAIN oder ka was alles heißen, alles typedefs für __stdcall, ist aber ja eigentlich egal was man nimmt.

Allerdings sollte void main zu int main werden.

Schorsch

Supermoderator

  • »Schorsch« ist der Autor dieses Themas

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

6

07.12.2006, 19:21

ach klar. hab nich dran gedacht das ich ja ne winapp gemacht hab. danke:)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige