【发布时间】:2014-03-11 06:41:23
【问题描述】:
void RemoveGreenEffect::processImage(vector<Point>& points)
{
for (int i = 0; i < points.size(); ++i)
{
points[i].setGreen(0);
}
}
此函数正确地引入向量并在本地进行更改。但是,当程序返回主程序时,它不会保留更改。有人可以解释我做错了什么吗?如果有帮助,这里是 main 的调用函数。
for (int i = 0; i < ppm.getRows(); ++i)
{
my_effect->processImage(picture.getPicture()[i]);
}
my_effect 是指向派生对象 RemoveGreenEffect 的基类指针。 getPicture() 是 Point 对象向量的向量,因此 getPicture()[i] 是 Point 类的向量。目标是一次删除图片中的所有绿色值像素,但同样,更改仅在本地起作用。
编辑,这里是getPicture()
vector<vector<Point>> PointFormatPicture::getPicture()
{
return _picture;
}
这就是_picture
vector<vector<Point>> _picture;
【问题讨论】:
-
显示更多代码。图片中发生了什么?
-
可以出示
getPicture()的声明吗? -
getPicture返回_picture的副本,因此当您将其传递给processImage时,它不会影响_picture。编译器实际上应该标记一个错误,除非您在非常量对象上调用operator[]函数时返回一个 const 引用。 -
感谢分配,这很有意义。是的,鉴于我使用的是 Visual Studio,编译器没有给出错误,这很奇怪。你知道是否有一种传统的方法来命名一个返回引用的类成员函数,就像你建议的那样?
标签: c++ vector reference scope