typedef struct {
unsigned int width;
unsigned int height;
PBYTE pixels;
} PBYTEImage;
void someFunction(const PBYTEImage& inputImage)
{
for (unsigned int x = 0; x < inputImage.width*inputImage.height; x++)
{
unsigned char y = *(inputImage.pixels);
-> inputImage.pixels += 1;
}
}
Error: expression must be a modifiable value
我是否修改了PBYTE的内容?我以为inputImage.pixels += 1;
只会将指针PBYTE
推进到下一个值......这是正确的吗?
想要什么:
结构的内容不应由函数
该函数应该能够读取结构,并在读取数据时推进指针PBYTE
我认为我不能将struct中的项目作为const,因为调用者必须分配它们的值。
最好的方法是什么?
void someFunction(const PBYTEImage* inputImage)
具有相同的效果..似乎const适用于不允许我修改其指针的结构,包括指针指向的值......
我是否必须丢弃常量?有没有办法证明该功能不会修改数据?
修改:PBYTE
是
typedef unsigned char BYTE;
typedef BYTE near *PBYTE;
在minwindef.h
或windef.h
很抱歉没有提到它
答案 0 :(得分:2)
我是否必须丢弃常量?有没有办法证明该功能不会修改数据?
实际上,您的函数确实会更改参数数据,因为您正在递增inputImage.pixels。 所以你可能想要存储inputImage.pixels并重复它。
void someFunction(const PBYTEImage& inputImage)
{
PBYTE pPixels = inputImage.pixels;
for (unsigned int x = 0; x < inputImage.width*inputImage*height;)
{
unsigned char y = *pPixels;
pPixels += 1;
}
}
答案 1 :(得分:0)
首先,你的for循环的退出条件中有一个拼写错误:你已经写了
inputImage*height
但它应该是
inputImage.height
除此之外,您还没有告诉我们PBYTE是什么,但是从这一行开始
unsigned char y = *(inputImage.pixels);
我想你的某个地方
typedef unsigned char* PBYTE;
所以PBYTE是一个指针。表达式
inputImage.pixels += 1;
确实尝试增加指针,像素。由于像素是结构的成员,并且您的结构作为const传递,因此您将收到错误。所以是的,如果你想保持你的结构不变并增加指针,你必须在函数定义中删除const。从传递inputImage作为引用更改为将其作为指针传递也不会有帮助。
我是否必须丢弃常量?有没有办法证明这一点 函数不修改数据?
也许你期望从一个整体的角度来看是安全的,因为你只是移动指针而不是触及它所指向的数据:那是对的,但在这种情况下指针本身是你的数据,你正试图改变它。因此,您的功能会修改数据。