私の新しい仕事では、これまで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");
}