我想把矩阵转置、求逆、相乘等计算全部写在一个另外的类中,需要用时只要调用就行,但是MFC新手,不太理解,写出来的总是报错。比如矩阵转置,c的代码如下//矩阵转置
double *MatrixTranpose(double *A,double *B,int m,int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
B[i*m+j]=A[j*n+i];
return B;
}但是放在MFC中,// matrix.cpp: implementation of the matrix class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "example.h"
#include "matrix.h"
#include "ModalDlg.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////matrix::matrix()
{}matrix::~matrix()
{}void matrix::MatrixTranpose(double *A,double *B,int m,int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
B[i*m+j]=A[j*n+i];
return B;}
这么写就不对,能不能帮我改一下,指导一下这种情况怎么写代码?
double *MatrixTranpose(double *A,double *B,int m,int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
B[i*m+j]=A[j*n+i];
return B;
}但是放在MFC中,// matrix.cpp: implementation of the matrix class.
//
//////////////////////////////////////////////////////////////////////#include "stdafx.h"
#include "example.h"
#include "matrix.h"
#include "ModalDlg.h"
#include "math.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////matrix::matrix()
{}matrix::~matrix()
{}void matrix::MatrixTranpose(double *A,double *B,int m,int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
B[i*m+j]=A[j*n+i];
return B;}
这么写就不对,能不能帮我改一下,指导一下这种情况怎么写代码?
解决方案 »
- 工程仿真软件都涉及哪些内容呢
- 如何获得view类窗口的标题
- 请教大家:用RAID卡(磁盘阵列)做数据采集,读写数据用什么函数效率比较高?
- 怎样一次删除listctrl 控件中的多项
- 关于按纽单击事件的响应?
- 为什么我写的界面,在设定[属性]-[效果]里面勾上"拖动时显示窗口内容"的时候,屏幕闪个不停?
- !!!100 创建多个线程,使用同一个线程函数会有问题吗? !!!
- 高分求教,在线等待,请问SMTP协议如何发送大于64K的数据?(回答有启发意义的都给分,可以加100分)
- 主菜单的文本如何修改?比如把‘文件’菜单的‘文件’改为‘test’?我用CMenu的ModifyMenu()不管用!
- 迷茫
- 如何获取页文件大小
- 谁推荐一个开源的http下载类代码,小巧一点的
class matrix
{
...
public:
double *MatrixTranpose(double *A,double *B,int m,int n);
};// matrix.cpp
void matrix::MatrixTranpose(double *A,double *B,int m,int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<m;j++)
B[i*m+j]=A[j*n+i];
return B;
}
e:\example\matrix.h(16) : see declaration of 'MatrixTranpose'
E:\example\matrix.cpp(33) : error C2040: 'MatrixTranpose' : 'void (double *,double *,int,int)' differs in levels of indirection from 'double *(double *,double *,int,int)'
执行 cl.exe 时出错.
不太明白这里的错误
class matrix
{
double *p;
int m_row,m_col;
void init(int row,int col);
public:
//matrix(const matrix&);
//......matrix MatrixTranpose();matrix(int row,int col);
matrix(double *a,int row,int col);~matrix();int rows ()const {return m_row;};
int cols()const{return m_col;};};
void matrix::init(int row,int col){
try{ASSERT(row>0);
ASSERT(c>0);
if(row>0 && col) p = new double[row * col];
}catch(...)
{}
m_row = row;
m_col = col;
}
matrix:: matrix (double *a,int r,int c):p(NULL){
init(r,c);
memcpy(p,a,sizeof(double) *row * col );
}
matrix ::matrix(int r,int c):p(NULL){
init(r,c);
};
matrix::~matrix(){delete []p;}matrix matrix ::MatrixTranpose(){
int row =rows(),col=cols();
matrix mat(col,row);
int i,j;
for(i=0;i<col;i++)
for(j=0;j<row;j++)
mat.p[i*col +j] = p[j *row + i];
return mat;
}这才略有点,C++的矩阵的味道。