我有一个主要功能,可以在玩游戏时将数独游戏打印到控制台。我称之为印刷板方法,它输出电路板以及带有数字的2D阵列。我一直在修改游戏,以便在每次cout之后输出到文件:
cout << "puzzle created" << endl;
output << "puzzle created" << endl;
然后问题是当我尝试使用方法时出错:
sudoku.printBoard(); //method to print board to console
我不能简单地说:
output << sudoku.printBoard();
我不能说:
output << "number";
在board.cpp文件中的方法中。
有没有人知道这方面的任何方式?
答案 0 :(得分:3)
这是print()
成员函数的问题,也是您不应该编写它们的原因。至少,不是这样的。你已经锁定了自己打印到 stdout ,现在你想要在其他地方打印,你就被卡住了。
相反,有一个函数打印,告诉它。这可能是 stdout 或文件或其他任何内容。
该函数将如下声明:
void printBoard(std::ostream& os);
在其定义中,您将使用os
而不是std::cout
。
然后您的代码将如下所示:
sudoku.printBoard(std::cout);
sudoku.printBoard(output);
它有效,因为std::cout
和output
都是std::ostream
派生的类型。
如果你需要很多cout
变体,并且你不想每次都提供参数,因为它变得混乱,只需提供一个重载:
void printBoard()
{
printBoard(std::cout);
}
现在你仍然可以写:
sudoku.printBoard();
对于您的项目开发人员来说,这或多或少会让您有所决定。
如果您没有其他要打印的内容,那么这是sudoku
类型中唯一的此类功能,更惯用的方法是为此创建operator<<
类型:
std::ostream& operator<<(std::ostream& os, const SudokuBoard& board)
{
board.printBoard(os);
return os;
}
现在您可以像这样使用它:
std::cout << sudoku;
output << sudoku;
答案 1 :(得分:0)
传递ofstream
作为您的功能的参考,或者只是从您的函数返回字符串并将其打印在main()
或被调用函数中。
string f()
{
ostringstream os;
os<<"whatever I want to print in output";
....
...
return os.str();
}
int main() or //womain() from wherever you call
{
output<<f()<<endl;
}
答案 2 :(得分:0)
创建一个在构造函数中包含两个ostream的类。其中一个可以是std :: cout。将它们作为参考存储在类中。
创建输出流运算符(&lt;&lt;)并使用它们写入两个流。
要在其他类中使用它,请在构造函数中将其作为引用传递(查找依赖项注入)。