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

如何在main函数中将Tetris类私有成员num传入全局函数printBoard?

问题修正与正确参数传递方法

现有代码的核心问题

  • Tetris类定义缺少class关键字,语法不合法;
  • printBoard的声明与调用参数不匹配:声明仅接受一个Tetris&参数,但main函数中传递了两个参数;
  • 类的私有成员num无法在类外部直接访问,必须通过类提供的合法途径获取。

正确实现方式

根据需求,提供两种常用解决方案:

方案1:添加公有成员接口暴露私有成员

通过给Tetris类添加一个公有的成员函数,用于获取私有成员num的值,再将该值传递给printBoard:

class Tetris
{
private: 
    int num;
public:
    // 公有接口,返回私有成员num
    int getNum() const {
        return num;
    }
};

// 根据需求定义printBoard的参数,比如直接接收num
void printBoard(int num);

int main()
{
    Tetris tetris;
    // 通过公有接口获取num,传递给printBoard
    printBoard(tetris.getNum());
}

如果printBoard需要同时操作Tetris对象本身,也可以让函数接收Tetris对象,再在函数内部通过接口获取num:

class Tetris
{
private: 
    int num;
public:
    int getNum() const {
        return num;
    }
};

void printBoard(const Tetris& t);

// 函数实现中通过接口访问num
void printBoard(const Tetris& t) {
    int targetNum = t.getNum();
    // 此处编写处理num的逻辑
}

int main()
{
    Tetris tetris;
    printBoard(tetris);
}

方案2:将printBoard声明为类的友元函数

如果需要让printBoard直接访问Tetris的私有成员,可以将其声明为类的友元函数:

class Tetris
{
private: 
    int num;
    // 声明printBoard为友元函数
    friend void printBoard(const Tetris& t);
};

void printBoard(const Tetris& t);

// 友元函数可直接访问私有成员
void printBoard(const Tetris& t) {
    int targetNum = t.num;
    // 此处编写处理num的逻辑
}

int main()
{
    Tetris tetris;
    printBoard(tetris);
}

补充说明

如果main函数中的board是另一个需要传递的参数,需明确board的类型,调整printBoard的参数列表即可,示例如下(假设board为自定义Board类对象):

class Board {}; // 示例Board类
class Tetris
{
private: 
    int num;
public:
    int getNum() const {
        return num;
    }
};

void printBoard(Board& board, int num);

int main()
{
    Tetris tetris;
    Board board;
    printBoard(board, tetris.getNum());
}

内容的提问来源于stack exchange,提问作者nwer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:10:34