C++ 所需类型:将字符串作为参数传递给函数
大家好 注:我是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
#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()分别为code>。请仔细阅读构造函数定义,您有一个输入错误。另外,\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);