当前位置: 首页 > 知识库问答 >
问题:

为什么std::stoi和std::array不使用gc11编译?

萧飞
2023-03-14

在过去的几个月里,我一直在学习C语言并使用终端。我的代码使用g和c11编译并运行得很好,但在过去几天里它开始出现错误,此后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C标准。

我第一次遇到的错误包括

//
//  stoi_test.cpp
//
//  Created by ecg
//

#include <iostream>
#include <string> // stoi should be in here

int main() {

    std::string test = "12345";
    int myint = std::stoi(test); // using stoi, specifying in standard library
    std::cout << myint << '\n'; // printing the integer

    return(0);

}

尝试使用ecg$g-o stoi_试验stoi_试验编译。cpp-std=c 11

大堆cpp:13:22:错误:命名空间“std”中没有名为“stoi”的成员;你是说“阿托伊”吗?int myint=std::stoi(测试);~~~~~~~~^~~~atoi/usr/include/stdlib。h:149:6:注意:'atoi'在这里声明为int-atoi(const-char*);^大堆cpp:13:27:错误:从'std::string'(也称为'basic_string')到'const char*'int myint=std::stoi(test);^~~~~/usr/include/stdlib。h:149:23:注意:将参数传递给参数int atoi(const char*);^产生2个错误。

当使用gcc或clang以及-std=gnu11时,我在编译时也会遇到这些错误(我想它们都依赖于相同的文件结构)。无论是在代码中指定std::还是使用名称空间std指定,我都会得到相同的错误;

我担心这些问题的出现是因为9月份命令行工具通过Xcode进行了更新,或者是因为我安装了boost,这不知怎么搞砸了我的C 11库。希望有一个简单的解决方案。

我的系统:

配置为:--prefix=/Applications/Xcode。app/Contents/Developer/usr——包括gxx-

谢谢你能提供的任何见解。

共有1个答案

哈和惬
2023-03-14

clang有一个奇怪的stdlib,编译时需要添加以下标志

-stdlib=libc

你的代码片段可以在我的mac上使用

g-std=gnu11-stdlib=libc测试。cpp-o测试

这个答案描述了这个问题

 类似资料:
  • 两者之间有实际区别吗 和 ? 看起来包含常量元素的非常量数组仍然无法交换,赋值运算符也不起作用<我什么时候应该选择一个而不是另一个?

  • https://godbolt.org/z/P97MaK 我玩的概念和预期d::is_equality_comparable工作矢量,但它没有。 编译错误在 内部失败,而不是在受概念保护的函数边界处失败。 这是错误还是预期行为?

  • 我知道了从< code>std::async返回的< code>future具有某种特殊共享状态的原因,通过这种状态,< code >等待返回的future发生在future的析构函数中。但是当我们使用< code>std::pakaged_task时,它的未来不会表现出同样的行为。要完成打包的任务,必须从< code>packaged_task显式调用< code>future对象上的< cod

  • 我在理解条件变量及其在互斥体中的使用时遇到了一些困难,我希望社区能帮助我。请注意,我来自win32背景,因此与CRITICAL_SECTION、HANDLE、SetEvent、WaitForMultipleObject等一起使用。 这是我第一次尝试使用C++11标准库进行并发操作,它是在这里找到的一个程序示例的修改版本。 关于这个的几个问题。 我读过“任何要等待std::condition_var

  • 我想知道为什么std::map和std::set使用std::less作为比较键的默认函子。为什么不使用一个类似strcmp的函子呢?类似于: 假设地图中有两个对象,分别是键1和键2。现在,我们要插入另一个具有键3的对象。 如果使用,那么只需一个调用就有足够的信息来做出正确的决定。 根据映射中键的类型,可能很昂贵。 除非我缺少一些非常基本的东西,否则不应该使用类似于比较的东西,而不是作为比较键的默