更改指针指向的对象,但对象不会改变
Changing object a Pointer points to, but the object wont change
在我的图像类中,我想在传递给图像后要更改它们,并且它们仍然应该更改图片。
int main(int argc, char* argv[]){
Image theImage(4, 8);//width/height
Pixel aPixel(2,1);
Pixel* p = &aPixel;
theImage.setPixel(p);
aPixel.setBlue(100);//change the blue (RGB) value of the pixel, but Pixel color doesnt change
theImage.saveAsPixelMap("/Users/dan/Desktop/test.ppm");
return 0;
}
我以为像素的颜色会改变,因为想象类有指针时,当指针仍然指向同一像素时,更改了哪种颜色,图像中的像素的颜色不应该更改吗?
这是像素构造函数:
Pixel::Pixel(int tx, int ty){
red = 255;
green = 0;
blue = 0;
x = tx;
y = ty;
hasBeenChanged = false;
}
和setpixel方法
void Image::setPixel(Pixel *aPixel){
int tX = aPixel->getX();
int tY = aPixel->getY();
imageData.at(tY).at(tX)->setRed(aPixel->getRed());//value 0 - 255
imageData.at(tY).at(tX)->setGreen(aPixel->getGreen());
imageData.at(tY).at(tX)->setBlue(aPixel->getBlue());
}
Imagedata看起来像
std::vector< std::vector<Pixel*> > imageData;
和saveaspixelmap方法。
void Image::saveAsPixelMap(char aPath[]){
std::ofstream myfile;
myfile.open(aPath);
myfile << "P3n" << this->getWidth() <<" "<< this->getHeight() <<"n255n";
std::vector < Pixel* > row;
for (int y = 0; y < this->getHeight(); y++){
row = imageData.at(y);
for (int x = 0; x < this->getWidth(); x++){
myfile << row.at(x)->getRed() << " ";
myfile << row.at(x)->getGreen() << " ";
myfile << row.at(x)->getBlue() << " ";
std::cout <<"rot: "<< imageData.at(y).at(x)->getRed();
}
}
std::cout << "n Writing File to " << aPath << "n n";
myfile.close();
}
好吧,这是很多代码,请问我是否需要有关某些内容的更多信息,或者我的问题还不够清楚。任何提示如何解决这一非常感谢的
您实现的概念与您描述的内容不同:
- 描述的是,
Image
中的某些东西应该改变 - 实现的是纯复制语义(从给定的像素中读取并将值放在其他像素上)
您需要返回像素的Image
类的某种方法 - 可以更改。
示例:
class Image {
// ..
Pixel & get_pixel(int x, int y) { /* */ }
}
然后,您可以使用:
更改(之后)image.get_pixel(2,1).setBlue(100)
setPixel
方法应引用指针:
void Image::setPixel(Pixel *& aPixel) { .. }
相关文章:
- 如何访问和改变存储在矢量C++中的对象
- 通过从构造函数中的'this'复制的指针改变常量对象
- 为什么我可以改变常量对象中的成员变量,这是返回常量对象函数的结果?
- 使用(非对象)API 时改变表数组C++而不重新创建整个平面缓冲区
- 为什么我的函数不改变对象的属性
- 改变对象的原点点使其以不同的轴移动
- 更改指针指向的对象,但对象不会改变
- 对列表中的每个对象调用成员函数,以改变对象所在的列表
- 当函数应该改变对象的状态时,是选择成员函数还是朋友函数
- 一个什么都不做的函数可以改变一个对象吗?
- 改变一个已经压入的列表(在vector对象上)会改变vector对象上的列表吗?
- 如何改变一个c++对象的类(实现可变类型)
- 如果一个引用一旦被初始化为一个对象,它就不能被改变,为什么这样做呢?
- 在c++中,改变指针返回后指向的对象
- 改变数组中的对象,但不改变对象的数量- c++
- 将字符串保存到重载括号中,不改变对象的字段
- 如何用静态方法改变c++中对象的属性
- 我的对象在矢量中的地址改变了
- 在c++中正确的对象强制转换,值字段不会改变
- 当一个对象改变某些值时要意识到