none
error LNK2019: 无法解析的外部符号 __CrtDbgReportW,该符号在函数 "public: char const & __thiscall std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> >::operator*(void)const " (??D?$_String_const_iterator@DU?$char_traits@D@std@@V RRS feed

  • 问题

  • bool writeText(char * filePath,char * content,bool isAppend=true)
      {
       bool isSuccess(true);
       int Mode(ios::out);
       if(isAppend)
       {
        Mode=Mode|ios::app;
       }
       else
       {

       }
       //先检测目录是否存在,不存在则创建
       checkPath(filePath);
       ofstream fs;
       fs.open(filePath,Mode);
       if(fs!=0)
       {
        fs<<content;
       }
       else
       {
        isSuccess= false;
       }
       fs.close();
       return isSuccess;
      }

           char path[1024],content[9086];
           YGIO::FileIO f;
           strcpy(path,"C:\\xx.log");
           strcpy(content,"info");              
           f.writeText(path,content);//报错的语句

    如果注释掉上面这句,整个程序可以编译,如果使用这个语句就出现下面的错误:

    错误 8 error LNK2019: 无法解析的外部符号 __CrtDbgReportW,该符号在函数 "public: char const & __thiscall std::_String_const_iterator<char,struct std::char_traits<char>,class std::allocator<char> >::operator*(void)const " 中被引用 D:\CWorkSpace\XP3000\XP3000WinMAIN.obj XP3000

    2012年11月11日 9:15

答案

全部回复

  • 你好,

    首先提个小小的建议,定位错误时请尽可能缩小范围,比如上面的代码,可以依次减少注释的内容。

    LNK2019是连接器错误,根据错误信息基本可以判断错误发生在调用ofstream对象的时候,原因是链接的C运行时库版本不正确。

    请参考这里:http://msdn.microsoft.com/zh-cn/library/abx4dbyh.aspx

    用Debug(即调试模式)去build程序时,要确认使用的运行时库是Debug版本的,设置的地方在:

    Project->Properties->Configuration Properties>C/C++->Code Generation->Runtime Library

    将其设置为/MTd或/MDd就可以了。关于这两个选项的区别,请参考这里:http://www.cppblog.com/aurain/archive/2008/04/23/47911.html

    谢谢!


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月13日 7:09
    版主
  • 请问你的问题解决了吗?

    我暂时将自己的回复标记为答案,如果我的建议对你的问题没有帮助,你可以取消标记,并告诉我你的疑问。

    谢谢!


    Damon Zheng [MSFT]
    MSDN Community Support | Feedback to us

    2012年11月18日 5:08
    版主