我是 C++ 和 Qt 的新手,但是我已经玩了几天了,我需要在星期五之前拿出我的产品的基本原型,所以没有太多时间来转换我 7 年的 PHP将知识转化为 C++ 知识,因为我确信掌握 C++ 需要一生的时间。由于不存在关于小比特和字节的知识,我在过去几天不时陷入困境。在这个时候,我什至不知道在互联网上寻找什么。
首先,我使用 Qt 作为我的框架来做一个简单的 GUI 网络客户端,它可以与我的 PHP 应用程序对话。我想在这个应用程序中创建一个非常简单的 WebAPI 类并拥有“webapi”类。场景非常简单,用户启动应用程序,应用程序检查用户是否登录。如果没有,那么它会打开一个登录对话框。在对话框中输入信息(用户名/密码)后,用户对象被填充并调用“authenticate”方法。
然后,authenticate 方法调用fUser
webapi 类中的方法向服务器发出请求,该服务器持有一些信息,以根据服务器的数据库对用户进行身份验证。
在代码中它看起来像这样: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此页面解释了何时发生这种情况,唯一的解决方案是对象本身的转换。
如果是这样,我可能会以错误的方式处理整个问题。
我期待您在此问题上的提示和帮助。非常感谢。