我在程序中定义了一个指向二维数组的指针,二维数组的元素是Block*型别.
Block* (*blockArray)[10];
然后,我想把blockArray指针做实参传入方法void initializeBlock(XXXX blockArray);
(先假设XXXX为一个指向二维数组的指针型别)
但是我不晓得怎么申明这个参数,于是,我想用typedef来转化下.
写成:
typedef Block *(*BLOCKARRAY)[10];
再申明该方法为:
void initializeBlock(BLOCKARRAY blockArray);
8 个解决方案
typedef Block** BLOCKARRAY;
void initializeBlock(BLOCKARRAY blockArray);
to bluejugar(小艳)
这样的做法还是不行.
编译器(VC6)报错:
error C2061: syntax error : identifier 'BLOCKARRAY'
error C2511: 'initializeBlock' : overloaded member function 'void (class Block ** )' not found in 'Console'
而我自己的做法报错信息为:
error C2061: syntax error : identifier 'BLOCKARRAY'
error C2511: 'initializeBlock' : overloaded member function 'void (class Block *(*)[10])' not found in 'Console'
虽然blockArray的地址都是一样的,可是地址实际上代表的数据类型不同.所以在C++中是不能赋值的,(C++是强类型检测语言)
typedef Block* BLOCKARRAY;
to :hcj2002(流浪者)
---> typedef Block* BLOCKARRAY;
应该只是说明BLOCKARRAY是一个可以定义Block*型别的类型.但是该型别的指针跟一个指向指向二维数组的指针的型别是不同的. 你同意我的看法吗?
所以, 我在传一个不同型别的实参到先前定义的方法中时,编译器会找不到我重载实参型别的方法而报错,而实际上, 是我不知道如何去定义一个跟实参型别相同的形参,而造成的错误.
typedef Block *(*BLOCKARRAY)[10];
这个typedef好像没什么问题啊。
to : pacman2000(pacman)(影子传说)
我也认为自己没有错,可是我使用的是VC6编译器, 而它在编译的时候报错:
error C2061: syntax error : identifier 'BLOCKARRAY'
error C2511: 'initializeBlock' : overloaded member function 'void (class Block *(*)[10])' not found in 'Console'
第一个就是句法错误,标识符"BLOCKARRAY"有误? 我实在是想不通.
希望大家能给我更好的做法.
我知道我错在哪里了.
写成:
typedef Block *(*BLOCKARRAY)[10]; 这样确实没有错. typedef的定义是正确的.
再申明该方法为:
void initializeBlock(BLOCKARRAY blockArray);
也是正确的.
只是我把typedef Block *(*BLOCKARRAY)[10];写在了.cpp文件中, 所以在方法申明(在.h)的时候找不到BLOCKARRAY 类型的.
谢谢大家帮忙了.