0

今日、私はC++を少し学び始め、簡単なコードで理解し始めましたが、これは私を混乱させます

#include <iostream>

using namespace std;

class MyVar
{

    public:
        MyVar(){
            cout << "this is constructor" << endl;
        }
        void accesscheckpass(string x){
            checkpass(x);
        }

    private:
        bool checkpass(string x){
            if(x == "password"){
                return true;
            }
        }
};

int main()
{
    int inputpass;
    cout << "please enter your password\n" << endl;
    cin >> inputpass;

    MyVar MyAccess;

    if(MyAccess.accesscheckpass(inputpass) == true){
        cout << "welcome user 1" << endl;
    }else{
        cout << "get lost !" << endl;
    }

}

ユーザーがパスワードを入力したときにユーザーを検証し、セクション IF をコンパイルするときに、コンパイラーは「「int」から「const char*」への無効な変換 [-fpermissive]|」というステータスを返します。 、誰かが私のコードを修復して、私が間違っていることを説明してください。

4

6 に答える 6

4

誰か私のコードを直してください

何が悪いのかを説明した後、自分で修復してみてください。私たちがあなたのコードを投稿するよりもはるかに多くのことを得ることができます。

私が間違っていることを説明してください

もちろん。このメソッドは as パラメータをaccesscheckpass想定してstd::stringいます (ところで#include <string>、ファイルの先頭に必要です)。あなたはそれを次のように呼びます

MyAccess.accesscheckpass(inputpass)

inputpassとして宣言されているint inputpass;ため、intではなくandstd::stringです。したがって、inputpassとして宣言stringするか、 を に変換する方法を見つける必要がintありstringます。(簡単なはず)

また、あなたの方法:

    bool checkpass(string x){
        if(x == "password"){
            return true;
        }
    }

条件が真の場合にのみ返されます。elseブランチも必要です。

    else
        return false;

または、さらに良いことに、結果を直接返します。

    bool checkpass(string x){
        return x == "password";
    }

そしてあなたの方法

    bool accesscheckpass(string x){
       return  checkpass(x);
    }

a も返す必要がboolあります。

于 2012-10-23T10:46:12.663 に答える
1
#include <iostream>
#include <string>

using namespace std;

class MyVar
{

    public:
        MyVar(){
            cout << "this is constructor" << endl;
        }

            bool accesscheckpass(string x){
            return checkpass(x);
        }

    private:
        bool checkpass(string x){

            if( x == "password" ){
                return true;
            }
            else
            return false;
        }
};

int main()
{
    string inputpass;
    cout << "please enter your password\n" << endl;
    cin >> inputpass;

    MyVar MyAccess;

    if( MyAccess.accesscheckpass(inputpass) == true ){
        cout << "welcome user 1" << endl;
    }else{
        cout << "get lost !" << endl;
    }

}

上記は修正された作業コードです。発見されたエラーは次のとおりです。

  1. 「'int' から 'const char*' [-fpermissive]| への無効な変換です。」パラメータが文字列型の引数である関数に int を渡すため、inputpass のデータ型が変更されています。
  2. accesscheckpass() は何も返さないので、checkpass() の戻り値を返しました。checkpass() は真の条件のみを処理するため、偽の条件が追加されます。
于 2012-10-23T11:53:18.930 に答える
0

これがコードです。これに必要なものです。これに最適なコードではありませんが、機能します。

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

class MyVar
{

public:
    MyVar(){
        cout << "this is constructor" << endl;
    }
    bool accesscheckpass(string x){
        return checkpass(x);
    }

private:
    bool checkpass(string x){
        string pass = "password";
        for(int i = 0; i < x.length();i++)
            if(x[i]!=pass[i])
                return false;
        return true;
    }
    };

    int main()
    {
string inputpass;
cout << "please enter your password\n" << endl;
getline(cin, inputpass);
MyVar MyAccess;

if(MyAccess.accesscheckpass(inputpass) == true){
    cout << "welcome user 1" << endl;
}else{
    cout << "get lost !" << endl;
}

}

于 2012-10-23T11:14:23.393 に答える
0

accesscheckpass(string x)bool を返す必要があります。

bool accesscheckpass(string x){
        return checkpass(x);
    }

また、inputpassタイプである必要がありますstd::string

于 2012-10-23T10:46:27.697 に答える
0

変化する:

int inputpass

string inputpass

パスワードは整数ではなく文字列です。

また、あなたのクラスはエラーでいっぱいです! おそらく次のようになります。

class MyVar
{

    public:
        MyVar(){
            cout << "this is constructor" << endl;
        }
        bool accesscheckpass(string x){
            return checkpass(x);
        }

    private:
        bool checkpass(string x){
            if(x == "password"){
                return true;
            }
            else
            {
                return false;
            }
        }
};
于 2012-10-23T10:47:54.957 に答える
-2

あなたはcharsフォームを読みますstd::cin。次に、これらの文字を整数に解析する必要があります。

于 2012-10-23T10:45:47.173 に答える