gpt4 book ai didi

c++ - 访问映射中元素的成员,其值为 C++ 中的抽象基类

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:23 25 4
gpt4 key购买 nike

英文说明:我要访问名为foo的成员(member)来自键为 "bar" 的元素来自std::map<string, Parent *>其中 Parent是一个抽象基类。

代码:

#include <map>
#include <string>
#include <iostream>

using namespace std;

class Parent {
public:
virtual ~Parent() {}
};

class Child: public Parent {
public:
Child(): var(2) {}
int var;
};

int main() {
map<string, Parent *> children;
children["bar"] = new Child;
cout << children["bar"]->var << endl; // Erroneous line
cout << children.find("bar")->second->var << endl; // Different method, still gives the same error
return 0;
}

错误: ‘class Parent’ has no member named ‘var’ .

我也尝试过使用 boost::ptr_map相反。

int main() {
boost::ptr_map<string, Parent> children;
string key = "bar";
children.insert(key, new Child);
cout << children.find(key)->second->var << endl; // Same error :(
return 0;
}

最佳答案

您不能使用 Parent 指针访问 var,因为 Parent::var 不是一个东西。相反,试试这个:

class Parent {
public:
virtual ~Parent() {}
virtual int getVar() const = 0;
};

class Child: public Parent {
public:
Child(): var(2) {}
virtual int getVar() const { return var; }
private:
int var;
};

int main() {
map<string, Parent *> children;
children["bar"] = new Child;
cout << children["bar"]->getVar() << endl; // Erroneous line
}

关于c++ - 访问映射中元素的成员,其值为 C++ 中的抽象基类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17501986/

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