gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 13:04:03 24 4
gpt4 key购买 nike

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

我有一个标题 foo.h

// foo.h

#ifndef FOO_H
#define FOO_H

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

#endif

和主文件... 主.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() 函数的原型(prototype)放在头文件中,并将实现一次放在 .cpp 中。

因此, foo.h 必须包含:

#pragma once
void foo();

和 foo.cpp:
#include "foo.h"

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

关于multithreading - .obj 中已定义的多线程函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36980862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com