如何在Vector中存储类指针?

时间:2017-05-05 13:21:02

标签: c++ vector

我有一个存储一些符号的类。

class SymbolInfo{   
public:
    string name;
    string type;
    string token;
    int num;
    char ch;
    float fl;   
    int arrSize;
    int array_index_holder;
    SymbolInfo *next;
    Function *func;
    SymbolInfo* myarray;
    SymbolInfo(){
        name="";
        type="";
        token="";
        next = NULL;
        arrSize = -1;
        array_index_holder = -1;

    }

    SymbolInfo(string name, string type){
        this->name = name;
        this->type = type;
        token="";
        next = NULL;
        arrSize = -1;
        array_index_holder = -1;


    }

    string getname(){
        return name;
    }

    void setname(string name){
        name = name;
    }

    string gettype(){
        return type;
    }

    void settype(string type){
        type = type;
    }




};

我想制作符号数组。所以我在Vector中使用这个类并创建了这个:

Vector<SymbolInfo*>array;

使用整数大小,我试图创建一个这样的数组:

SymbolInfo *s= table->LookUp($3->name);
$3->type = dataType;
    table->Insert($3->name, $3->type);
    s = table->LookUp($3->name);
    s->token = "ARRAY";
    int size = $5->num;
    for(int i=0;i<size;i++){
            array[i].push_back(*s);
    } 

$ 3和$ 5是SymbolInfo类型指针(YACC / BISON的指针) 执行此操作后,我收到此错误:

parser.y: In function ‘int yyparse()’:
parser.y:200:12: error: request for member ‘push_back’ in ‘array.std::vector<_Tp, _Alloc>::operator[]<SymbolInfo*, std::allocator<SymbolInfo*> >(((std::vector<SymbolInfo*>::size_type)i))’, which is of pointer type ‘SymbolInfo*’ (maybe you meant to use ‘->’ ?)
   array[i].push_back(*s);
            ^

我做错了什么?如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

如果数组是向量而不是只调用push_back。它会将元素放在向量的后面。如果使用[]运算符,它将计算引用向量中的项,在本例中为指向某些符号表信息的指针。如果你想在索引i的向量中存储一些东西,给定向量有一个索引i然后使用代码行

vector[i] = something;

答案 1 :(得分:0)

指针只调用s,向量称为array

所以:

array.push_back(s);

表达式array[i]为您提供了向量中已有的指针之一,表达式*s为您提供了s个点(它是取消引用操作)。