【问题标题】:No member named 'vsnprintf' in namespace 'std'; did you mean 'vsprintf'?命名空间“std”中没有名为“vsnprintf”的成员;你的意思是“vsprintf”吗?
【发布时间】:2012-09-29 20:15:12
【问题描述】:

我正在尝试在 iOS 下编译 boost,但是每次我尝试启动我的项目时都会出现这样的错误:

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/include/c++/4.2.1/bits/c++locale.h:79:28: No member named 'vsnprintf' in namespace 'std'; did you mean 'vsprintf'?
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/include/c++/4.2.1/bits/c++locale.h:79:60: Too many arguments to function call, expected 3, have 4

我认为主要原因是编译器,我尝试更改一些设置并使用编译器但每次出现新错误时,这里是我当前的编译器设置,

  1. C 语言方言 - C99[-std=c99]
  2. C++ 语言方言 - C++98[-std=C++98]
  3. C++ 标准库 - libstdc++

Boost 版本是 1.44.0, XCode 版本为 4.5

有人知道我必须如何配置我的项目以在 iOS 下编译 boost 吗?

【问题讨论】:

  • 尝试包括<stdio.h> 而不是<cstdio> 并调用vsnprintf 而不是std::vsnprintf。有点杂乱无章,但如果你的编译器不完全兼容 C++11,你别无选择。
  • 我无法进行更改,因为 c++locale.h 中的错误不是我的文件而是系统文件 :((@DavidHammen
  • 你在网上搜索过这个问题吗?它无处不在,解决方案也是如此。显然,您在工具的“标题搜索路径”菜单中启用了“递归”复选框。取消选中它。

标签: c++ ios c macos boost


【解决方案1】:

根据vsnprintf() 的参考页面,它是在 C++11 中引入的,因此请尝试使用 -std=C++0x 代替 -std=C++98(但是,编译器可能不支持 C++11 中引入的所有功能)。

【讨论】:

  • 这是-std=c++0x,而不是-std=C++11
  • @DavidHammen 但属性中没有 -std=c++0x 只有以下值:C++98[-std=c++98] GNU++98[-std =gnu++98] C++11[-std=c++11] GNU++11[-std=gnu++11]
  • @DavidHammen 那么如何将 C++ 语言方言属性设置为 -std=c++0x ?
  • @ViToBrothers 你找到解决方案了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-02-13
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
相关资源
最近更新 更多