Получение ошибок, но потеря смысла при использовании компилятора Linux

Я построил свою программу, используя кодовые блоки, но для школы мы должны компилировать через систему 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;
}

0

Решение

Там нет ошибок. Это всего лишь одно предупреждение. Линии говорят вам:

  1. Какой файл включал файл с предупреждением.
  2. В какой функции шаблона появилось предупреждение.
  3. В какой функции был создан экземпляр этой шаблонной функции.
  4. Строка, на которой произошло создание экземпляра.
  5. Само предупреждение.

Предупреждение говорит вам, что вы возвращаетесь NULL когда тип возврата вашей функции int (T = int). Хотя NULL просто дает вам 0компилятор хорошо знает, что NULL Предполагается, что он используется только с указателями и предупреждает, что вы, вероятно, делаете что-то не так.

2

Другие решения

Прежде всего, код верен, хотя, вероятно, не то, что вы на самом деле имели в виду, поэтому компилятор предупреждает вас.

В C ++ NULL определяется как 0 (целое число 0), поэтому в вашем экземпляре Matrix<int>, если пользователь пытается получить доступ к элементу за пределами, вы вернете 0 (целое значение 0). NULL используется для указания указателя, который не ссылается на допустимую память, и компилятор видит, что вы используете это в операторе возврата … поэтому он задается вопросом, действительно ли вы хотели вернуть указатель или значение 0 …

Напрашивается вопрос, почему ты возвращаешься NULL? Вы действительно хотели вернуть 0? Потому что, если вы этого не сделали, компилятор просто помог вам найти ошибку …

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector