2

このコードの何が問題になっているのか、そしてそれを修正する方法を誰かに説明してもらえますか?これは、より大きなプロジェクトの一部です。回答を提供するためにさらに情報が必要な場合は、お知らせください。

私が得ているエラーはこれです:

  g++ -c search.cpp
    search.cpp: In constructor ‘Search::Search()’:
    search.cpp:26:26: error: ‘callnumber’ was not declared in this scope
    make: *** [search.o] Error 1



Search::Search()
        {
            ifstream input;
            input.open("data.txt", ios::in);

            if(!input.good())
                //return 1;
            string callnumber;
            string title;
            string subject;
            string author;
            string description;
            string publisher;
            string city;
            string year;
            string series;
            string notes;

            while(! getline(input, callnumber, '|').eof())
            {   
                getline(input, title, '|');
                getline(input, subject, '|');
                getline(input, author, '|');
                getline(input, description, '|');
                getline(input, publisher, '|');
                getline(input, city, '|');
                getline(input, year, '|');
                getline(input, series, '|');
                getline(input, notes, '|');


            Book *book = new Book(callnumber, title, subject, author, description, publisher, city, year, series, notes);
            Add(book);
            }   

                input.close();

        }
4

3 に答える 3

12

この行で:

if(!input.good())
    //return 1;
string callnumber;

セミコロンで行をコメントアウトし、中かっこを使用していません。トークン間のスペースと改行1に関しては、C ++は空白に依存しないため、コメントを削除(およびインデントを追加)すると、次のことがわかります。と同等です

if (!input.good())
    string callnumber;

callnumberそして、の宣言がにローカルであることがわかりますif。中かっこまたはセミコロンを追加して、callnumber外にあることを宣言しますif(または完全に削除します)。

if (!input.good()) { // or ;
    //return 1;
}
string callnumber;

1マクロを除く

于 2012-05-08T23:20:50.353 に答える
2

この行にコメントしたので

if(!input.good())
    //return 1;

文字列callnumberは、そのスコープ内でのみ宣言され、スコープ外では使用できません。

ifステートメントも削除するか、リターン行のコメントを解除します

于 2012-05-08T23:21:40.007 に答える
1
        if(!input.good())
            //return 1;
        string callnumber;

効果的に

        if(!input.good()) {
            //return 1;
            string callnumber;
        }

コメントアウトされたの//return 1;はステートメントではないからです。そのcallnumberため、作成され、すぐに範囲外に消えます。

于 2012-05-08T23:22:42.423 に答える