2016-05-02 18 views
2

LNK2005 "already defined in .obj"を検索しましたが、私が直面している特定の問題に関連するコンテンツが見つかりませんでした。今main.cppに複数スレッド関数が既に.objで定義されています

// main.cpp 

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

int main() { 

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

    return 0; 
} 

...私は、ヘッダーがfoo.h

// foo.h 

#ifndef FOO_H 
#define FOO_H 

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

#endif 

とメインファイルをしました

...誰かがこの上で私を助けることを願って、コンパイルなしエラーは、出力にを与えますOLE ...

foo 

しかし、私は別のファイルfoo.cppを作成し、ちょうどヘッダfoo.hというを含め、他に何もしない場合は...

// foo.cpp 

#include "foo.h" 

... IリンカエラーLNK2005 main.objですでに定義されている "void __cdecl foo(void)"(?foo @@ YAXXZ)

ここで何が問題なのか分かりませんか?

答えて

1

ヘッダーファイルにはfoo()関数のプロトタイプのみを、.cppには実装を1回配置する必要があります。

したがって、foo.hのは、含まれている必要があります

#pragma once 
void foo(); 

とfoo.cppを:

#include "foo.h" 

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

はそれを手に入れました!ありがとう。 – chandr3sh

関連する問題