C2664无法在Qt C ++中将参数1从User * const转换为User

时间:2013-06-09 00:41:48

标签: c++ qt

我是C ++和Qt的新手,但我已经玩了几天了,我需要在星期五之前提出我的产品的基本原型,所以没有太多时间来转换我的7多年的PHP知识进入C ++知识,因为我确信掌握C ++需要一辈子的时间。由于关于小位和字节的不存在的知识,我在最近几天不时地陷入困境。这时我甚至不知道在互联网上寻找什么。

首先,我使用Qt作为我的框架来做一个简单的GUI网络客户端,可以与我的PHP应用程序通信。我想在这个应用程序中创建一个非常简单的WebAPI类,并使用类“webapi”。场景非常简单,用户启动应用程序,应用程序检查用户是否登录。如果没有,则打开登录对话框。在对话框中输入信息(用户名/密码)后,用户对象将被填充,并调用方法“authenticate”。

然后,authenticate方法调用webapi类中的fUser方法向服务器发出请求,其中包含一些信息以根据服务器的数据库对用户进行身份验证。

在代码中它看起来像这样: Savor.cpp:

user = new User();

    while ( user->isLoggedIn() != true )
    {
        LoginDialog loginWindow;
        loginWindow.setModal(true);
        int result = loginWindow.exec();
        if ( result == QDialog::Accepted )
        {
            user->authenticate(loginWindow.getUsername(), loginWindow.getPassword());

            if ( !user->isLoggedIn() )
            {
                loginWindow.setUsername(loginWindow.getUsername());
                loginWindow.exec();
            }
        }
        else
        {
            exit(1);//exit with code 1
        }
    }

User.cpp:

void User::authenticate(QString username, QString password)
{
    qDebug() << username;
    qDebug() << password;


    if ( username != "" && password != "")
    {

        webapi wapi;
        loggedIn = wapi.fUser(this);
    }
    else
    {
        loggedIn = false;
    }
}

webapi.cpp:

/**
  Represents the fUser method on the server,
  it wants to get a user object
  the user will need to be authenticated with this
  then all infos about user are transfered (RSA Keypair etc)
 * @brief webapi::fUser
 * @param username
 * @param password
 * @return User
 */
bool webapi::fUser(User baseUser)
{
    return true;
}

现在你可以清楚地看到我在webapi::fUser方法中没有做任何事情。事实上,我甚至没有回复我想要回归的东西。而不是布尔我想返回一个User对象,实际上与我通过参数获得的第一个相同。但是,当我这样做时,我得到一个复制构造函数错误。 (在我的savor.h文件中,我已将私有属性声明为指针=&gt; User *user;

所以问题是,当我调用fUser方法时,我做错了什么?为什么我不能简单地将用户对象本身传递给方法?我还没有完全理解const,指针以及何时使用什么。

使用Qt创建者我实际上使用MS Visual C ++编译器,它会在标题中抛出错误:

  

C2664'webapi :: fUser':无法将参数1从'User * const'转换为'User'

我已阅读http://msdn.microsoft.com/en-us/library/s5b150wd(v=vs.71).aspx此页面解释何时发生这种情况,唯一的解决方案是对象本身的转换。

如果是这样,我可能会以错误的方式处理整个问题。

我期待着您的提示和帮助。 非常感谢你。

1 个答案:

答案 0 :(得分:1)

webapi::fuserUser值,但您在此处传递User*

wapi.fUser(this);

传递User

wapi.fUser(*this);

或更改webapi以指向User