【发布时间】:2014-02-25 21:56:58
【问题描述】:
我有一个使用 MFC 和标准 C++ 的项目。我不知道它最初是在哪个 VS 中制作的。在仅安装了 VS2012 的机器上和仅安装了 VS2010 的机器上打开时 - 它不会构建,显示错误,主要是关于类型不匹配。例如:
CListBox <bx
CString s;
ltbx.AddString(s);
这显示错误,说 AddString 不接受 CString 类型的参数。
CListBox <bx
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