【问题标题】:Project compiles in only in a certain version of Visual Studio项目仅在特定版本的 Visual Studio 中编译
【发布时间】:2014-02-25 21:56:58
【问题描述】:

我有一个使用 MFC 和标准 C++ 的项目。我不知道它最初是在哪个 VS 中制作的。在仅安装了 VS2012 的机器上和仅安装了 VS2010 的机器上打开时 - 它不会构建,显示错误,主要是关于类型不匹配。例如:

CListBox &ltbx
CString s;
ltbx.AddString(s);

这显示错误,说 AddString 不接受 CString 类型的参数。

CListBox &ltbx
std::string str;
ltbx.AddString(str.c_str());

此代码也显示错误:

string str;
CString CInputID;
str = static_cast<string> (CInputID);

它说没有用户定义的从 CString 到 std::string 的转换。

毫无疑问,我应该对字符串和所有字符串使用不同的类型,但是在安装了 VS2010 和 VS2008 的机器上打开的完全相同的项目工作得很好,所有类型都匹配。所以我的问题是这是如何工作的?我在想,也许 VS2008 有一些库定义了所有必要的转换,而 VS2010 只是在利用它们。如果是这样,这些库是什么?如何让这个项目在没有安装 2008 studio 的机器上运行?

【问题讨论】:

  • ltbx 引用有分配吗?你不能声明一个引用而不让它引用一些东西。
  • 当你右击CListBox并选择“去声明”时,你会得到什么?
  • 另外,CString != std::string 您不能将一种类型转换为另一种类型。
  • 你可能想研究一下static_cast 做了什么,因为不是这样的。
  • @Joachim Pileborg 是的,该 ltbx 参考有一个分配。它是一个函数的参数,我只是用来表示ltbx的类型。 @Wimmel CListBox 并选择“转到声明”,该文件导致文件 afxwin.h,代码:class CListBox : public CWnd{...}; 问题的关键不在于匹配类型,而是关于在特定配置中如何匹配类型(VS2008 和VS2010 已安装)。该项目建立在某台机器上并且工作正常

标签: c++ visual-studio-2010 visual-studio-2008 visual-studio-2012 mfc


【解决方案1】:

AddString 采用 LPCTSTR,它是 const char*const wchar_t*,具体取决于是否定义了 _UNICODE

区别可能是你的VS2012项目中定义了_UNICODE。

【讨论】:

  • 这正是问题所在。非常感谢!
  • 可能值得注意的是,在 VS2013 及更高版本中,不推荐在 MFC 中使用多字节字符集,因此您应该考虑更改代码,而不是取消定义 _UNICODE。如果您需要来自CStringstd::basic_string&lt;char&gt;,您可以使用CT2A 宏作为described here
猜你喜欢
  • 1970-01-01
  • 2014-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
相关资源
最近更新 更多