1

매트릭스 조작을위한 간단한 클래스를 작성하기 시작했습니다. 한 생성자는 하나의 숫자가있는 행렬을 채우고 다른 하나는 인수로 2 차원 배열을 사용합니다.반환 값과 함께 프로세스가 종료되었습니다. 3221226356

#include <iostream> 

using namespace std; 
int i,j; 
class Matrica 
{ 
public: 
    Matrica(int, int, double); 
    Matrica(int, int, double*); 
    ~Matrica(); 
    void saberi(Matrica, Matrica); 
    void read(); 
    void print(); 
private: 
    int n,m; 
    double* matrix; 
}; 

Matrica::Matrica(int a, int b, double broj) 
{ 
    n = a; 
    m = b; 
    matrix = new double[n*m]; 
    for(i=0;i<n;i++) { 
     for(j=0;j<m;j++) { 
      matrix[i*n + j] = broj; 
     } 
    } 
} 

Matrica::Matrica(int a, int b, double* matr) 
{ 
    n = a; 
    m = b; 
    matrix = new double[n*m]; 
    for(i=0;i<n;i++) { 
     for(j=0;j<m;j++) { 
      matrix[i*n + j] = matr[i*n +j]; 
     } 
    } 

} 
Matrica::~Matrica() { 
    delete[] matrix; 
} 

void Matrica::read() { 
    double e; 
    for(i=0;i<n;i++) { 
     for(j=0;j<m;j++) { 
      cout<< "insert element ["<<i<<"]["<<j<<"] :" <<endl; 
      cin >> e; 
      matrix[n*i +j] = e; 
      cout<< endl; 
     } 
    } 
} 

void Matrica::print() { 
    for(i=0;i<n;i++) { 
     for(j=0;j<m;j++) { 
      cout << matrix[n*i + j] << " "; 
     } 
     cout << endl; 
    } 
} 
void Matrica::saberi(Matrica A, Matrica B) { 
    cout << "foo"; 
} 

int main() 
{ 

    Matrica A(3,3,1); 
    double K[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 
    Matrica B(3,3,&K[0][0]); 
    Matrica C(3,3,7); 
    C.saberi(A,B); 
    return 0; 
} 

인수로 두 개의 객체를 사용하는 빈 "saberi"메소드를 추가하기 전에 내 프로그램이 정상적으로 작동했습니다. 내가 그것을 부르면 내 프로그램이 3221226356 반환 값으로 고장난다. 무엇이 잘못 될 수 있습니까? 미리 감사드립니다. 당신이 당신의 함수 서명

void saberi(Matrica, Matrica); 

값이 전달되는 Matrica 객체

를 정의하지만,이 클래스 Matrica에 대한 적절한 복사 생성자를 제공하지 않기 때문에

+0

'Matrica :: saberi (Matrica & A, Matrica & B)'를 시도하거나'Matrica'를위한 적절한 복사 생성자를 제공하십시오. –

+0

@ πάντα ῥεῖ 고마워, 지금 의도대로 작동한다. – Jay

답변

1

.

현재의 문제를 해결하는 가장 쉬운 방법은, 장기적으로,

void saberi(Matrica&, Matrica&); 

또는

void saberi(const Matrica&, const Matrica&); 

어쨌든 참조에 의해 매개 변수를 전달하는 것입니다, 당신은 적절한 복사 생성자를 제공해야 하나

Matrica(const Matrica&); 

또는 fobid it (단지클래스의섹션).

관련 문제