g++ 版本 11.2.0 'aligned_alloc' 不是 'std' 的成员;

问题描述 投票:0回答:1

我正在使用 Windows 编译 C++ 程序,使用 g++ 版本 11.2.0 并收到错误:“aligned_alloc”不是“std”的成员。

我搜索并发现它是 c++17 中的一个函数,过去的答案建议使用标志 -std=c++17 进行编译,但这不起作用。这是我尝试编译的代码,取自 cppreference page:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <random>

...

float *p1 = static_cast<float *>(std::aligned_alloc(alignement, size));

我正在尝试编译:

g++ -std=c++17 code.cpp

c++ g++
1个回答
0
投票

这是一个库功能而不是语言功能。如果您使用的是 GNU c++ 标准库 (libstdc++),则 std::aligned_alloc 函数可用(如果您正在编译的 libc 提供了该函数)。我已经很长时间没有在 Windows 上工作了,我不知道你的具体设置,但是我可以从 MS 找到的大多数文档都表明它不是系统 libc 支持的功能。 (显像管)

在 Windows 方面比我更专业的人可能知道让它工作的技巧,但这似乎是平台(Windows)问题而不是编译器(g++)问题。事实上,搜索“std::aligned_alloc windows”会发现许多讨论,从“如果不更改操作系统就无法实现它”(我尚未验证这些声明)到“MS 没有计划支持它” 。这些讨论可以追溯到几年前,但有些讨论最近才几个月前。

© www.soinside.com 2019 - 2024. All rights reserved.