C++ LNK2019未解析外部

C++ LNK2019未解析外部,c++,visual-c++,C++,Visual C++,我有一些测试代码: foo.h #ifndef FOO_H #define FOO_H void Foo(int iBar); #endif FOO_H foo.cpp #include "foo.h" void Foo(int iBar) { // Do nothing... } #include "foo.h" int main() { Foo(1); return 0; } main.cpp #include "foo.h" void Foo(in

我有一些测试代码:

foo.h

#ifndef FOO_H
#define FOO_H

void Foo(int iBar);

#endif FOO_H
foo.cpp

#include "foo.h"

void Foo(int iBar)
{
    // Do nothing...
}
#include "foo.h"

int main()
{
    Foo(1);

    return 0;
}
main.cpp

#include "foo.h"

void Foo(int iBar)
{
    // Do nothing...
}
#include "foo.h"

int main()
{
    Foo(1);

    return 0;
}
在VS2010中生成上述代码时,我收到一个链接器错误:

错误LNK2019:未解析的外部符号“void\uu cdecl Foo(int)”(?Foo@@YAXH@Z)在函数_main中引用


我不明白为什么我的Foo()函数在链接时无法解析。谁能给我一些关于我可能做错了什么的见解吗?

因此,经过一些尝试和错误,我通过将定义代码从foo.cpp移动到foo.h,成功地构建了我的代码


无论出于何种原因,foo.cpp似乎没有与foo.obj绑定。我在log.h和log.cpp中分别声明和定义了全局日志实用程序函数,就像我在上面的测试“foo”文件中所做的一样,但是我在编译它们并将它们链接到我的程序时没有问题。我想知道我在做什么,其中一个链接没有问题,而另一个却无法识别cpp文件。

你在foo.obj中链接到exe了吗?@n0rd:我使用VS2010,所以当我打开解决方案时,我在菜单中单击“构建->构建解决方案”。解决方案中的每个项目都有不同的设置,可以更改有关生成路径、依赖项声明等的设置。除了要生成可执行文件的位置之外,我还没有更改生成设置。同一项目中是否有
main.cpp
foo.cpp
?@n0rd:Yes,提到的所有文件都在同一个项目中。是否确定
Foo
函数未在
Foo.cpp
中使用
static
关键字定义?无论如何,运行“Visual Studio命令提示符”转到您的项目目录,然后在Debug或Release(取决于您试图构建的内容)目录下应该有foo.obj文件。运行
dumpbin/symbols foo.obj
并检查a)
foo
是否已导出,b)它与链接器查找的名称完全相同(在错误消息中提到)
dumpbin/symbols foo.obj |查找“foo”
可能会有所帮助