C++ 所需类型:将字符串作为参数传递给函数

C++ 所需类型:将字符串作为参数传递给函数,c++,qt,char,qstring,C++,Qt,Char,Qstring,大家好 注:我是C++的乞丐,我自己教自己,也道歉,如果这是一个复制品,但我没有找到一个例子/答案/教程回答问题,可能我只是不理解它。 我有一个函数,其标题和实现定义如下: 标题 #ifndef RETURNOBJECT_H #define RETURNOBJECT_H #include <QtCore> #include "enums.h" class ReturnObject { public: ReturnObject(); ReturnObject(Ret

大家好

注:我是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
请注意,我对指针等不太熟悉,但我对每个概念都有相当的理解

目的:

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

问题/问题/问题

#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;
}
使用以下命令调用类:

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, "");
                                                                                    ^
因此,我从错误中得出结论,第二个参数->
数据
是问题所在,因为我很可能没有在构造函数中正确定义此数据类型

我应该如何在构造函数中定义它?
使用哪种数据类型?据我所知,它确实具有
const
属性

我尝试过的:

我尝试使用
char
const char
QString
,这两种方法都会产生类似的错误

有什么建议吗

编译器输出

解决
const char*数据后

../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
       ^~~~~~~~~~~~

您可以将简单字符加载到字符类型(例如“a”)。如果需要字符串,则必须使用char*或std::string。 例如
char*data_string=“WARN”

您说您还不熟悉指针,因此我建议您不要对字符串使用
char*
(这是C风格的做法),因为它主要基于指针的概念

相反,使用
std::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
,只要
\u ReturnObject
的声明范围离开(即如果封闭类实例被销毁),实例就会被销毁

在您的情况下,该行仍将触发一个新错误,因为
new
返回的不是对象本身,而是指向该对象的指针,并且您正试图将该指针指定给非指针(
\u ReturnObject


另外,由于您使用的是我不太熟悉的Qt库,因此最好使用它的字符串实现
QString
。通过查看文档,我觉得您应该能够直接使用它来代替
std::string
<代码> STD::String 不过是每个C++编译器和平台都可以使用的标准库类型。

< P>这个错误来自您作为参数提供的对象类型。
ReturnObject
的构造函数的第二个参数是char,但是您给出了一个
“”
,它是一个空字符串(char数组,即“char*”)

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

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

ReturnObject(ReturnCode enum_code, const char data);

或者最好是

ReturnObject(ReturnCode enum_code, const QString data);

如果这样做,请不要忘记根据您的选择,通过
const char*data_string
QString data_string
更改标题中
const char data_string
的类型。同样,
const char getData()也应在头中替换为,而实现应替换为
const char*getData()
常量QString getData()

请仔细阅读构造函数定义,您有一个输入错误。另外,
\u ReturnObject
是一个实现保留标识符,请不要使用它。@BaummitAugen对不起,我不懂。您是否可能是指我忘记将
*
添加到
const char*数据中的可能性,如果是,那么我没有忘记,我刚才从给出的答案中了解到它的存在和意义(因此我还是C++新手),如果不是,那么请帮助我解释错误。谢谢,这就是我说的。如果你故意不提这个问题,你的问题是什么?@BaummitAugen我已经找到了我的答案,谢谢你的帮助,尽管我在这个问题上得了-2分,但肯定会有人觉得这个问题非常有帮助。再次感谢!所以char(来自java)指的是单个字符,那么char*是什么意思?char[]?char*指的是一个内存部分,就像c/c++中的每个指针一样。我想你刚开始在Java中工作C++,所以我可以建议你学习C++中的指针(因为java是两种语言之间最大的区别之一)。也许你也可以读一些关于智能指针的书,它是在c++11中引入的,提供了更安全的内存管理。抱歉,我需要更多的东西。
char
是如何指ReturnObject(ReturnCode enum_code, const QString data);