您好我一直在尝试从类中返回一个对象,但出于某种原因,每当我尝试返回它时,它都会失败,但所有其他周围的代码都能正常工作。
emp.h
class drvr{
private:
string title;
string empname;
public:
drvr(string titlez, string name){
title = titlez;
empname = name;
}
node.h
class node{
private:
drvr edata(string, string);
node * next;
public:
node(emp rec){
edata(rec);
next = NULL;
}
drvr getData(){
return edata;
}
我收到错误:
无法转换节点::数据'来自类型' drve(node ::)(int, std :: __ cxx11 :: string){aka drvr(node ::)(int, 的std :: __ cxx11 :: basic_string的)}'输入' drvr' |
答案 0 :(得分:0)
您将edata
声明为类node
的成员函数,它接受类型为std::string
的两个参数并返回drvr
对象,但在getData
内正在返回该函数的地址,因此编译器会告诉您所返回的对象的类型与预期此方法作为类型返回的内容并不多,显然这不是您想要做的。我可以从代码中看到您正在对linked-list
进行编码,因此edata
应该是drvr
类型,并且应该像这样定义:
drvr edata;
要设置该属性的值,您可以向node
添加方法:
void setEdata(const drvr & d )
{
this->edata = d;
}
或
void setEdata(const std::string & title,const std::string & empname )
{
this->edata = drvr(title,empname);
}
答案 1 :(得分:0)
当您说drvr edata(string, string);
时,您确实声明了一个名为edata
的函数,该函数返回drvr
并且需要两个string
。
要使用string
初始化变量,请使用{}
。
drvr edata{"hello", "world"};
答案 2 :(得分:0)
像这样使用:
class drvr {
private:
string title;
string empname;
public:
drvr(string titlez, string name) {
title = titlez;
empname = name;
}
drvr(const drvr& other)
{
title = other.title;
empname = other.empname;
}
};
class node {
private:
drvr edata;
node * next;
public:
node(const drvr& rec)
:edata(rec)
{
next = nullptr;
}
drvr getData()
{
return edata;
}
};