2016-06-08 3 views
-1

행렬 곱셈 내가 매트릭스 의 곱셈 일하고

m5 = m2 * m3; 
cout << "m2 * m3 is : " << endl<< m5 << endl; 

같은 것입니다 이것은

const Matrix Matrix::operator*(const Matrix &a) 
{ 
    Matrix temp(a.row,a.col); 
    for (int i = 0; i<row; i++) 
    { 
     for (int j = 0; j<col; j++) 
     { 
     for (int k = 0; k<a.row; k++) 
     { 
      temp.data[i][j] = temp.data[i][j] + data[i][k] * a.data[k][j]; 
     } 
     } 
    } 
return temp; 
} 

그러나 내 코드입니다 함수

ostream& operator<<(ostream &output, const Matrix &a) 
{ 
    for (int i = 0; i < a.row; i++) 
    { 
     for (int j = 0; j < a.col; j++) 
     { 
     output << a.data[i][j] << "\t"; 
     } 
    output << "" << endl; 
    } 
    return output; 
} 

가 a.data에 문제가있을 것 같다 [I] [J] 난 그나마되는 케이 이제 문제가 무엇입니까 잘 작동합니다. 이 오류를 보여주고있다 {data0x005fba90 {0xfeeefeee가 {???}} 이 사람이 어떤 조언이나 제안을하거나 상황 에 도움이 될 수 있습니다이이이 설정

Matrix::Matrix(const Matrix&m2) 
{ 
    row = m2.row; 
    col = m2.col; 
    setUp(row, col); 
    for (int i = 0; i<row; i++) 
    { 
     for (int j = 0; j<col; j++) 
     { 
      data[i][j] = 0; 
     } 
    } 
    for (int i = 0; i < row; i++) 
    { 
     for (int j = 0; j < col; j++) 
     { 
     data[i][j] = m2.data[i][j]; 
     } 
    } 
} 

내 복사 생성자이며 기본적

Matrix::Matrix() 
{ 
row =0; 
col = 0; 
for (int i = 0; i<row; i++) 
{ 
    for (int j = 0; j<col; j++) 
    { 
     data[i][j] = 0; 
    } 
} 

} 
Matrix::Matrix(int a, int b, double d[], int c) 
{ 
row = a; 
col = b; 
setUp(row, col); 
int counter = 0; 
for (int i = 0; i < row; i++) 
{ 
    for (int j = 0; j < col; j++) 
    { 
     data[i][j] = d[counter]; 
     counter++; 
    } 
} 
} 

하고 Matrix 생성자를 보지 않고 셋업

void Matrix::setUp(int a, int b) 
{ 
row = a; 
col = b; 
data = new double*[row]; 
for (int i = 0; i < row; i++) data[i] = new double[col]; 
} 
+1

* 그러나 내 인쇄 기능에 항상 오류가 있습니다. * 자세히 설명해 주시겠습니까? – NathanOliver

+2

임시 행렬에'this-> row'와'a.col' 차원이 있어야하지 않습니까? –

+0

하지만 내가 어떤 연산자를 사용하지 않고 작동하지 않으면 연산자를 사용하는 것과 다른 것입니다. –

답변

0

, 또는 클래스 정의, 그것은 확실히 말하기 어렵지만,이 표현

temp.data[i][j] + data[i][k] * a.data[k][j] 

를 보면 당신은 다음의 내용을 temp을 만들 때 명시 적으로 생성자에서 data 멤버를 초기화하지 않는 경우, data이 무엇인지에 따라 자동으로 초기화되지 않으며 내용은 이 아님이고이를 사용하면 의 정의되지 않은 동작이됩니다.

또 다른 가능한 원인은 복사 생성자가 없거나 잘못된 복사본 생성자 일 수 있습니다. 복사 생성자를 호출하는 값으로 temp을 반환하므로 문제가 발생합니다.

+0

복사 생성자 함수가 있지만 모양이 도움이되지 않는 것처럼 보입니다. –