gpt4 book ai didi

c++ - 如何更改唯一指针 vector 的可见性

转载 作者:行者123 更新时间:2023-12-01 14:20:09 26 4
gpt4 key购买 nike

在 ONG 类中,我创建了一个添加函数,用于在参与者 vector 中添加参与者(主管、管理员、员工)。

std::vector<unique_ptr<Participant>> ls;

我试图将 vector 作为公共(public)变量置于函数之外,但没有成功

当我想在函数中添加一切正常时,但是当我将列表置于功能之外时,它会给我一个错误

class ONG : public Participant {
private:

public:
std::vector<unique_ptr<Participant>> ls;
ONG() = default;
void add(unique_ptr<Participant> part) {

part->tipareste();

ls.emplace_back(std::move(part));

for (const auto& i : ls) {
i->tipareste();
}

}
};

完整代码如下:

#include <iostream>
#include <assert.h>
#include <vector>
#include <memory>
#include <variant>
#define _CRTDBG_MAP_ALLOC
#include <cstdlib>
#include <crtdbg.h>

using namespace std;

struct AtExit
{
~AtExit() { _CrtDumpMemoryLeaks(); }
} doAtExit;


class Participant {

public:
virtual void tipareste() = 0;
bool eVoluntar = true;
virtual ~Participant() = default;
};
class Personal : public Participant {
private:
string nume;
public:
Personal() = default;
Personal(string n) :nume{ n } {}
void tipareste() override {
cout << nume;
}
};

class Administrator : public Personal {
public:
std::unique_ptr<Personal> pers;
Administrator() = default;
Administrator(Personal* p) : pers{ p } {}
void tipareste() override {
cout << "administrator ";
pers->tipareste();
}
};

class Director : public Personal {
public:
std::unique_ptr<Personal> pers;
Director() = default;
Director(Personal* p) : pers{ p } {}
void tipareste() override {
cout << "director ";
pers->tipareste();
}
};

class Angajat :public Participant {
public:
std::unique_ptr<Participant> participant;
Angajat() = default;
Angajat(Participant* p) : participant{ p } { this->eVoluntar = false; /*p->eVoluntar = false;*/ }
void tipareste() override {
cout << "anjajat ";
participant->tipareste();
}
};

class ONG : public Participant {
private:

public:

ONG() = default;
std::vector<unique_ptr<Participant>> ls;
void add(unique_ptr<Participant> part) {

ls.emplace_back(std::move(part));

}
};


int main() {


ONG* ong{};

std::unique_ptr<Participant> aba = std::unique_ptr<Personal>(new Personal("Will"));
ong->add(std::move(aba));


}

最佳答案

问题是 ONG 类是一个抽象类,因为它继承自具有纯虚函数的 Participant。

如果你定义

    void tipareste() {
//Do stuff
}

ONG 中(或在 ONG 继承的类中)然后将一个ONG对象赋给ONG指针

int main() {

std::shared_ptr<ONG> ong = std::make_shared<ONG> ();

std::unique_ptr<Participant> aba = std::unique_ptr<Personal>(new Personal("Will"));
ong->add(std::move(aba));

}

可以运行

关于c++ - 如何更改唯一指针 vector 的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62738817/

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