嵌套类的成员未由构造方法初始化

问题描述

我有两个班级,外层和内层。外部不包含任何数据成员。内部包含一个数据成员inner1_。当我调用external的构造函数时,我创建了Inner类inner1的实例。调用inner1的构造函数时,其数据成员inner1_应该是长度为n的向量。但是,构造完inner1之后,我发现其数据成员的长度为0。为什么会出现这种意外行为?

#include <iostream>
#include <vector>

class Outer {
public:
    Outer(int n) {
        Inner1 inner1{n};
        inner1.printsize();
    }
private:
    class Inner1 {
    public:
        Inner1(int n) {
            std::vector<double> inner1_(n);
        }
        void printsize() {
            std::cout << inner1_.size();
        }
        std::vector<double> inner1_;
    };

};
int main() {
    Outer test(7);
    return 0;
}

解决方法

您已经在inner1_中重新声明了ctor,这使class变量蒙上了阴影。您可能要调整向量的大小。这是调整向量大小的方法:

inner1_.resize(n);