type required:将String作为参数传递给函数

时间:2016-10-12 23:22:06

标签: c++ qt char qstring

美好的一天

注意:我是c ++的初学者,在我一起教我自己,如果这是重复的话也道歉,但我没有找到一个示例/答案/教程来回答问题,可能我只是不了解它。

我有一个带头和下面定义的实现的函数:

标题

#ifndef RETURNOBJECT_H
#define RETURNOBJECT_H

#include <QtCore>
#include "enums.h"

class ReturnObject
{
public:
    ReturnObject();
    ReturnObject(ReturnCode enum_code, const char data);

    const char getData();
    ReturnCode getCode();

private:
    ReturnCode e_code;
    const char data_string;

};

#endif // RETURNOBJECT_H

实施

#include "returnobject.h"

ReturnObject::ReturnObject(){
    data_string="WARN";
}

ReturnObject::ReturnObject(ReturnCode enum_code, const  char data)
    : e_code(enum_code)
    , data_string(data)
{}

ResultCode ReturnCode::getCode()
{
    return e_code;
}

const char ReturnObject::getData()
{
    return data_string;
}

请注意,我不像我应该那样熟悉指针等,但我对每个概念都有一个公平的理解。

目的:

此对象由自定义类函数创建,存储在类中并返回到父类。该对象包含一个自定义exec()返回值和类中可能的输出消息/数据(我创建了这个,因为对QDialog.setResult()的限制只允许exec()返回结果为1或0)。

问题/问题/问题

用以下方式调用该类:

Private
    ReturnObject _ReturnObject;

_ReturnObject = new ReturnObject(ReturnCode::LoginDialog_EmptyLoginPass, "");

提供以下错误:

/home/cx/qt-projects/project-i/loginstatusdialog.cpp:21: error: invalid conversion from 'const char*' to 'char' [-fpermissive]
         _ReturnObject = new ReturnObject(ReturnCode::LoginDialog_EmptyLoginPass, "");
                                                                                    ^

因此,我从错误中得出第二个参数 - &gt; ""data是问题,因为我很可能没有在构造函数中正确定义此数据类型。

我应该如何在构造函数中定义它?,而不是""使用哪种数据类型?据我了解,它确实需要const属性。

我尝试了什么:

我尝试过使用charconst charQString这两种错误。

有什么建议吗?

编译器输出

解决const char * data

后的

../project-i/loginstatusdialog.cpp: In constructor 'LoginStatusDialog::LoginStatusDialog(QString, QString, QString*, QWidget*)':
../project-i/loginstatusdialog.cpp:21:44: error: use of deleted function 'ReturnObject& ReturnObject::operator=(ReturnObject&&)'
         _Return_Object = ReturnObject(1, "");
                                            ^
In file included from ../project-i/loginstatusdialog.h:10:0,
                 from ../project-i/loginstatusdialog.cpp:1:
../project-i/returnobject.h:7:7: note: 'ReturnObject& ReturnObject::operator=(ReturnObject&&)' is implicitly deleted because the default definition would be ill-formed:
 class ReturnObject
       ^~~~~~~~~~~~

3 个答案:

答案 0 :(得分:2)

你说你还不熟悉指针,所以我建议你不要使用char*来表示字符串(这是C风格),因为它主要基于指针的概念。

首先使用std::string #include<string>。这是一种表现得更友好的类型:

std::string data_string;

ReturnObject::ReturnObject(ReturnCode enum_code, std::string data)

std::string ReturnObject::getData()

您的代码将被编译。

const char只是一个单个字符和一个常量(不可变)。这可能不是你想要的。

如果您不熟悉指针,也没有理由使用动态分配(new)。相反,只需将其删除即可获得静态分配:

_ReturnObject = ReturnObject(ReturnCode::LoginDialog_EmptyLoginPass, "");

new表示您希望创建的实例保持活动状态,直到您在指向它的指针上调用delete,该指针可以位于程序的任何位置。

如果没有new,则只要保留_ReturnObject声明的范围(即如果封闭的类实例被销毁),实例将被销毁。

在你的情况下,该行无论如何都会触发一个新的错误,因为new不返回对象本身,而是返回指向它的指针,并且你试图将该指针指向非指针(_ReturnObject

此外,由于您使用的是我不熟悉的Qt库,因此最好使用其字符串实现QString。通过查看文档,在我看来,您应该能够直接在std::string使用它。 std::string但是标准库类型始终可用于每个C ++编译器和平台。

答案 1 :(得分:0)

您可以将简单字符加载到字符类型中(例如&#39; a&#39;)。如果你想要一个字符串,你必须使用char *或std :: string。 例如 char * data_string =&#34;警告&#34 ;;

答案 2 :(得分:0)

此错误来自您作为参数提供的对象类型。 ReturnObject的构造函数的第二个参数是char,但是你给了一个"",这是一个空字符串(一个char数组,即&#34; char *&#34;)

如果您编写''而不是"",您的程序将编译为''用于表示空char。但我不确定这是你需要实现的......

如果你想要ReturnObject构造函数的第二个参数是一个字符串,那么你应该替换原型

ReturnObject(ReturnCode enum_code, const char data);

通过

ReturnObject(ReturnCode enum_code, const char * data);

或更好

ReturnObject(ReturnCode enum_code, const QString data);

如果您这样做,请不要忘记根据您的选择在标题中更改const char data_stringconst char * data_string的{​​{1}}类型。同样,QString data_string也应分别在标题和实现中替换const char getData();const char * getData();