Funktion nur in Headerdatei
-
Hallo! Ich möchte eine globale Funktion haben, die mir auf die Debugausgabe schreibt. Dazu habe ich den unten stehenden Code in einer Headerdatei erstellt und binde den Header in die Klassen ein, wo ich die Funktion aufrufen möchte. Leider bekomme ich dauernd Linkerfehler, und weiss ehrlich gesagt gar nicht warum...
1>Object1.obj : error LNK2005: "void __cdecl MyNamespace::PrintDebugOutput(char const *,...)" (?PrintDebugOutput@mynamespace@@YAXPBDZZ) ist bereits in MyObject.obj definiert.
1>Object2.obj : error LNK2005: "void __cdecl MyNamespace::PrintDebugOutput(char const *,...)" (?PrintDebugOutput@mynamespace@@YAXPBDZZ) ist bereits in MyObject.obj definiert.Header.h
#ifndef HEADER_H #define HEADER_H #include <cstdarg> #include <cstdio> #include <Windows.h> namespace MyNamespace { void PrintDebugOutput(const char* message, ...) { char buffer[512]; va_list args; va_start(args, message); vsprintf_s(buffer, sizeof(buffer), message, args); va_end(args); OutputDebugString(buffer); } } #endifVielen Dank schonmal im voraus
-
Funktionen solltest du nicht in Headerdateien definieren, sondern nur deklarieren (es sei denn, sie sind
inline). Die Definition sollte in der CPP-Datei stehen.Abgesehen davon sind variable Funktionsparameter böse, weil nicht typsicher und gefährlich mit Objekten. In C++ verwendet man die eigentlich nie.
-
Danke, inline war das Stichwort

Hmm ja, es sollte eine reine Debugausgabe werden. Daher wollte ich jetzt nicht extra eine cpp-Datei anlegen, sind schon soviele Dateien in dem Projekt.
Merci