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