0

我收到这些错误:

1>test.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall     std::basic_ofstream<char,struct std::char_traits<char> >::`vbase destructor'(void)" (__imp_??_D?  $basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ) referenced in function _main
1>test.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall    std::basic_ofstream<char,struct std::char_traits<char> >::basic_ofstream<char,struct std::char_traits<char>>(void)" (__imp_??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@XZ) referenced in function _main

此测试代码工作正常:

int main(int argc, char **argv)
{
    std::ofstream game_record_output;
}

直到我包含一个从 VS 2003 .NET 转换的旧项目中的 .h

首先,我认为它可能有一些与此相关的问题:

http://msdn.microsoft.com/en-us/library/8h8eh904(v=vs.90).aspx

但是,我已经检查过只有 MSVCRT.LIB 和 MSVCPRT.LIB 被链接,所以旧的 iostream 没有被链接......

我不确定为什么会发生这种情况,我假设在包含链中包含了一些错误的文件,但是我已经在包含链中搜索了旧的 iostream .h 文件(即:(fstream.h,iomanip. h、ios.h、iostream.h、istream.h、ostream.h、streamb.h 和 strstrea.h))

那么,我还有什么需要检查的吗?

该项目使用MFC。

4

2 回答 2

0

根据此更改您的 Visual Studio 项目Properties设置:C/C++ -> Code Generation -> Runtime Library

  • 用于调试配置的多线程调试 DLL (/MDd)
  • 用于发布配置的多线程 DLL (/MD)
于 2012-05-11T10:41:16.660 回答
0

此页面包含 LNK2019 的一些原因:https ://msdn.microsoft.com/en-us/library/799kze2z.aspx 。特别是,从 VS 2003 升级可能会触发此问题:

构建依赖项仅定义为解决方案中的项目依赖项。在早期版本的 Visual Studio 中,这种依赖级别就足够了。但是,从 Visual Studio 2010 开始,Visual Studio 需要项目到项目的引用。如果您的项目没有项目到项目的引用,您可能会收到此链接器错误。添加项目到项目的引用来修复它。

或这个

您将使用本机 wchar_t 的代码与不使用的代码混合在一起。在 Visual C++ 2005 中完成的 C++ 语言一致性工作使 wchar_t 默认成为本机类型。您必须使用 /Zc:wchar_t- 编译器选项来生成与使用早期版本的 Visual C++ 编译的模块兼容的代码。如果不是所有模块都使用相同的 /Zc:wchar_t 设置编译,则类型引用可能无法解析为兼容类型。验证所有模块中的 wchar_t 类型是否兼容,方法是更新使用的类型,或者在编译时使用一致的 /Zc:wchar_t 设置。

于 2015-06-29T16:44:15.410 回答