c++ - 编译器无法识别 std::vector 的成员初始值设定项
问题描述
我想初始化一个 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文件
解决方案
默认成员初始化器(C++11 起)仅支持大括号和等号初始化器。例如
class foo
{
std::vector<double> pressure = std::vector<double>(4,0); //vector 4 elements = 0
...
};
顺便说一句:我们不能使用支撑初始化器 as std::vector<double> pressure{4,0};
,因为它会vector
用值4
和初始化包含的 2 个元素0
,这不是你想要的。
推荐阅读
- c# - 我们可以在 Getter 中使用 Delegates
- java - 将 DynamoDB json sqs 消息转换为普通 json java
- javascript - 如何在 Node.js 中使用多个对象归档 JSON 数据?
- sql - 使用 T-SQL 动态地将列转换为行
- php - 如何在laravel项目之外设置文件夹目标路径
- git - 有没有办法在 Intellij 中将两个本地分支合并在一起
- node.js - 将现有的 express 应用程序逐步迁移到 NestJS
- javascript - 为 Firefox 和 Safari 浏览器的 WebRTC 应用程序获取音频 I/O 设备的名称
- ruby-on-rails - partition_matching_region'中的块:nil:NilClass(NoMethodError)的未定义方法“匹配”
- javascript - moment lib 是否支持 1st、2nd、3rd 而不是 1st、2nd、3rd?