所以我在这里很难过。我有一个用“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并不允许它。错误主要是向量括号初始化语法问题。例如。 non-aggregates cannot be initialized with initializer list
。但此外,它也找不到strtoll
和report_rangecheckfailure
的符号。
但我不明白。据我所知,VS2013应该支持这些功能,它似乎在我的其他项目中。这可能是什么问题?使用2013编译器还需要做些什么吗?
修改 只是为了更清楚,这样的赋值给出了聚合编译器消息:
std::vector<std::string> paramVector = { "username", "time", "hours", "udata" };
答案 0 :(得分:3)
它也找不到strtoll和report_rangecheckfailure的符号
对于潜在问题的最强提示,那些将是链接器错误。因此,一个显而易见的事实很明显:您没有链接VS2013 C运行时库。这些符号存在于C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ libmsvcrt.lib和libcmt.lib中,但不存在于早期版本中,如VS2010版本。
从那里开始,它只是一个非常短的内容来解释“非聚合不能用初始化列表初始化”错误。显然,您也没有包含相应的VS2013 <vector>
包含文件。获取要编译的向量分配所必需的。再一次,包括它的VS2010版本解释了这个错误。
坚如磐石的事实:你的Y项目配置不正确。
错误两者编译器和链接器确实指向工具集目标设置,即使您认为它是正确的。标准错误是更改调试配置的设置,但忘记也为Release配置执行此操作。项目&gt;属性&gt; VC ++目录设置错误将是另一种方式。编译器的/ showIncludes和链接器的/详细选项为您提供足够的反馈来验证您的假设。如果你绝对绝望,那么重新创建Y项目。
答案 1 :(得分:0)
可能的原因之一是VS2013部分支持C ++ 11,请参阅此表了解详细信息https://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx
无论如何,最好先展示一下你到目前为止所犯错误的一个例子。