C ++ - 在布尔值中返回值然后验证它

时间:2012-10-23 10:43:21

标签: c++

今天我开始学习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 ] |“,请有人修理我的代码并解释我错了什么?

6 个答案:

答案 0 :(得分:4)

  

请有人修理我的代码

在我们解释错误之后,尝试自己修复它。你可以从中获得比我们发布你的代码更多的东西。

  

解释我错了什么

不确定。方法accesscheckpass需要std::string作为参数(顺便说一下,您需要在文件顶部#include <string>)。你把它称为

MyAccess.accesscheckpass(inputpass)

inputpass被声明为int inputpass;,因此它是int,而不是std::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);
    }

也应该返回bool

答案 1 :(得分: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()只处理真实情况,因此添加了虚假的伪造。

答案 2 :(得分:0)

accesscheckpass(string x)应该返回bool。

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

此外,inputpass的类型应为std::string

答案 3 :(得分: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;
            }
        }
};

答案 4 :(得分: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;
}

}

答案 5 :(得分:-2)

你读了std::cin字符。您需要将这些字符解析为整数。