使2d数组充满基础Complex类

时间:2016-04-16 15:31:29

标签: c++ arrays

我一直遇到一个常规的2d数组要填充我有Complex()的基类的问题。我在派生类matrix()的构造函数中初始化了数组,我确保我正确地填充它,但无论我做什么,我都会收到错误。我一直在获取访问冲突写入位置,这可能意味着数组没有正确初始化,而我正在写的数据被写入CPU。这是我的Matrix.h文件

#pragma
#ifndef MATRIX_H
#define MATRIX_H
#include "Complex.h"
#include "stdafx.h"
#include <iostream>
using namespace std;

class Matrix : public Complex 
{
private:
Complex **a;
double real;
double imag;
double length, width;

public:
Matrix(): real( 0.0 ), imag( 0.0 ) {}
void setMatrix(int b , int c) { 
    int i, j;
    a=new Complex*();
    length=b, width=c;
    for(int k=0;k<b;k++)
        for(int p=0; p<c; p++)  
            a[k]=new Complex();
        for (i = 0; i <= b; i++)    
         for (j = 0; j<= c; j++)
            a[i][j].setImag(rand() % 100);
            a[i][j].setReal(rand() % 100);
}

Matrix add( const Matrix & ) const;
void print() const;
void setMatrix(int b, int c) const;

};
#endif

这是我的Matrix.cpp文件

#include <iostream>
using namespace std;
#include "Matrix.h"
Matrix Matrix::add( const Matrix &c ) const
{
Matrix result;
result.setMatrix(2,2);
int i,j;
for(i=0; i<c.length; i++)   {
    for(j=0; j<c.width;j++) {
        result.a[i][j].setImag(a[i][j].getImag() + c.a[i][j].getImag());
        result.a[i][j].setReal(a[i][j].getReal() + c.a[i][j].getReal());
    }
}

return result;
}

void Matrix::print() const  {
for(int i=0; i<length; i++) {
    for(int j=0; j<width; j++)  {
        cout << "(" << a[i][j].getReal() << "," << a[i][j].getImag() << ")/n";
    }
}
}

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

我甚至不会尝试修复此代码中的所有错误,因此您将遇到更多问题,但就内存分配而言

a=new Complex*(); 

仅分配单个复合体,因此只有a[0]有效。必须用

替换
a=new Complex*[length]; 

同样如此
a[k]=new Complex();

必须替换为

a[k]=new Complex[width];

所以setMatrix中的分配变为:

void setMatrix(int b , int c) 
{ 
    length=b; 
    width=c;

    a=new Complex*[length]; 
    for(int k=0;k<length;k++)
    {
        a[k]=new Complex[width];
    }
}

注意:

  • 请勿在标题中使用using namespace std
  • 不想使用using namespace std
  • 如果使用原始指针,则需要析构函数
  • print不应该是Matrix
  • 的一部分
  • Matrix应该是可能的。不是来自复杂 ...

<强> live on Coliru