我使用codeblocks构建我的程序,但是对于学校我们应该通过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 :(得分:2)
没有错误。这只是一个警告。这些线告诉你:
警告告诉您,当您的函数的返回类型为NULL
(int
)时,您将返回T = int
。虽然NULL
只给你0
,但编译器很清楚NULL
只应该与指针一起使用,并给你一个警告,你可能做错了。
答案 1 :(得分:2)
首先,代码是正确的,虽然可能不是你真正想要的,这就是编译器警告你的原因。
在C ++中,NULL
被定义为0
(整数0),因此在您Matrix<int>
的实例化中,如果用户尝试访问超出范围的元素,您将返回0(整数值0)。 NULL
用于表示不引用有效内存的指针,编译器看到你在return语句中使用它...所以它想知道你是否真的想要返回一个指针或值0 ...
这引出了一个问题,你为什么要回归NULL
?你真的想要返回0吗?因为如果你没有编译器只是帮你找到了一个bug ...