如何将Pixel类实例pixelOne作为参数传入showPixelDetail()函数?
问题描述
希望将pixelOne作为参数传入showPixelDetail()函数,目前实现的代码如下,但不清楚正确传参方式。尝试传递pixelOne时,会出现xCoord、yCoord和brightness未在作用域声明的问题,已知原因,需要实现将这些成员随pixelOne一同传递的方法。
原代码
#include <iostream> #include <string> using namespace std; class Pixel { public: float xCoord; float yCoord; double brightness; void showPixelDetail(); }; void Pixel::showPixelDetail() { cout<< xCoord << endl; cout<< yCoord << endl; cout<< brightness << endl; } int main() { Pixel pixelOne; icon myIcon; pixelOne.xCoord=1; pixelOne.yCoord=1; pixelOne.brightness=15; pixelOne.showPixelDetail(); return 0; }
解决方案
首先注意:原代码中icon myIcon;属于未定义类型,编译会报错,需要删除该行或提前定义icon类。
方案1:将showPixelDetail改为非成员函数(推荐)
把原来的成员函数改成独立的全局函数,接收Pixel对象作为参数(用const&避免不必要的对象拷贝),函数内部通过传入的对象访问成员变量:
#include <iostream> #include <string> using namespace std; class Pixel { public: float xCoord; float yCoord; double brightness; }; // 非成员函数,接收Pixel对象引用 void showPixelDetail(const Pixel& pixel) { cout << pixel.xCoord << endl; cout << pixel.yCoord << endl; cout << pixel.brightness << endl; } int main() { Pixel pixelOne; // 移除未定义的icon对象 // icon myIcon; pixelOne.xCoord = 1; pixelOne.yCoord = 1; pixelOne.brightness = 15; // 调用时传入pixelOne对象 showPixelDetail(pixelOne); return 0; }
方案2:修改成员函数接收同类型对象参数(特殊场景用)
如果非要保留成员函数的形式,也可以让它接收另一个Pixel对象作为参数,此时函数内部可以访问传入对象的成员:
#include <iostream> #include <string> using namespace std; class Pixel { public: float xCoord; float yCoord; double brightness; // 成员函数接收Pixel对象引用 void showPixelDetail(const Pixel& pixel) { cout << pixel.xCoord << endl; cout << pixel.yCoord << endl; cout << pixel.brightness << endl; } }; int main() { Pixel pixelOne; // 移除未定义的icon对象 // icon myIcon; pixelOne.xCoord = 1; pixelOne.yCoord = 1; pixelOne.brightness = 15; // 调用时传入pixelOne(也可以传其他Pixel对象) pixelOne.showPixelDetail(pixelOne); return 0; }
错误原因说明
你之前尝试传参时出错,是因为如果直接给成员函数加Pixel参数,但函数内部还是直接写xCoord,此时编译器不知道你要访问的是当前对象(this指向的)还是传入参数对象的成员,必须通过对象名(比如pixel.xCoord)明确指定,否则会报变量未声明的错误。
内容的提问来源于stack exchange,提问作者George Hudson
相关产品推荐
相关产品推荐

