2016-05-02 3 views
2

Ich habe nach dem Fehler LNK2005 "bereits in .obj definiert" gesucht, kann aber keinen Inhalt finden, der sich auf das spezifische Problem bezieht, dem ich gegenüberstehe. Hoffe jemand mir auf diesem helfen kann ...Multithreading-Funktion bereits in .obj definiert

habe ich ein Header foo.h

// foo.h 

#ifndef FOO_H 
#define FOO_H 

void foo() { 
    print("foo\n"); 
} 

#endif 

und Hauptdatei ... main.cpp

// main.cpp 

#include <thread> 
#include "foo.h" 

int main() { 

    std::thread t(foo); 
    t.join(); 

    return 0; 
} 

Jetzt , kompiliert es ohne irgendein Fehler und gibt das gibt Ausgang zum cons ole ...

foo 

Aber wenn ich eine andere Datei foo.cpp erstellen und umfassen nur den Header foo.h und nichts anderes tun ...

// foo.cpp 

#include "foo.h" 

... I Linker Fehler LNK2005 "void __cdecl foo (void)" (? foo @@ YAXXZ) schon in main.obj

Ich weiß nicht, was hier schief läuft.? !!

Antwort

1

Sie müssen nur den Prototyp der foo() - Funktion in der Headerdatei und die Implementierung einmal in der .cpp platzieren.

So foo.h muss enthalten:

#pragma once 
void foo(); 

Und foo.cpp:

#include "foo.h" 

void foo() { 
    printf("Whatever"); 
} 
+1

Verstanden! Vielen Dank. – chandr3sh

Verwandte Themen