我有一个存储一些符号的类。
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);
^
我做错了什么?如何解决这个问题?
答案 0 :(得分:1)
如果数组是向量而不是只调用push_back。它会将元素放在向量的后面。如果使用[]运算符,它将计算引用向量中的项,在本例中为指向某些符号表信息的指针。如果你想在索引i的向量中存储一些东西,给定向量有一个索引i然后使用代码行
vector[i] = something;
答案 1 :(得分:0)
指针只调用s
,向量称为array
。
所以:
array.push_back(s);
表达式array[i]
为您提供了向量中已有的指针之一,表达式*s
为您提供了s
个点(它是取消引用操作)。