ID を使用してインスタンスを注文する必要がstatic sCounter
あります。int id
それらをベクトルでグループ化すると、これはうまく機能します..IDは正しく設定されています:
Task t("1st Task");
Task t2("2nd Task");
Task t3("3rd Task");
std::vector<Task> myTasks;
myTasks.push_back(t);
myTasks.push_back(t2);
myTasks.push_back(t3);
タスク番号 1 の ID は 0、2 番目のタスクは ID 1、3 番目のタスクは ID 2 です。しかし、これを行うと:
std::vector<Task> myTasks;
myTasks.push_back(
Task("First Task"));
myTasks.push_back(
Task("Second Task"));
myTasks.push_back(
Task("Third Task"));
静的な sCount 値が奇妙な結果を出し始めます。
最初のものは ID 1 を取得し、2 番目も ID 1 を取得し、3 番目は ID 0 を取得します。
このようなオブジェクトを作成すると、静的カウンターが混乱するのはなぜですか?
sCounter はコンストラクタで増加し、デストラクタで減少します。
int Task::sCount = 0;
Task::Task(std::string text) {
this->setText(text);
this->setStatus(1);
time_t now = time(0);
timestamp = *localtime(&now);
std::cout << "Count from " << sCount;
sCount++;
std::cout << " to --> " << sCount << "\n";
this->setID(); // set the current sCount to ID
}
Task::~Task() {
--sCount;
}
sCounter はプライベートな静的 int です。static int sCount;