-2

私は C++ を学び始めましたが、これが頭痛の種です。簡単な人物「データベース」アプリケーションを作成しましたが、何らかの理由で人物をリストするときに失敗します。

string search;
cout << "Give the name: ";
cin >> search;

vector<Person> foundPersons;
for(vector<Person>::iterator it = persons.begin(); it != persons.end(); it++) {
    Person p = *it;

    if(search == p.getFirstname() || search == p.getSurname()) {
        foundPersons.push_back(p);
    }
}

if(!foundPersons.empty()) {
    cout << "Found " << foundPersons.size() << " person(s).\n\n";
    cout << "Firstname\tSurname\t\tBirth year\n";
} else {
    cout << "No matches.";
}

for(vector<Person>::iterator it = foundPersons.begin(); it != persons.end(); it++) {
    Person p = *it;
    cout << p.getFirstname() << "\t\t" << p.getSurname() << "\t" << p.getBirthYear() << "\n";
}

cout << "\n";

personsのタイプですvector<Person>。すべてのエントリを調べて、名前を指定された検索値と比較します。foundPersons見つかった場合は、その人物をベクターに追加します。次にNo matches、見つかった人物の数とテーブル ヘッダーのいずれかを出力します。次に、見つかったすべての人を調べて、コンソールに出力します。

たとえば、"Jack Example" と "John Example" という 2 人の人物を追加して "Jack" を検索すると、"Jack" が検出されて出力されます。しかし、その後、プログラムは停止します。Windowsは「プログラムは動作を停止しました」と言います。コンパイル中またはプログラムの停止時にエラーは表示されません。

どうしたの?

4

1 に答える 1

12

for ループは正しくありません。タイプミスをして、2 つの異なるリストからイテレータを参照しているようです。変化する:

for(vector<Person>::iterator it = foundPersons.begin(); it != persons.end(); it++) {

for(vector<Person>::iterator it = foundPersons.begin(); it != foundPersons.end(); it++) {
于 2013-05-19T17:40:04.853 に答える