0

私は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:エラー:'void Matrix :: printMatrix(std :: ostream&)const'のパラメーター1に指定されたデフォルトの引数[-fpermissive] Matrix.cpp:8:0からインクルードされたファイル:Matrix.h :25:10:エラー:'void Matrix :: printMatrix(std :: ostream&)const'[-fpermissive]の以前の指定の後

4

2 に答える 2

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


    ...
}

または、デフォルトの引数指定を定義に残し、宣言で省略することもできます。重要なのは、両方にそれがないということです。

于 2013-03-12T23:31:22.497 に答える
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);
于 2013-03-12T23:28:00.847 に答える