2013-02-13 1 views
0

코드 블럭을 사용하여 프로그램을 만들었지 만, 학교에서는 리눅스 시스템을 통해 컴파일해야합니다. 149 번으로 문제가 생기는 ibut 밑에서 이러한 실수를 저질렀습니다. 그 불평이 무엇인지 전혀 알지 못합니다. 누군가 나를 도울 수 있을까요?Linux 컴파일러를 사용하여 오류가 발생했지만 의미가 없어졌습니다.

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

라인 myheader 그것이 INT 로 변환됩니다하지만 포인터 메신저 가정에 대한 의미, 그래서 NULL이 int 형이이기 때문에 131? – mystycs

+0

그건 그냥 경고예요 ('-Werror'는 항상 좋은 생각입니다). 'NULL'은'int'가 아닌 포인터를 의미합니다. – chris

+0

메신저가 완전히 잃어버린 오류에 대해서. – mystycs

답변

2

오류가 없습니다. 그것은 단지 하나의 경고 일뿐입니다. 내용은 다음과 같습니다.

  1. 경고가있는 파일이 포함 된 파일은 무엇입니까?
  2. 경고가 발생한 템플릿 함수.
  3. 템플릿 함수가 인스턴스화 된 함수입니다.
  4. 인스턴스화가 발생한 행.
  5. 경고 자체. 함수의 반환 형식이 int (T = int) 때

경고 당신을 말하고 당신은 NULL를 반환하고있다. NULL은 단지 0을 제공하지만, 컴파일러는 NULL이 포인터와 함께 사용되기로되어 있고, 잘못된 것을하고 있다고 경고합니다.

+0

그래서 전방으로 가서 'NULL을 반환했습니다'; '0을 반환합니다.' – mystycs

2

우선, 코드가 정확합니다. 실제로 의도 한 바가 아니기 때문에 컴파일러에서 경고합니다. 사용자가 범위 밖으로 요소에 액세스하려고하면 C++에서

NULL0 (정수 0)으로 정의되고, Matrix<int> 당신의 인스턴스에, 그래서 당신은 영 (0 정수 값)을 반환합니다. NULL은 유효한 메모리를 참조하지 않는 포인터를 나타내는 데 사용되며 컴파일러는 return 문에서이를 사용하고 있음을보고 있으므로 포인터 또는 값 0을 반환할지 여부를 궁금해합니다.

이것은 인데 왜 NULL을 반환합니까? 정말로 0을 돌려 주려고 했습니까? 컴파일러하지 않았다 경우 단지 버그를 찾는 당신에게 도움이되기 때문에 ...