如何将类成员函数getNumberOfStudents()返回值作为std::array的大小参数
问题根因
std::array的第二个模板参数要求是编译期可确定的常量表达式,你代码中getNumberOfStudents()是运行时执行、从用户输入获取返回值的成员函数,编译阶段无法确定具体数值,因此编译器无法完成std::array的大小推导,代码无法编译。
此外你的写法存在逻辑死锁:成员函数必须在类实例化后才能调用,但类实例化前就需要确定所有成员变量的内存大小(包括std::array的占用空间),两者优先级矛盾,不可能实现。
解决方案
- 方案1:使用
std::vector替代std::array(最推荐)
如果确实需要运行时动态确定容器大小,直接改用std::vector即可,用法和std::array基本一致,支持随机访问,性能够满足绝大多数场景:
class Student{ private: std::vector<int> arr; int numberOfStudent = 0; public: Student() { // 构造阶段获取学生数量,初始化vector numberOfStudent = getNumberOfStudents(); arr.resize(numberOfStudent); } int getNumberOfStudents(){ std::cout << "How many students do you wanna add? "; std::cin >> numberOfStudent; return numberOfStudent; } };
- 方案2:如果必须使用
std::array,将大小改为编译期常量
如果学生数量可以提前确定、不需要运行时用户输入,把大小定义为constexpr编译期常量即可:
class Student{ private: static constexpr int studentCount = 50; // 编译期固定大小 std::array<int, studentCount> arr; public: constexpr int getNumberOfStudents() const { return studentCount; } };
内容的提问来源于stack exchange,提问作者user16672266
相关产品推荐
相关产品推荐

