タイムラインアプリケーションを作成しています。タイムラインは、TimelineItemを持つことができます。アイテムが繰り返される場合は、TimelineItemにTimelineItemRepeat型のベクトルを保持し、TimelineItemとTimelineItemRepeatの値の唯一の違いは開始時刻と終了時刻です。全く同じ変数を持つ2つのオブジェクトを作成する
このように、私はTimelineItemのインスタンスを編集するたびにそのようにしたいと思います。 tl_item.setLocation( "Paris")、TimelineItemに関連するすべてのTimelineItemRepeatインスタンスも更新されます。
私はTimelineItemインスタンスを作成し、各TimelineItemの変数のメモリ位置をTimelineItemRepeatのコンストラクタに渡すことでこれを実現しようとしています。
現在のところ、変数を宣言してそれを両方のコンストラクタに渡していますが、動作していません。私のコード:
driver.cpp
short int type = 0;
string desc = "Lunch with Team";
string loc = "New York Office";
time_t start = time_t(0);
time_t end = time_t(600);
vector<TimelineItemRepeat> repeats;
TimelineItem tl_item(type, desc, loc, start, end);
repeats.push_back(TimelineItemRepeat(type, desc, loc, start, end, tl_item));
tl_item.setLinkedItems(repeats);
std::cout << tl_item.toString() << endl;
std::cout << tl_item.getLinkedItems()[0].toString() << endl;
tl_item.setDescription("Dinner with Team");
std::cout << tl_item.toString() << endl;
std::cout << tl_item.getLinkedItems()[0].toString() << endl;
出力
TimelineItem Description Address: 0x7fff5ebcb600
0 Lunch with Team 0 600 1
TimelineItemRepeat Description Address: 0x7fff5ebcb6a0
0 Lunch with Team 0 600
TimelineItem Description Address: 0x7fff5ebcb600
0 Dinner with Team 0 600 1
TimelineItemRepeat Description Address: 0x7fff5ebcb6a0
0 Lunch with Team 0 600
は、私は間違った方法このついて行くだろうか?
いくつかのコードを表示してください! – OldProgrammer
TimelineItem **ポインタ**のベクトルを作成して、繰り返しエントリがメモリ内の同じオブジェクトを参照するようにする必要があります。 – ApproachingDarknessFish
@OldProgrammerが追加されました。 TimelineItemはdriver.cppの先頭にある変数のインスタンスを作成しているため、新しいアドレスを作成していますが、TimelineItemRepeatは変数のアドレスを取得しているだけです。したがって、driver.cppの変数を変更する場合、TimelineItemRepeatは更新されます。 TimelineItemのデータフィールドの場所をTimelineItemRepeatに渡す方法がわかりません。 – Beardo