c++ - Unresolved external symbol 问题

标签 c++ visual-studio-2010 visual-c++

我有一个问题。我收到错误,但不确定为什么会发生。

2>Home.obj : error LNK2019: unresolved external symbol "**void __cdecl LogAString(char *,...)**" (?LogAString@@YAXPADZZ) referenced in function "**public: static void __cdecl X::Home::HomeStart(void)**" (?HomeStart@Home@X@@SAXXZ)
2>Widget.obj : error LNK2001: unresolved external symbol "void __cdecl LogAString(char *,...)" (?LogAString@@YAXPADZZ)
2>J:\src\out.dll : fatal error LNK1120: 1 unresolved externals

这是我的代码:

日志.h

#pragma once

#include <iostream>
#include <cstdarg>

void LogAString(char* fmt, ...);
void LogAnError(char* fmt, ...);

日志.cpp

#include "Log.h"

#include <Util/String/String Formatting.h> // defines format(). Does not have any errors or issues.

void LogAString(char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vprintf(fmt, ap);
    va_end(ap);
};

void LogAnError(char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);

    auto formatted_string = format("ERROR: %s", fmt).c_str();
    LogAString(const_cast<char*>(formatted_string), ap);

    va_end(ap);
};

Home.cpp(摘录)

#include "Home.h"
#include "Log.h"

namespace X {

void Home::HomeStart()
{
    while (true)
    {
        auto number_of_widgets = Widgets::Count();
        LogAString("Loading with %d widgets", number_of_widgets);
    }
}

} // namespace X

我以为我已经分别在头文件和 cpp 文件中声明和定义了函数。为什么我会收到这些错误?我已经研究了几个小时了,但仍然不确定为什么会发生这种情况。在 VS 2010 上使用 VC++。

目前我没有使用任何其他外部库。编译目标是一个DLL,“out.dll”。

最佳答案

这是链接器错误,而不是编译器错误。这意味着您在代码中正确引用了头文件是正确的。事实上,您的代码已成功编译。

但是,链接器出去寻找它所指向的库中引用的函数,却空手而归。库引用在 VC++ 项目的属性表中定义。您的项目输出 Out.dll 吗?看起来链接器需要一个。我将研究链接器部分以及您的编译生成的文件。

发布有关您的构建和解决方案/项目配置的更多信息,或者如果信息不够的话,最好准确说明属性表中的内容。

关于c++ - Unresolved external symbol 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7972264/

相关文章:

c++ - 在 std::ostrstream::str 之后使用 std::ostrstream::freeze 以防止内存泄漏

c++ - 用 std::transform 填充 std::map(错误:无法推断参数)

c++ - 检查无符号整数没有索引的最佳实践

c++ - 如何在 GDB 中打印 C++ vector 的元素?

c++ - STL map 比较器能否以某种方式获得指向 map 本身的指针?

visual-studio-2010 - OpenCV:无法用负数制作矩阵

css - 在 Visual Studio 2010 中,有没有办法轻松地注释掉 CSS 中的行?

c++ - 如何访问外部库和头文件 VC10

c++ - 我应该在 Visual Studio 下为 Linux 交叉开发吗

c++ - 将 const uint16 arr[] 转换为 uint16 arr[]