You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将C++外部类中内部类的变量存入外部类的二维vector?

问题排查与解决方法

我帮你梳理了代码里的几个关键错误,一个个拆解来看:

1. 构造函数名称不匹配

你在Outer类里声明的构造函数写成了PegSolitaire(vector<vector<inner>>cvect);,但构造函数的名字必须和类名完全一致,应该改成Outer(vector<vector<inner>>cvect);。

2. 构造函数赋值逻辑颠倒

在构造函数的定义中,你写了cvect=vect;——这是把类的私有成员vect的值赋给参数cvect,完全搞反了赋值方向。正确的写法应该是把传入的参数赋值给类成员:vect = cvect;。

3. send_into_vector函数的双重错误

这个函数里有两个核心问题:

  • 你直接使用了a,但函数内部并没有定义Outer::inner类型的对象a,需要先创建这个对象,或者把它作为参数传入函数;
  • vect是vector<vector<Outer::inner>>类型的二维容器,你直接push_back(a.get_i1)完全不符合类型要求:一是get_i1是成员函数,你没加括号调用;二是就算调用了,返回的是int,和容器元素类型vector<Outer::inner>不匹配。你需要先构建一个vector<Outer::inner>类型的行,再把inner对象放进去,最后添加到二维容器中。

4. 外部定义成员函数的类型限定缺失

在定义getVector函数时,返回类型vector<vector<inner>>需要明确inner是Outer的内部类,应该写成vector<vector<Outer::inner>>,否则编译器找不到inner的定义。


修正后的完整代码

#include <iostream>
#include <vector>
using namespace std;

class Outer{
public:
    // 修正构造函数名称
    Outer(vector<vector<inner>>cvect);
    // 修改为接收inner对象作为参数
    void send_into_vector(const inner& a);
    vector<vector<inner>> getVector();
    
    class inner{
    public:
        int get_i1();
        int get_i2();
        void set(int io,int it);
    private:
        int i1;
        int i2;
    };
private:
    vector<vector<inner>> vect;
};

// 内部类成员函数定义
int Outer::inner::get_i1(){
    return i1;
}

int Outer::inner::get_i2(){
    return i2;
}

void Outer::inner::set(int io,int it){
    i1 = io;
    i2 = it;
}

// 修正返回类型的内部类限定
vector<vector<Outer::inner>> Outer::getVector(){
    return vect;
}

// 修正构造函数赋值逻辑
Outer::Outer(vector<vector<inner>>cvect){
    vect = cvect;
}

// 修正send_into_vector逻辑:将inner对象存入二维vector的新行
void Outer::send_into_vector(const Outer::inner& a){
    vector<Outer::inner> row;
    row.push_back(a);
    vect.push_back(row);
    
    // 如果你的需求是把i1和i2拆成两个inner对象存入同一行,可以用这段代码:
    // Outer::inner temp1, temp2;
    // temp1.set(a.get_i1(), 0);
    // temp2.set(0, a.get_i2());
    // vector<Outer::inner> row;
    // row.push_back(temp1);
    // row.push_back(temp2);
    // vect.push_back(row);
}

int main() {
    Outer::inner a;
    a.set(1,2);
    
    // 示例使用:创建Outer对象并存入inner数据
    vector<vector<Outer::inner>> initVect;
    Outer outerObj(initVect);
    outerObj.send_into_vector(a);
    
    // 验证存入结果
    auto result = outerObj.getVector();
    if(!result.empty() && !result[0].empty()){
        cout << "i1: " << result[0][0].get_i1() << ", i2: " << result[0][0].get_i2() << endl;
    }
    
    return 0;
}

额外说明

如果你的需求是把inner对象的i1和i2分别作为独立元素存入二维vector,而不是存入整个inner对象,可以启用代码里注释的那段逻辑,核心是要严格匹配二维容器的类型结构:外层是vector,每个元素是vector<Outer::inner>,所以每次添加的要么是完整的一行vector<inner>,要么是往已有的行里添加inner对象。

内容的提问来源于stack exchange,提问作者Vito Metvet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 01:07:34