.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");
}
我搜索了错误 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");
}