0

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

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

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

在代码中它看起来像这样: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
        }
    }

用户.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方法中没有做任何事情。事实上,我什至没有退回我想退回的东西。我想返回一个用户对象,而不是布尔值,实际上与我最初通过参数获得的对象相同。但是,当我这样做时,我得到了一个复制构造函数错误。(在我的savor.h文件中,我已将私有属性声明为指针 => User *user;

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

使用 Qt creator 我实际上使用了 MS Visual C++ 编译器,它会抛出标题中的错误:

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

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

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

我期待您在此问题上的提示和帮助。非常感谢。

4

1 回答 1

1

webapi::fuser takes a User by value, but you are passing it a User* here:

wapi.fUser(this);

Either pass a User:

wapi.fUser(*this);

or change webapi to take a pointer to User.

于 2013-06-09T00:46:42.353 回答