如何在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
相关产品推荐
相关产品推荐

