类的锯齿状数组
Jagged array of classes
在我的新工作中,我意识到到目前为止,我实际上很少使用我的C++技能。我现在正在努力进行一些自我强加的 OOP 练习,并且被困在参差不齐的一系列课程中。
代码如下:
#define CAT_ONE_COUNT 6
#define CAT_TWO_COUNT 7
#define CAT_THREE_COUNT 20
#define CAT_FOUR_COUNT 5
#define CAT_FIVE_COUNT 4
#define CAT_SIX_COUNT 20
enum {CAT_ONE, CAT_TWO, CAT_THREE, CAT_FOUR, CAT_FIVE};
class EntryList
{
private:
ScheduleEntry* catOne[CAT_ONE_COUNT];
ScheduleEntry* catTwo[CAT_TWO_COUNT];
ScheduleEntry* catThree[CAT_THREE_COUNT];
ScheduleEntry* catFour[CAT_FOUR_COUNT];
ScheduleEntry* catFive[CAT_FIVE_COUNT];
ScheduleEntry* catSix[CAT_SIX_COUNT];
ScheduleEntry** entries[];
public:
EntryList();
~EntryList();
std::string getEntry(int cat, int entry);
};
EntryList::EntryList()
{
catOne[0] = new ScheduleEntry("Pressups");
catOne[1] = new ScheduleEntry("Situps");
catOne[2] = new ScheduleEntry("Squats");
catOne[3] = new ScheduleEntry("Bench Work");
catOne[4] = new ScheduleEntry("Partner Versions");
catOne[5] = new ScheduleEntry("Running + Numbers");
entries[CAT_ONE] = &catOne;
}
显然,ScheduleEntry 是在其他地方定义的(并且成员函数是)的,我在尝试编译时遇到的错误如下:
gfi@testbox:~/test$ g++ -o test -std=c++0x main.cpp
In file included from main.cpp:6:
EntryList.h: In constructor ‘EntryList::EntryList()’:
EntryList.h:40: error: cannot convert ‘ScheduleEntry* (*)[6]’ to ‘ScheduleEntry**’ in assignment
在阅读了我能找到的锯齿状数组内容后,这是我能想到的最简单、最易读的实现方式。首先要做的是 - 是吗?有没有更简单的方法?
接下来(当然)编译器错误。我怎么搞砸了打字?
提前感谢。 =)
编辑:
找到了快乐的媒介。
#define CAT_ONE_COUNT 6
#define CAT_TWO_COUNT 7
#define CAT_THREE_COUNT 20
#define CAT_FOUR_COUNT 5
#define CAT_FIVE_COUNT 4
#define CAT_SIX_COUNT 20
enum {CAT_ONE, CAT_TWO, CAT_THREE, CAT_FOUR, CAT_FIVE};
class EntryList
{
private:
ScheduleEntry** entries[6];
public:
EntryList();
~EntryList();
std::string getEntry(int cat, int entry);
};
EntryList::EntryList()
{
entries[CAT_ONE] = new ScheduleEntry*[CAT_ONE_COUNT];
entries[CAT_ONE][0] = new ScheduleEntry("Pushup");
entries[CAT_ONE][1] = new ScheduleEntry("Situps");
entries[CAT_ONE][2] = new ScheduleEntry("Squats");
entries[CAT_ONE][3] = new ScheduleEntry("Bench Work");
entries[CAT_ONE][4] = new ScheduleEntry("Partner Versions");
entries[CAT_ONE][5] = new ScheduleEntry("Running + Numbers");
}
语法错误为:
entries[CAT_ONE] = &catOne; // Arrays are secretly pointers so this won't work
替换为:
entries[CAT_ONE] = catOne; // catOne is a ScheduleEntry* [], which is a ScheduleEntry**
您可能会侥幸逃脱以下情况:
const int width = 6;
int height[width] = { 6, 7, 20, 5, 4, 20 };
ScheduleEntry*** entries = new (ScheduleEntry**)[width];
for (int i = 0; i < width; ++i) entries[i] = new (ScheduleEntry*)[height[i]];
entries[0][0] = new ScheduleEntry("Pressups");
entries[0][1] = new ScheduleEntry("Situps");
entries[0][2] = new ScheduleEntry("Squats");
entries[0][3] = new ScheduleEntry("Bench Work");
entries[0][4] = new ScheduleEntry("Partner Versions");
entries[0][5] = new ScheduleEntry("Running + Numbers");
// etc etc
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 从锯齿状数组读取
- c#中的c++锯齿状数组切片
- std::string 或 char[] 作为大型数组状结构的元素
- 类的锯齿状数组
- 如何在c++中创建锯齿字符串数组
- c++ 11迭代锯齿数组
- 二维锯齿数组到一维数组的c++
- 将System::Byte的锯齿数组转换为无符号char**
- 数组中值的C++实例?(柱状图)
- 如何以锯齿形顺序遍历 2D 数组