2011-09-12 5 views
3

저는 독자적으로 Matrix 클래스를 만들었습니다. 하지만 과부하 + 연산자 흥미로운 문제가 있습니다. 프로그램이 무한 루프처럼흥미로운 C++ 연산자 오버로딩 문제

Matrix Matrix::operator+ (Matrix& operand) 
{ 
    if(row_size == operand.row_size && col_size == operand.col_size) 
    { 
     Matrix temp(row_size, col_size); 
     for(int i = 0; i < col_size; i ++) 
     { 
      for(int j = 0; j < row_size; j ++) 
      { 
       temp[i][j] = data_list[i][j] + operand.data_list[i][j]; 
      } 
     } 

     return temp; 
    } 
    else 
     throw Error::Matrix_error(0); 
} 

내가 주요 기능에

matrix + matrix2;

을 수행 할 때, 그것은 보인다. 그래서, 방금 디버깅을하고 코드가 return temp; 부분에 멈추는 것을 알았습니다. operator +의 반환 유형이 Matrix이므로이 함수가 temp을 반환 할 수없는 이유는 알 수 없습니다.

또한이 코드는 RELEASE 모드 (Visual Studio 2010)로 컴파일 할 때 완전히 작동합니다. 그러나 DEBUG 모드로 컴파일 할 때는 작동하지 않습니다.

+1

'매트릭스'의 copy-ctor (또는 할당)은 어떻게 생겼습니까? – Nim

+0

''return temp;' '에서 코드 **가 멈춘다는 것은 무엇을 의미합니까? 그게 충돌한다는 뜻이야? –

+1

행렬에 대한 공간을 동적으로 할당하고 행렬에 대한 포인터를 리턴하십시오. – SpeedBirdNine

답변

0

문제는 복사 생성자를 생성하지 못한 것입니다. 그것은 복사 생성자에서 무한 루프에 빠졌지 만 디버거는 그것을 잡지 못했습니다.

+1

'@'- 응답자는 여러분이 질문을받은 곳의 주석이어야합니다;) –

관련 문제