我是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此页面解释何时发生这种情况,唯一的解决方案是对象本身的转换。
如果是这样,我可能会以错误的方式处理整个问题。
我期待着您的提示和帮助。 非常感谢你。
答案 0 :(得分:1)
webapi::fuser
按User
值,但您在此处传递User*
:
wapi.fUser(this);
传递User
:
wapi.fUser(*this);
或更改webapi
以指向User
。