将 Image*[3] 传递给 const Image*[3] 不能用 const_cast<Image*[3]>,替代方案?
Passing Image*[3] to const Image*[3] cannot be done with const_cast<Image*[3]>, alternatives?
我有一个函数,它接受一组指向不会被修改的图像的指针,定义为:
void processImg( const Image *myImgs[NUM_IMAGES] );
我想传入一个非const
类型。我希望需要这样做,但这是非法的(VS2010 说不允许):
Image *imgsToProcess[NUM_IMAGES];
// ...fill in imgsToProcess
processImg( const_cast<Image*[NUM_IMAGES]>(imgsToProcess) );
我也试过:
processImg( const_cast<Image*[]>(imgsToProcess) ); //'const_cast' : cannot convert from 'Image *[3]' to 'Image *[]'
processImg( const_cast<Image**>(imgsToProcess) ); //'processImg' : cannot convert parameter 1 from 'Image **' to 'const Image *[]'
然后我更改了函数和数组定义并做了:
void processImg( const Image **myImgs, int numImages );
...
Image **imgsToProcess;
// ...fill in imgsToProcess
processImg( const_cast<Image**>(imgsToProcess), NUM_IMAGES );
令我惊讶的是,我仍然收到此错误消息:
'processImg' : cannot convert parameter 1 from 'Image **' to 'const Image **'
我做错了什么,是否可以像我的第一个定义那样用 const Image *myImgs[NUM_IMAGES]
来完成这个?
你想要:
processImg(const_cast<const Image **>(imgsToProcess));
问题本质上是您的 const_cast
没有转换为 const
。
您可能希望 const_cast 将您的对象转换为您传递给它的类型的 const
版本。但这不是 const_cast
的工作方式。
相反,您需要指定 确切的类型 对象应该被转换成。
所以如果你想
Image **
将投射到
const Image **
写成
const_cast<const Image**>(imgsToProcess);
我有一个函数,它接受一组指向不会被修改的图像的指针,定义为:
void processImg( const Image *myImgs[NUM_IMAGES] );
我想传入一个非const
类型。我希望需要这样做,但这是非法的(VS2010 说不允许):
Image *imgsToProcess[NUM_IMAGES];
// ...fill in imgsToProcess
processImg( const_cast<Image*[NUM_IMAGES]>(imgsToProcess) );
我也试过:
processImg( const_cast<Image*[]>(imgsToProcess) ); //'const_cast' : cannot convert from 'Image *[3]' to 'Image *[]'
processImg( const_cast<Image**>(imgsToProcess) ); //'processImg' : cannot convert parameter 1 from 'Image **' to 'const Image *[]'
然后我更改了函数和数组定义并做了:
void processImg( const Image **myImgs, int numImages );
...
Image **imgsToProcess;
// ...fill in imgsToProcess
processImg( const_cast<Image**>(imgsToProcess), NUM_IMAGES );
令我惊讶的是,我仍然收到此错误消息:
'processImg' : cannot convert parameter 1 from 'Image **' to 'const Image **'
我做错了什么,是否可以像我的第一个定义那样用 const Image *myImgs[NUM_IMAGES]
来完成这个?
你想要:
processImg(const_cast<const Image **>(imgsToProcess));
问题本质上是您的 const_cast
没有转换为 const
。
您可能希望 const_cast 将您的对象转换为您传递给它的类型的 const
版本。但这不是 const_cast
的工作方式。
相反,您需要指定 确切的类型 对象应该被转换成。
所以如果你想
Image **
将投射到
const Image **
写成
const_cast<const Image**>(imgsToProcess);