我花了很多时间在网上寻找我的问题的答案,并没有发现任何东西。不幸的是,我一定在班上落后了。如何在C++的基类中创建派生类的对象数组?
我有一个任务,要求我做一个校园班,“校园必须有两个阵列的每种类型的建筑物(学术,娱乐)” (这可能意味着每个建筑物只有1个阵列。 2个数组,其余的赋值指令有其他的语法错误。)
我有8个文件。每个类的.h和.cpp文件。校园是基础课程,建筑物是校园派生的课程,学术和休闲课程源自建筑课程。
我得到错误C2061上我在声明Campus.h文件中的数组。
Campus.h
#pragma once
class Campus
{
public:
Campus();
static const int maxPerBuildingType;
void loadFile();
void searchList();
void searchName();
private:
int numberOfAcademic, numberOfRecreation;
void Display();
Campus * campusArray = new Academic [maxPerBuildingType]; //Error C2061
Campus * RecreationalArray = new Recreational[maxPerBuildingType]; //Error C2061
};
Campus.cpp(还没有实现的功能还)
#include "Campus.h"
#include <fstream>
using namespace std;
const int Campus::maxPerBuildingType = 7;
Campus::Campus()
{
}
void loadFile()
{
}
void searchList()
{
}
void searchName()
{
}
Building.h
#pragma once
#include "Campus.h"
#include <string>
using namespace std;
class Building :
public Campus
{
public:
Building();
Building(int _ID, string _name, string _description);
int getID();
void setID(int _ID);
string getName();
void setName(string _Name);
string getDescription();
void setDescription(string _Description);
virtual void showFullDescription() = 0;
private:
int ID;
string name;
string description;
};
Academic.h
#pragma once
#include "Building.h"
class Academic :
public Building
{
public:
Academic();
Academic(int _ID, string _name, string _description, int _numOfRooms);
int getNumOfRooms();
void setNumOfRooms(int _numOfRooms);
virtual void showFullDescription();
private:
int numOfRooms;
};
我可能在代码中有一些其他的错误,但我主要是想了解我在校园课程中创建学术和娱乐数组时需要做什么错误。它还表示在.h文件中使这些保密。我不想找人为我做我的工作,我只是想了解它,但截至目前,我完全无能为力。
非常感谢任何人的帮助!
编译时间常量表达式必须具有可见值,所以您需要在头中设置“maxPerBuildingType”。另外,我不确定是否可以堆栈类中的初始化器和构造函数。这是一个很大的问题:你的数组与指向它的指针类型不同。这应该工作AFAIK,但只有在使用指针算术之前将指针指向派生类型。如果'sizeof(Camous)!= sizeof(Academic)','campusArray [1]'会很有趣(坏)。此外,请将您的问题中的完整错误与最短的代码一起放入:[mcve]。 –
代码的哪一行是错误C2061发生?你有“休闲”课吗? 'Campus.h'中包含'Academic.h'和'Recreational.h'?但是,即使你包含它们,你也会得到循环依赖。你不能用'campusArray'和'RecreationalArray'的初始化来定义'Campus',因为他们使用的类不能在没有'Campus'的情况下被定义。您需要将它们的初始化移动到'Campus.cpp'中的构造函数定义中。 – NikolayKondratyev
错误C2061发生在这两行'Campus * campusArray = new Academic [maxPerBuildingType];'和 'Campus * RecreationalArray = new Recreational [maxPerBuildingType];'。我没有在Campus.h中包含Academic.h或Recreational.h –