gpt4 book ai didi

c++ - 如果对象没有默认构造函数并且我不允许在其类定义中创建一个对象,我该如何将对象放入节点中?

转载 作者:行者123 更新时间:2023-11-30 00:39:37 26 4
gpt4 key购买 nike

我想立即指出,我已经搜索了该网站,但没有发现类似的问题。有人质疑有人无法将对象放入节点,但我的问题是:

我不能将对象放入节点中,并且不允许为该对象创建默认构造函数(至少不能在其类定义中)

更具体地说:

我得到了以下雇主类:

class Employer
{
public:

Employer(string x, int a, int b, int c);

string getname() const { return name; }

private:
string name;
int age, sal, hire;
};

Employer::Employer(string x, int a, int b, int c) : name(x), age(a), sal(b), hire(c) { }

如您所见,此类没有默认构造函数,我不允许创建一个(这些是规则..!)

我创建了以下节点类:

class Node
{
public:
Employer emp;
Node* link;
Node(Employer);
};

Node::Node(Employer x)
{
emp= x;
link=NULL;
}

如您所见,我想创建一个 Node 类,其中包含一个节点指针和一个对象 Employer。

不幸的是,这不起作用。我不断收到以下错误消息:

E2279: 找不到默认构造函数来初始化成员......

基本上发生的事情是因为 Employer 类没有默认构造函数“Employer emp;” Node 类中的代码不会被编译器“识别”,因为如果它是“int n”而不是“Employer emp”,它就会被编译器“识别”。

所以我的问题是:

如何在不向类 Employer 更改/添加任何内容的情况下将对象 Employer 放入节点(即我不能向类 Employer 添加默认构造函数,也不能添加“ friend 类节点”之类的东西,规则我是否应该按原样离开 Employer 类)

因为我是编程新手,所以我想补充一点,我还没有学过模板,所以我不能使用任何模板,只能使用我已经给你的工具(类、函数、指针..等)

最佳答案

为初始化列表中的 Employer 成员提供显式构造函数调用:

class Node
{
public:
Employer emp;
Node* link;
Node(Employer e) : emp(e) { }
};

在这个例子中,我选择使用 copy 构造函数,您没有为 Employer 显式定义它,但无论如何它都存在。通常,您更愿意通过 const-reference 获取参数:

Node::Node(Employer const & e) : emp(e), link(NULL) { }

您还可以提供额外的构造函数,例如:

Node::Node(std::string const & s, int d) : emp(s, 12, d, 24), link(NULL) { }

(在构造函数 body 中放置的越少越好。)

关于c++ - 如果对象没有默认构造函数并且我不允许在其类定义中创建一个对象,我该如何将对象放入节点中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8326642/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com