.obj中已定义多线程函数



我已经搜索了错误LNK2005"已在.obj中定义",但找不到与我面临的特定问题相关的内容。希望有人能帮我。。。

我有一个标题foo.h

// foo.h
#ifndef FOO_H
#define FOO_H
void foo() {
    print("foon");
}
#endif

和主文件main.cpp

// main.cpp
#include <thread>
#include "foo.h"
int main() {
    std::thread t(foo);
    t.join();
    return 0;
}

现在,它编译时没有任何错误,并将输出提供给控制台。。。

foo

但是,如果我创建另一个文件foo.cpp,并且只包含头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");
}

相关内容

  • 没有找到相关文章

最新更新