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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 07:45:03