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

子类中能否存储另一个子类的vector?C++代码求助

问题解答

首先明确:完全可以在Major这个子类中存储Student子类的vector,你的设计逻辑没问题,代码跑不起来是因为几个语法和细节错误,逐个给你揪出来:

代码里的错误点

  • 变量名写错:main函数最后一行调用的folder.print(std::cout);,但你定义的对象是major,应该改成major.print(std::cout);
  • 流输出方式错误:Major的print函数里,你直接用os << this->students[i],但Student类没有重载operator<<,没法直接用流输出对象,应该调用Student自己的print方法,改成this->students[i].print(os);
  • 缺失必要头文件:代码里用到了std::string、std::vector、std::ostream,必须在开头加上三个头文件:#include <iostream>、#include <string>、#include <vector>,否则编译器找不到这些标准库类型
  • 可选优化(非必须):Major的构造函数可以用const引用传递vector,避免不必要的拷贝,把参数改成const std::vector<Student>& students

修正后的完整代码

#include <iostream>
#include <string>
#include <vector>

class University {
public:
    virtual void print(std::ostream& os) = 0;
    virtual ~University() = default;
};

class Student : public University {
    std::string studentName;
public:
    Student(std::string studentName) : studentName(studentName) {}

    void print(std::ostream& os) override {
        os << this->studentName << std::endl;
    }
};

class Major : public University {
    std::vector<Student> students;
public:
    Major(const std::vector<Student>& students) : students(students) {}
    
    void print(std::ostream& os) override {
        for(size_t i = 0; i < this->students.size(); ++i){
            this->students[i].print(os);
        } 
    }
};

int main(){
    Student student1("Mark");
    Student student2{"Tom"};
    Student student3{"Donald"};
    Student student4{"Duck"};

    std::vector<Student> students {student1, student2, student3, student4};
    
    Major major{students};
    major.print(std::cout);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:15:37