1

私はC++が初めてです。次のチュートリアルは見ないことにし、自分のスキルを使って面白いマインド リーダー アプリケーションを作成しました。私は自分自身に満足していますが、ほとんどのバグを解決しましたが、終了機能に関するバグがまだ 1 つあります。そのための C++ ドキュメントを読みましたが、何が間違っていたのかわかりません。exit(0); しました。次のような非常に奇妙なエラーがあります。

no match for call to '(std::string {aka std::basic_string<char>}) (int)

オンラインで検索しましたが、問題が何であるかはまだわかりません。私のエラーは59行目です(コードでマークされています):

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

int main()
{
    //declaring variables to be used later
    string name;
    string country;
    int age;

    //header goes below
   cout << "#######################################";
           " @@@@@@@@@@@@ MIND READER @@@@@@@@@@@@"
           "#######################################\n\n";

    //asks if the user would like to continue and in not, terminates
    cout << "Would like you to have your mind read? Enter y for yes and n for no." << endl;
    cout << "If you do not choose to proceed, this program will terminate." << endl;
    string exitOrNot;
    //receives user's input
    cin >> exitOrNot;
    //deals with input if it is 'y'
    if (exitOrNot == "y"){
        cout << "Okay, first you will need to sync your mind with this program. You will have to answer the following questions to synchronise.\n\n";

        //asks questions
        cout << "Firstly, please enter your full name, with correct capitalisation:\n\n";
        cin >> name;

        cout << "Now please enter the country you are in at the moment:\n\n";
        cin >> country;

        cout << "This will be the final question; please provide your age:\n\n";
        cin >> age;

        //asks the user to start the sync
        cout << "There is enough information to start synchronisation. Enter p to start the sync...\n\n";
        string proceed;
        cin >> proceed;
        //checks to see if to proceed and does so
        if (proceed == "p"){
            //provides results of mind read
            cout << "Sync complete." << endl;
            cout << "Your mind has been synced and read.\n\n";
            cout << "However, due to too much interference, only limited data was aquired from your mind." << endl;
            cout << "Here is what was read from your mind:\n\n";

            //puts variables in sentence
            cout << "Your name is " << name << " and you are " << age << " years old. You are based in " << country << "." << endl << "\n\n";

            cout << "Thanks for using Mind Reader, have a nice day. Enter e to exit." << endl;
            //terminates the program the program
            string exit;
            cin >> exit;
            if (exit == "e"){
                exit(0);       // <------------- LINE 59
            }

        }

    }
    //terminates the program if the input is 'n'
    if (exitOrNot == "n"){
        exit(0);
    }

    return 0;
}

ありがとう

4

3 に答える 3

4

ローカル変数exitは、同じ名前を持つ外部スコープからの他の識別子を隠します。

より小さな例で説明するには:

int main()
{
    int i;
    {
        int i;
        i = 0; // assign to the "nearest" i
        // the other i cannot be reached from this scope
    }
}

唯一のexit目に見えるのは type のオブジェクトであるstd::stringため、コンパイラはexit(0)への呼び出しと見なし、メンバーoperator()(int)の中で 1 つが見つからない場合、ヒッシーフィットをスローします。std::string

名前を修飾するか ( std::exit(0);)、変数の名前を変更できます。そして、すべてのコードが含まれているため、代わりにmain単に言うことができますreturn 0;.

于 2013-10-15T19:06:22.283 に答える
2

return 0;またはを使用してみてくださいreturn EXIT_SUCCESS;。それはまったく同じことです。また、 には 1 つの単語しか入力できませんcin。代わりに、次のgetline(cin, string name);ように、それでも機能しない場合は、のcin.ignore();前に a を追加してくださいgetline(cin, string name);

//stuff
string country;
cout << "Now please enter the country you are in at the moment:\n\n";
cin.ignore();
getline(cin, country);
//stuff
return 0;
于 2014-06-24T00:57:47.340 に答える
0

標準キーワードをローカル変数の名前として宣言したため、問題が発生しています。現在、ローカル変数は sting 型であるため、それを値として受け取ることはできません。

于 2013-10-15T19:17:35.627 に答える