【发布时间】:2016-03-29 11:05:20
【问题描述】:
我有一个结构的构造函数,例如
struct MyStruct{
int age;
string name;
MyStruct_Two * link;
Mystruct( int age , string name , MyStruct_Two temp){
this -> age = age;
this -> name = name;
this -> link = temp;
}
}
我想做的是创建vector<MyStruct> v 来保存这些结构。但是每个结构都有指向另一个数组中另一个结构的指针。
我已经创建了一个函数来使它成为现实 =
vector<MyStruct> v
vector<MyStruct_Two> v_two
void AddStructToStruct( int age , string name ,vector<MyStruct> &v , vector <MyStruct_Two & v_two ){
MyStruct_Two temp( age , name ); // create struct
v.push_back( MyStruct( age , name , *temp ) ); // put pointer as arg
v_two.push_back( temp );
}
这会抛出:
错误:'operator*' 不匹配。
我试图把引用,甚至指向引用的指针。我在使用指针方面没有太多经验,所以我无法弄清楚如何清楚地做到这一点。
如何通过参数给指针赋值?
【问题讨论】:
-
我建议你尝试一些更简单的代码来更好地理解指针。删除模板和类。你的问题与那些无关。
-
你不能让
this -> link指向在堆栈上创建的东西 -MyStruct_Two temp( age , name );。一旦退出函数调用AddStructToStruct,temp将被销毁,this->link将指向无效的内存位置。您可以通过调用MyStruct_Two temp= new MyStruct_Two( age , name );在堆上创建MyStruct_Two,然后将指向temp 的指针传递给MyStruct的构造函数。请注意,您必须处理堆内存的删除。