gpt4 book ai didi

c++ - 锯齿状的类数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:53:29 25 4
gpt4 key购买 nike

在我的新工作中,我意识到迄今为止我实际使用的 C++ 技能是多么少。我现在正在努力完成一些 self 强加的 OOP 练习,并且被困在参差不齐的类(class)中。

代码如下:

#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

关于c++ - 锯齿状的类数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11091996/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com