【发布时间】:2021-01-21 02:51:10
【问题描述】:
我想将 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 文件
【问题讨论】:
-
你为什么要把它放在一个 .hpp 文件中?这应该在一些 .cpp 文件中。还可以尝试以下声明: auto pressure = std::vector
(4, 0);避免最麻烦的解析。 -
尝试以详细模式运行 cmake --build build 以绝对确定您的标志 (
VERBOSE=1 cmake --build build),因为这些代码在我身上编译 reproductible。这也不是一个初始化列表,它将 4 个零放入向量,而不是值 4,然后是零 -
我怀疑它实际上是一个类的成员,而您认为这个细节无关紧要。请阅读minimal reproducible example。
-
您发布的内容compiles。因此,这不是问题所在,或者您发布的内容不是您实际在做的事情。如果您希望我们帮助解决问题,发布一个正确的minimal reproducible example,它实际上重现问题为我们使用仅您发布的内容是至关重要的。不相关,“在我使用的 .hpp 文件中...” 全局声明不属于头文件,至少不是那样。所以这强烈支持@molbdnilo 水晶球,它被埋在一些你完全忽略的类/模板声明中......
-
我撤回了我的评论,因为您的代码似乎有效。现在我们可以看到真实的代码了,我想再次添加它,因为问题确实是Most vexing parsing。我很确定这有重复,但是 TL;DR;您需要在构造函数中对其进行初始化,最好在成员初始化列表中进行。