所需类型:将字符串作为参数传递给函数
type required : Passing String as parameter to function
大家好
注意:我是 c++ 的初学者,边学边自学,如果这是重复的,也很抱歉,但我还没有找到 example/answer/tutorial 来回答问题,可能就是没看懂
我有一个 header 的函数,其实现定义如下:
Header
#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;
}
请注意,我不太熟悉指针等,但我对每个概念都有一定的了解。
用途:
此 object 由自定义 class 函数创建,存储在 class 中并 returned 到 parent class . object 包含一个自定义的 exec()
return 值和 class 的可能输出 message/data (我创建了这个,因为对例如 QDialog.setResult()
只允许 exec()
return 结果为 1 或 0).
Issue/Problem/Question
使用以下方式调用 class:
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, "");
^
因此,我从错误中得出结论,第二个参数 -> ""
或 data
是问题所在,因为我很可能没有在构造函数中正确定义此数据类型。
我应该如何在构造函数中定义它?,而不是 ""
使用哪种数据类型?据我了解,它确实采用 const
属性.
我试过的:
我尝试使用 char
、const char
、QString
两者都给出了类似的错误。
有什么建议吗?
编译器输出
解决后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
^~~~~~~~~~~~
您可以将一个简单的字符加载到 char 类型中(例如 'a')。如果你想要一个字符串,你必须使用 char* 或 std::string。
例如
字符* data_string = "WARN";
你说你还不熟悉指针,所以我建议你不要对字符串使用 char*
(这是 C 风格的做法),因为它很大程度上基于概念指针。
请改为使用 std::string
,为此您必须先 #include<string>
。它是一种 class 类型,表现得更加友好:
std::string data_string;
ReturnObject::ReturnObject(ReturnCode enum_code, std::string data)
std::string ReturnObject::getData()
您的代码将编译。
const char
只是 one 单个字符,也是一个常量(不可变)。这可能不是你想要的。
如果您不熟悉指针,您也没有理由使用动态分配 (new
)。而只是放下它以获得静态分配:
_ReturnObject = ReturnObject(ReturnCode::LoginDialog_EmptyLoginPass, "");
new
表示您希望创建的实例保持活动状态,直到您在指向它的指针上调用 delete
,该指针可以在程序中的任何位置。
如果没有 new
,实例将在 _ReturnObject
的声明范围离开时立即被销毁(即,如果封闭的 class 实例被销毁)。
在你的情况下,该行无论如何都会触发一个新错误,因为 new
returns 不是对象本身而是指向它的指针,而你正试图将该指针分配给非指针( _ReturnObject
).
另外由于你使用的是Qt库,我不是很熟悉,使用它的字符串实现可能会更好QString
。通过查看文档,在我看来您应该能够直接使用它来代替 std::string
。 std::string
但是,标准库类型始终适用于每个 C++ 编译器和平台。
此错误来自您作为参数提供的 object 类型。 ReturnObject
的构造函数的第二个参数是一个char,但是你给的是一个""
,它是一个空字符串(char的数组,即一个"char *")。
如果你写 ''
而不是 ""
,你的程序将编译为 ''
用于指示空字符。但我不确定这是否是您需要实施的...
如果你想让ReturnObject
构造函数的第二个参数是一个字符串,那么你应该替换原型
ReturnObject(ReturnCode enum_code, const char data);
来自
ReturnObject(ReturnCode enum_code, const char * data);
或更好
ReturnObject(ReturnCode enum_code, const QString data);
如果您这样做,请不要忘记根据您的选择在 header 中将 const char data_string
的类型更改为 const char * data_string
或 QString data_string
。同样,const char getData();
也应该在 header 和实现中分别替换为 const char * getData();
或 const QString getData();
。
大家好
注意:我是 c++ 的初学者,边学边自学,如果这是重复的,也很抱歉,但我还没有找到 example/answer/tutorial 来回答问题,可能就是没看懂
我有一个 header 的函数,其实现定义如下:
Header
#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;
}
请注意,我不太熟悉指针等,但我对每个概念都有一定的了解。
用途:
此 object 由自定义 class 函数创建,存储在 class 中并 returned 到 parent class . object 包含一个自定义的 exec()
return 值和 class 的可能输出 message/data (我创建了这个,因为对例如 QDialog.setResult()
只允许 exec()
return 结果为 1 或 0).
Issue/Problem/Question
使用以下方式调用 class:
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, "");
^
因此,我从错误中得出结论,第二个参数 -> ""
或 data
是问题所在,因为我很可能没有在构造函数中正确定义此数据类型。
我应该如何在构造函数中定义它?,而不是 ""
使用哪种数据类型?据我了解,它确实采用 const
属性.
我试过的:
我尝试使用 char
、const char
、QString
两者都给出了类似的错误。
有什么建议吗?
编译器输出
解决后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
^~~~~~~~~~~~
您可以将一个简单的字符加载到 char 类型中(例如 'a')。如果你想要一个字符串,你必须使用 char* 或 std::string。 例如 字符* data_string = "WARN";
你说你还不熟悉指针,所以我建议你不要对字符串使用 char*
(这是 C 风格的做法),因为它很大程度上基于概念指针。
请改为使用 std::string
,为此您必须先 #include<string>
。它是一种 class 类型,表现得更加友好:
std::string data_string;
ReturnObject::ReturnObject(ReturnCode enum_code, std::string data)
std::string ReturnObject::getData()
您的代码将编译。
const char
只是 one 单个字符,也是一个常量(不可变)。这可能不是你想要的。
如果您不熟悉指针,您也没有理由使用动态分配 (new
)。而只是放下它以获得静态分配:
_ReturnObject = ReturnObject(ReturnCode::LoginDialog_EmptyLoginPass, "");
new
表示您希望创建的实例保持活动状态,直到您在指向它的指针上调用 delete
,该指针可以在程序中的任何位置。
如果没有 new
,实例将在 _ReturnObject
的声明范围离开时立即被销毁(即,如果封闭的 class 实例被销毁)。
在你的情况下,该行无论如何都会触发一个新错误,因为 new
returns 不是对象本身而是指向它的指针,而你正试图将该指针分配给非指针( _ReturnObject
).
另外由于你使用的是Qt库,我不是很熟悉,使用它的字符串实现可能会更好QString
。通过查看文档,在我看来您应该能够直接使用它来代替 std::string
。 std::string
但是,标准库类型始终适用于每个 C++ 编译器和平台。
此错误来自您作为参数提供的 object 类型。 ReturnObject
的构造函数的第二个参数是一个char,但是你给的是一个""
,它是一个空字符串(char的数组,即一个"char *")。
如果你写 ''
而不是 ""
,你的程序将编译为 ''
用于指示空字符。但我不确定这是否是您需要实施的...
如果你想让ReturnObject
构造函数的第二个参数是一个字符串,那么你应该替换原型
ReturnObject(ReturnCode enum_code, const char data);
来自
ReturnObject(ReturnCode enum_code, const char * data);
或更好
ReturnObject(ReturnCode enum_code, const QString data);
如果您这样做,请不要忘记根据您的选择在 header 中将 const char data_string
的类型更改为 const char * data_string
或 QString data_string
。同样,const char getData();
也应该在 header 和实现中分别替换为 const char * getData();
或 const QString getData();
。