0

コードブロックを使用してプログラムを作成しましたが、学校では Linux システム経由でコンパイルすることになっています。私はこれらの大量のエラーをここの下に持っていますが、私は149で問題を抱えています.何について不平を言っているのかわかりません. 多分誰かが私を助けることができますか?

In file included from matrix.cpp:9:0:
matrixClass.h: In member function âT Matrix<T>::GetData(int, int) const [with T = int]â:
matrixClass.h:149:17:   instantiated from âstd::ostream& operator<<(std::ostream&, const Matrix<int>&)â
matrix.cpp:22:13:   instantiated from here
matrixClass.h:131:16: warning: converting to non-pointer type âintâ from NULL

私のコードは以下です。

T GetData(int row, int column) const
{
    if (row>=0 && row<numrows() && column>=0 && column<numcols())
    {
        return pData[GetRawIndex(row, column)];
    }
    return NULL;
}

//Output matrix arrays here.
friend ostream& operator<<(ostream& os, const Matrix<T>& matrix)
{
    os << "[";
    for(int i = 0; i<matrix.numrows(); i++)
    {
        for(int j = 0; j < matrix.numcols(); j++)
            os << matrix.GetData(i,j) << " ";

        os << endl;
    }
    os << "]" <<endl;
    return os;
}
4

2 に答える 2

2

まず第一に、コードは正しいですが、おそらくあなたが本当に意図したものではないため、コンパイラは警告を発しています。

C++ では、は(整数 0)NULLと定義されているため、 のインスタンス化で、ユーザーが範囲外の要素にアクセスしようとすると、0 (整数値 0) が返されます。有効なメモリを参照しないポインターを示すために使用され、コンパイラーは return ステートメントでそれを使用していることを認識しています...したがって、本当にポインターまたは値 0 を返すつもりだったのか疑問に思います...0Matrix<int>NULL

なぜ戻ってくるのNULLですか?本当に 0 を返すつもりだったのですか? コンパイラがバグを見つけるのを手伝ってくれなかったとしたら...

于 2013-02-13T22:34:18.477 に答える
2

エラーはありません。それはただの 1 つの警告です。行は次のことを示しています。

  1. 警告のあるファイルが含まれていたファイル。
  2. 警告が発生したテンプレート関数。
  3. そのテンプレート関数がインスタンス化された関数。
  4. インスタンス化が発生した行。
  5. 警告自体。

警告はNULL、関数の戻り値の型がint( T = int) のときに戻っていることを示しています。NULLを与えるだけですが0、コンパイラはNULLポインタでのみ使用されることになっていることをよく認識しており、おそらく何か間違ったことをしているという警告を出します。

于 2013-02-13T22:30:12.083 に答える