c++ - 具有大小和值构造函数的 std::vector 无法在 MSVC 16.9 下编译
问题描述
这是我在使用 std::vector 和 MSVC 时遇到的问题的最小可重现示例
#include <iostream>
#include <vector>
#include <string>
using namespace std; // For brevity
struct Struct
{
vector< int > Values(6, 0); // Should hold 6 zeros
vector< int > NormalConstructor; // Example of normal vector
void Dump() { for (auto val : Values) { cout << val << " "; } }
};
int main()
{
Struct s;
s.Dump();
cout << "\n";
}
该行vector< int > Values(6, 0);
产生error C2059: syntax error : 'constant'
,并且命名的变量Value
被着色,就好像它是一个函数声明一样。
cppreference.com 说这个构造函数“3)构造容器,其中包含具有值值的元素的计数副本”
我已经看过这些问题,这里有几个问题,但似乎没有一个问题表明出了什么问题,或者我应该做些什么来避免这个错误。
我应该怎么做?
解决方案
括号初始值设定项不能用于初始化默认成员初始值设定项中的数据成员(C++11 起)。(编译器试图将其解释为函数声明。)
您可以改用 euqal-sign 初始化程序。
struct Struct
{
vector< int > Values = vector< int >(6, 0); // Should hold 6 zeros
vector< int > NormalConstructor; // Example of normal vector
void Dump() { for (auto val : Values) { cout << val << " "; } }
};
或者在构造函数中使用成员初始化列表。
struct Struct
{
vector< int > Values;
vector< int > NormalConstructor;
void Dump() { for (auto val : Values) { cout << val << " "; } }
Struct() : Values(6, 0) {}
};
推荐阅读
- java - Java:两个椭圆段的交点转换为 3d 空间
- c# - Azure 函数需要更多时间才能完成并引发超时错误
- c# - 使用 MVC 的 ON DELETE CASCADE 的特殊权利
- jenkins-pipeline - 在 Jenkinsfile 中传递从 shell 中提取的变量时出错
- python - python中的for循环查找列表的总和
- cordova - 如何修复某些设备上相机流的“拉伸视图”(getUserMedia)
- ios - 在 iOS 应用程序中使用 Twitter 登录
- ajax - 如何使用 django 和 ajax 进行星级评分?
- android - 颤振中的 MissingPluginException
- matlab - Matlab中的fmincon输入参数太多