试图从另一个类C ++返回一个类对象

时间:2018-03-08 14:47:53

标签: c++ linked-list

您好我一直在尝试从类中返回一个对象,但出于某种原因,每当我尝试返回它时,它都会失败,但所有其他周围的代码都能正常工作。

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' |

3 个答案:

答案 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;
    }
};