char(*)[20]如何与char(* Object :: variable)[20]不同?

时间:2014-09-23 14:37:45

标签: c++ arrays

我创建了一个对象,它将多维数组(网格)作为参数(char grid[][20]),以及这些对象的向量(它将属于它)。

构造函数将成员变量char (*my_grid)[20]分配给参数,以便对象函数可以更改原始网格。这已经有效 - 我可以将my_grid[x][y]分配给不同的值,它会更改原始的'网格'。

我想创建一个成员函数,创建另一个新对象(在原始对象中),传递'my_grid'作为参数(新对象将被添加到原始对象向量中)。

但是,当我需要的时候,编译器说my_gridchar(*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
}  

2 个答案:

答案 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;