我怎样才能使用void printMatrix(ostream& os = cout)const?

时间:2013-03-12 23:26:30

标签: c++

我正在尝试学习C ++,我有一个任务,用这个函数做一些打印,我不明白如何使用ostream。有人可以帮我吗?

    void Matrix::printMatrix( ostream& os = cout ) const{
    for(int i=0; i<n; i++)
      for(int j=0; i<m; j++)
        os<<elements[i][j]<<"\n";
    }

我试过这样做,但它给我一些错误,我不知道如何处理这个问题。 错误:

Matrix.cpp:47:48:error:给出'void Matrix :: printMatrix(std :: ostream&amp;)const'[-fpermissive]的参数1的默认参数 在Matrix.cpp中包含的文件中:8:0: Matrix.h:25:10:错误:在'void Matrix :: printMatrix(std :: ostream&amp;)const'[-fpermissive]

之前的规范之后

2 个答案:

答案 0 :(得分:6)

你应该在声明和定义中指定函数的默认参数:

class Matrix
{
    // ...

    // Default argument specified in the declaration...
    void printMatrix( ostream& os = cout ) const;

    // ...
};

// ...so you shouldn't (cannot) specify it also in the definition,
// even though you specify the exact same value.
void Matrix::printMatrix( ostream& os /* = cout */ ) const{
//                                    ^^^^^^^^^^^^
//                                    Remove this


    ...
}

或者,您可以在定义中保留默认参数规范,并在声明中省略它。重要的是你两者都没有。

答案 1 :(得分:3)

该函数有一个输出流作为参数,默认情况下具有标准输出(std::cout)(尽管在函数定义中未正确指定,但未在声明中指定)。你可以这样做:

// use default parameter std::cout
Matrix m + ...;
m.printMatrix();

// explicitly use std::cout
m.printMatrix(std::cout);

// write to a file
std::ofstream outfile("matrix.txt");
m.printMatrix(outfile);