我搜索了“已经在.obj中定义的错误LNK2005”但找不到与我面临的具体问题相关的内容。希望有人能帮助我...
我有一个标题 foo.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 并且只包含标题 foo.h 而不做其他任何事情......
// foo.cpp
#include "foo.h"
...我收到链接器错误LNK2005“void __cdecl foo(void)”(?foo @@ YAXXZ)已在main.obj中定义
不知道这里出了什么问题。?!!
答案 0 :(得分:1)
您必须只在头文件中放置foo()函数的原型,并在.cpp中放置一次。
因此,foo.h必须包含:
#pragma once
void foo();
和foo.cpp:
#include "foo.h"
void foo() {
printf("Whatever");
}