.obj 中已定义的多线程函数

Multi threaded function already defined in .obj

我搜索了错误 LNK2005 "already defined in .obj",但找不到与我遇到的具体问题相关的内容。希望有人能帮我解决这个问题...

我有一个headerfoo.h

// foo.h

#ifndef FOO_H
#define FOO_H

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

#endif

和主文件...main.cpp

// main.cpp

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

int main() {

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

    return 0;
}

现在,它编译 没有 任何 错误 并向控制台提供 输出 ...

foo

但是如果我创建另一个文件 foo.cpp 并且只包含 header foo.h什么都不做...

// foo.cpp

#include "foo.h"

...我收到链接器错误 LNK2005 "void __cdecl foo(void)" (?foo@@YAXXZ) 已在 main.obj

中定义

不知道这里出了什么问题?!!

您必须只将 foo() 函数的原型放在头文件中,并将实现一次放在 .cpp 中。

因此,foo.h 必须包含:

#pragma once
void foo();

和foo.cpp:

#include "foo.h"

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