You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 14:45:57