C++类内声明其他类对象时收到警告报错是什么原因
问题核心说明
C++ 完全支持在类内部将另一个自定义类作为成员类型,你遇到的报错和这个操作无关,问题出在代码中使用了C++标准不支持的C风格柔性数组成员语法。
具体报错原因
int pars[]、int scores[]属于C99标准引入的柔性数组特性,C++标准从未支持这种写法,仅部分编译器(如GCC)通过扩展兼容该语法,即便使用扩展也要求柔性数组必须是类/结构体的最后一个成员,且类至少包含1个其他非静态成员。- 你的
Course类中int pars[]并不是类的最后一个成员(后续还有构造函数声明),编译器无法计算出Course类的固定内存大小,自然无法在Runs类中为Course类型的成员分配内存,因此触发报错。
修复方案
你可以选择以下任意一种方式修复:
- 方案1:使用C++标准动态数组容器
std::vector替换无固定长度的数组,这是最推荐的写法,适配动态长度的需求:
#include <iostream> #include <string> #include <fstream> #include <vector> using namespace std; class Course{ public: string name; vector<int> pars; Course(); }; class Runs{ public: Course course; // 修复后无报错 vector<int> scores; Runs(); };
- 方案2:如果你可以确定数组的固定长度,直接给数组指定固定大小即可:
// 示例:如果是高尔夫课程数据,pars固定为18洞 class Course{ public: string name; int pars[18]; Course(); }; class Runs{ public: Course course; int scores[18]; Runs(); };
内容的提问来源于stack exchange,提问作者S L I C C
相关产品推荐
相关产品推荐

