Я построил свою программу, используя кодовые блоки, но для школы мы должны компилировать через систему 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;
}
Там нет ошибок. Это всего лишь одно предупреждение. Линии говорят вам:
Предупреждение говорит вам, что вы возвращаетесь NULL
когда тип возврата вашей функции int
(T = int
). Хотя NULL
просто дает вам 0
компилятор хорошо знает, что NULL
Предполагается, что он используется только с указателями и предупреждает, что вы, вероятно, делаете что-то не так.
Прежде всего, код верен, хотя, вероятно, не то, что вы на самом деле имели в виду, поэтому компилятор предупреждает вас.
В C ++ NULL
определяется как 0
(целое число 0), поэтому в вашем экземпляре Matrix<int>
, если пользователь пытается получить доступ к элементу за пределами, вы вернете 0 (целое значение 0). NULL
используется для указания указателя, который не ссылается на допустимую память, и компилятор видит, что вы используете это в операторе возврата … поэтому он задается вопросом, действительно ли вы хотели вернуть указатель или значение 0 …
Напрашивается вопрос, почему ты возвращаешься NULL
? Вы действительно хотели вернуть 0? Потому что, если вы этого не сделали, компилятор просто помог вам найти ошибку …