首页 > 解决方案 > 具有大小和值构造函数的 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++visual-studiostdvector

解决方案


括号初始值设定项不能用于初始化默认成员初始值设定项中的数据成员(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) {}
};

推荐阅读