c++ - 编译器无法识别 std::vector 的成员初始值设定项

标签 c++ c++11 gcc cmake

我想初始化一个 std::vector 以具有特定的长度。 在我使用的 .hpp 文件中

#include <vector>

class foo
{
foo(){};
~foo(){};
std::vector<double> pressure (4,0); //vector 4 elements = 0

void readPressure()
{
    pressure.at(0) = 1;
    pressure.at(1) = 2;
    pressure.at(2) = 3;
    pressure.at(3) = 4;
}
...
};

但我收到错误:

error: expected identifier before numeric constant
std::vector<double> pressure(4,0);
                             ^
error: expected ',' or '...' before numeric constant

我读到这可能是由于没有使用 C++11,但我在 makefile 中指定了

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_FLAGS_RELEASE "-O3")

我在树莓派4上编译,g++版本是8.3

***编辑了.hpp文件

最佳答案

Default member initializer (C++11 起) 仅支持大括号和等号初始值设定项。例如

class foo
{
    std::vector<double> pressure = std::vector<double>(4,0); //vector 4 elements = 0
    ...
};

顺便说一句:我们不能将大括号初始化程序用作 std::vector<double> pressure{4,0}; ,因为它会初始化 vector包含 2 个值为 4 的元素和0 ,这不是您想要的。

关于c++ - 编译器无法识别 std::vector 的成员初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64222169/

相关文章:

c++ - `std::timed_mutex` 的有效用例?

c++ - 转换正确性 - ID2D1Brush 到 ID2D1SolidColorBrush (DirectX)

c++ - 说真的, copy-and-swap 习语真的应该如何工作!我的代码失败

c++ - 关于平行网格生成的问题

c++ - std::vector 保证不在元素之间留下空隙吗?

c++ - 我可以在 C++ 中获得非专用 vector<bool> 类型吗?

c++ - 将抽象仿函数分配给 std::function - 为什么 std::ref 是一个解决方案?

linux - 在 Ubuntu 上为 CentOS 编译

我们可以写多行宏而末尾没有反斜杠吗?

c - Mac OS 上的混合静态和动态链接