type required:将字符串作为参数传递给函数
type required : Passing String as parameter to function
大家好
注意:我是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, "");
^
因此,我从错误中得出结论,第二个参数-> ""
或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*
(这是c风格的做法),因为它在很大程度上基于指针的概念。
请先使用#include<string>
,然后再使用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
,则只要离开_ReturnObject
的声明范围,实例就会被销毁(即,如果封闭的类实例被销毁)。
在你的例子中,这一行将触发一个新的错误,因为new
返回的不是对象本身,而是指向它的指针,而你试图将该指针赋值给一个非指针(_ReturnObject
)。
也因为你正在使用Qt库,我不是很熟悉,它可能更好地使用它的字符串实现QString
。从查看文档,在我看来,你应该能够使用它直接代替std::string
。然而,std::string
是标准库类型,它总是适用于每个c++编译器和平台。
您可以将一个简单的字符加载到char类型中(例如:"一个")。如果你想要一个字符串,你必须使用char*或std::string。如。
此错误来自于您作为参数提供的对象类型。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);
如果您这样做,不要忘记根据您的选择在标题中通过const char * data_string
或QString data_string
更改const char data_string
的类型。同样的,const char getData();
也应该在头中被替换,const char * getData();
或const QString getData();
分别实现。
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 修改函数中的指针(将另一个指针作为参数传递)
- 将成员函数指针作为参数传递给模板方法
- 如何在C++中将迭代器作为函数参数传递
- 将附加参数传递给使用 beast::bind_front_handler 调用的函数
- 如何将一个类的函数作为另一个类的另一个函数的参数传递
- 如何传递带有通过引用传递的结构参数的函数?
- 如何在 c++ 中将函数作为参数传递?
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 将参数打包的参数传递到 std::queue 中,以便稍后使用不同的函数调用
- 为什么我不能将引用作为 std::async 的函数参数传递
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 将__device__ lambda 作为参数传递给 __global__ 函数
- 是否可以在不填充自己的参数的情况下将模板函数作为参数传递?
- 如何将成员函数作为参数传递并在派生对象上执行方法列表
- 将函数作为参数传递以避免重复代码
- 如何在类(C )中作为参数传递函数