【问题标题】:std::string generates linker error -- const char* does not. why?std::string 生成链接器错误—— const char* 不会。为什么?
【发布时间】:2019-01-10 22:55:10
【问题描述】:

就像标题所说的那样......我得到了这段代码

std::string dir;
(ls == 1) ? dir = "Long" : dir = "Short"; 

这会产生我不明白的错误

LNK2019: unresolved external symbol _CrtDbgReportW referenced in function 
"void * __cdecl std::_Allocate(unsigned __int64,unsigned __int64,bool)

当我切换到

const char* dir;
(ls == 1) ? dir = "Long" : dir = "Short"; 

一切都很好。

那里有什么交易?

【问题讨论】:

  • 简单地写std::string dir = (ls == 1) ? "Long" : "Short"; 怎么样?
  • 看起来您可能将一些调试库与发布版本混合在一起。
  • 我不是在问如何使代码工作,它确实工作。我在问为什么 std::string 会产生错误而 const char* 不会。即使我把它写在一行上它也不会编译
  • 因为你没有提供编译和链接的命令行,所以报错。
  • @Nirvikalpa Samadhi:这个问题其实很容易回答:这是因为std::string 在内部使用了CrtDbgReportW 函数而const char* 没有。

标签: c++ string std


【解决方案1】:

std::string dir;
(ls == 1) ? dir = "Long" : dir = "Short"; 

dir 是一个std::string,这是一个相当复杂的类,它将从标准库中提取零碎,包括似乎调用 Windows 调试辅助函数 _CrtDbgReportW 下的内存分配一些情况。无论出于何种原因,此调试辅助函数都没有被链接。

但是在

const char* dir;
(ls == 1) ? dir = "Long" : dir = "Short"; 

dir 只是一个简单的指针,一个地址。 dir = "Long" 只是将 dir 指向字符串文字 "long"。这只是一个简单的任务,不需要任何库的帮助。

【讨论】:

    猜你喜欢
    • 2018-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 2016-04-18
    • 2021-06-01
    • 2018-08-23
    • 1970-01-01
    相关资源
    最近更新 更多