我创建了一个对象,它将多维数组(网格)作为参数(char grid[][20]
),以及这些对象的向量(它将属于它)。
构造函数将成员变量char (*my_grid)[20]
分配给参数,以便对象函数可以更改原始网格。这已经有效 - 我可以将my_grid[x][y]
分配给不同的值,它会更改原始的'网格'。
我想创建一个成员函数,创建另一个新对象(在原始对象中),传递'my_grid'作为参数(新对象将被添加到原始对象向量中)。
但是,当我需要的时候,编译器说my_grid
是char(*Object::my_grid)[20]
char(*)[20]
。我不明白其中的区别。如何在对象成员函数中将网格作为参数传递,以创建新对象?感谢。
对象具有成员变量:char(* my_grid)[20];
构造函数:
Object::Object(char the_grid[][20], vector<Object>& the_objects)
{
my_grid = the_grid;
my_objects = &the_objects;
}
对象成员函数:
void Object::new_object()
{
Object second_object(my_grid, my_objects); //this doesn't work
}
答案 0 :(得分:1)
代码中明显的错误实际上与第二个构造函数参数有关。在Object::new_object()
内,您尝试将my_objects
传递给构造函数,这意味着my_objects
的类型为vector<Object>&
或vector<Object>
。但是,在构造函数中,您使用my_objects
初始化&the_objects
,这意味着my_objects
的类型为vector<Object> *
。这是自相矛盾的。
那么,my_objects
的声明类型是什么?
但是,在任何情况下,这都是构造函数的第二个参数的问题。您引用的错误消息是指第一个参数和my_grid
成员。到目前为止,您发布的代码的上下文中的错误消息没有任何意义。那里没有这样的错误。您的编译器坏了,您发布了假代码,或者您错误地引用了错误消息。
在任何情况下,尝试用第二个参数修复问题并看到它有帮助。
答案 1 :(得分:0)
char (*something)[20]
只是指向字符数组的常规指针。
char (*Object::something)[20]
是指向成员的指针类型。
这是一种说&#34;如果我们有Object
,那么它将在此位置有一个char[20]
类型的成员变量。&#34;它的用法如下:
class Object
{
public:
int a;
char b[20];
};
/* ... */
//Acquire the location of 'b' relative to any 'Object'
char (*Object::myPtrToMemberB)[20] = &Object::b;
int (*Object::myPtrToMemberA) = &Object::a;
Object x;
//Access member 'b' via ptr to member
x.*myPtrToMemberB[0] = 'b';
//Access member 'a' via ptr to member
x.*myPtrToMemberA = 127;