分享丨解决c++类内初始化vector报错:expected parameter declarator
886
2024.12.18
2024.12.18
发布于 湖南

待解决问题

在c++中,如果我们在类里初始化vector会报expected parameter declarator的错误。

本讨论涉及面向对象的一些知识, 但是涉及不深,请谨慎观看😀

原因

是因为编译器区分不了它是成员变量还是成员方法

  • 如下的定义
class Solution {
    vector<int> res;
public:
    
};

上面的定义是可以正常使用的,而

  • 如下的定义
class Solution {
    vector<int> res(10);
//或vector<int> res(10, 0);
public:
    
};

编译器会无法区分你定义的是成员变量还是成员方法,这里我们可以看成员方法是怎么定义的

class Solution {
public:
    void dfs() {}
};

通过上面的代码示例,我们可以看出虽然res(10)看起来像是对成员变量res的初始化,但如果你在构造函数或者成员函数中有类似名称的局部变量,编译器会认为你在声明一个局部变量或函数,而不是初始化成员变量。

所以,在下次定义成员变量时,必须注意成员变量的初始化语法于函数声明的区分

解决方法

  • 类内初始化: (c++ 11)及以上
class Solution {
    vector<int> res = vector<int>(10);
public:
    void Method() {
        res.push_back(1);
    }
};
  • 使用构造函数
class Solution {
    vector<int> res;            //成员变量
public:
    Solution() : res(10) {}     //在构造函数中初始化成员变量
};

上面内容为自创,如有错误还请读者指出😀

评论 (2)