c++ - 如何启用 VS2013 c++ 编译器功能?

标签 c++ visual-studio-2010 visual-studio c++11

所以我在这里很困惑。我有一个用 VS2013 用 C++ 编写的库“A”,可以在项目“X”中成功包含和构建它。

“X”项目是一个同样在 VS2013 中开发的 MFC 应用程序,其 Platform Toolset 值设置为 VS2013。它恰好是一个 Win32 应用程序。

我现在必须将该库包含在另一个项目“Y”中(这是一个 VS2010 项目,但我(相信我)使用 VS 将其转换为 2013)。

“Y”项目不是 MFC 应用程序,而是一个 .dll,其 Platform Toolset 值也设置为 VS2013。它是一个 x64 应用程序。

但是,当我尝试构建“Y”时,出现大量编译器错误,主要是因为该库使用了 C++11 功能,而显然 VS 不允许这样做。错误主要是 vector 括号初始化语法问题。例如。 非聚合不能用初始化列表初始化。但除此之外,它也找不到strtollreport_rangecheckfailure 的符号。

但是我不明白。据我所知,VS2013 应该支持这些功能,在我的其他项目中似乎也支持。这里可能是什么问题?要使用 2013 编译器,我还需要做些什么吗?

编辑 更清楚地说,是这样的赋值给出了聚合编译器消息:

std::vector<std::string> paramVector = { "username", "time", "hours", "udata" };

最佳答案

it also can't find symbols for strtoll and report_rangecheckfailure

对潜在问题的最强烈暗示,即链接器错误。所以一个确凿的事实是显而易见的:您没有链接 VS2013 C 运行时库。这些符号存在于 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\libmsvcrt.lib 和 libcmt.lib 中,但不存在于早期版本中,例如 VS2010 版本。

从这里开始,只需很短的一步就可以解释“无法使用初始化列表初始化非聚合”错误。显然你也不包括适当的 VS2013 <vector>包含文件。需要获得该 vector 分配进行编译。同样,包括它的 VS2010 版本可以解释该错误。

铁一般的事实:您的 Y 项目配置不正确。

对于编译器和链接器,两者 都弄错了确实指向工具集目标设置,即使您认为它是正确的。一个标准错误是更改调试配置的设置,但忘记也为发布配置更改设置。将 Project > Properties > VC++ Directories 设置错误是另一种方法。编译器的/showIncludes 和链接器的/verbose 选项会为您提供足够的反馈来验证您的假设。如果您绝对绝望,请重新创建 Y 项目。

关于c++ - 如何启用 VS2013 c++ 编译器功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724429/

相关文章:

c++ - 为什么我不能使用 using 来消除基本成员变量之间的歧义?

c++ - 创建RAII类时应如何处理错误?

c++ - OpenCV C++ VS2010 : FindContours throws exception

visual-studio - Visual Studio 2005/2008 : How can you share/force all developers to use the same formatting rules?

c++ - 执行终止的选择排序递归代码(碎片错误)

c++ - 处理大数据网络文件计算n个最近节点的高效算法

c++ - CUDA - OpenCV - Visual Studio 2010 中的 C++ 链接错误

C++ ToUnicodeEx() 无法识别 shift 键,除非我有一个 messgaebox()

visual-studio - 在 Visual Studio 中打开 Sitefinity 项目时出现 "InvalidOperationException: Stack Empty"

c++ - 调试断言失败 c >= -1 && c <= 255