C++继承,无法访问继承的元素。

问题描述 投票:0回答:1
class SymbolNode {
    public:
        string name;
        Type type;
        int offset;
        SymbolNode(string name_, Type type_, int offset_): name(name_), type(type_), offset(offset_) {
        }
    };

class FuncNode : public SymbolNode {
    public:
        Type returnType;
        vector<Type> entries;
        FuncNode(string name_, Type type_, int offset_,Type returnType,vector<Type> entries):
                SymbolNode(name_,type_,offset_) ,returnType(returnType),entries(entries) {}
    };   

所以我有一个继承了基类SymbolNode的FuncNode类。当我试图访问 乐趣 我不能访问所有的人。我想添加 乐趣 向量 符号. 但也有能力访问所有的元素。

std::shared_ptr<SymbolNode> func= make_shared<FuncNode>("inc",FUNC,1,INT,entries);
vector<std::shared_ptr<SymbolNode>> Symbols;
c++ pointers
1个回答
0
投票

试试 动态caststatic_cast


0
投票
std::shared_ptr<SymbolNode> func= make_shared<FuncNode>("inc",FUNC,1,INT,entries);

在上行。func 是一个指向基类的(共享)指针。 因此,它不知道它的派生类型是什么this。 因此,它不能访问成员的 FuncNode

你可以这样表达。

std::shared_ptr<FuncNode> func= make_shared<FuncNode>("inc",FUNC,1,INT,entries);

或者这样做。

std::shared_ptr<SymbolNode> symnode = make_shared<FuncNode>("inc",FUNC,1,INT,entries);

std::shared_ptr<FuncNode> func = static_pointer_cast<FuncNode>(symnode);
© www.soinside.com 2019 - 2024. All rights reserved.