01/10/2018, 15:26

Code bị lỗi : Không gọi được đến hàm

Mọi người giúp em sửa lỗi này với ạ. em làm theo bài mẫu với con trỏ 1 chiều thì chạy bình thường nhưng làm với mảng 2 chiều lại bị lỗi không gọi được hàm với 3 đối. code của em đây em cảm ơn ạ!!

#include<iostream>
#include<stdio.h>
#include<conio.h>
using namespace std;
class matran
{
	private:
		int m,n;
		float **A;
	public:
		matran(int cot,int hang,float **b);
		void in();
};
void matran::in()
{
	cout<<"
";
	for(int i=0;i<m;i++)
	
	{	cout<<"
"; // them 
 de in ma tran dung hon
		for(int j=0;j<n;j++)
		cout<<"	 "<<A[i][j];
	}
		
};
matran::matran(int cot,int hang,float **b)
	{
	n=cot;
	m=hang;
	A=new float *[m];
	for(int i=0;i<m;i++)
	A[i]=new float [n];
	for(int i=0;i<m;i++)
		 for(int j=0;j<n;j++)
 			{
 				A[i][j]=b[i][j];
 			}
	};
	int main()
	float a[3][3]={{1,2,3},{1,2,3},{1,2,3}}; 
	matran B1(3,3,a);
	B1.in();
}
HK boy viết 17:36 ngày 01/10/2018

Bạn đưa code hàm in lên đi.

Xuan Pham viết 17:42 ngày 01/10/2018

mình thêm hàm in rồi đấy bạn ơi!!

rogp10 viết 17:34 ngày 01/10/2018

Mảng đó không gán được đâu cách tính địa chỉ khác nhau lắm.

Xuan Pham viết 17:39 ngày 01/10/2018

Bạn giải thích giúp mình với được không? đang làm bài tập mà mắc quá không hiểu tại sao!

rogp10 viết 17:41 ngày 01/10/2018

int** phải trỏ đến int* nên muốn tính A[i][j] với A là int** phải có A[i] trước đã. Ta biết A[i] = *(A+i) rồi, mỗi slot của A là int* cũng là vùng nhớ nên &A[i][j] = *(A+i) + j.

Nhưng nếu A là mảng tĩnh thì A có kiểu int[][m] nên &A[i][j] = (int*)A + m*i + j.

Xuan Pham viết 17:37 ngày 01/10/2018

Cảm ơn bạn, liệu có hướng nào giải quyết không? Hay phải bỏ luôn phần cấp phát trong hàm để viết một hàm khác?

rogp10 viết 17:36 ngày 01/10/2018

Thì bạn mock đỡ một hàm chuyển đổi để test logic thôi, chứ tiếp nhận mảng tĩnh hai chiều thì phải cố định số cột đó.

Xuan Pham viết 17:26 ngày 01/10/2018

cảm ơn bạn nhé , mình đã chạy được code với hàm mới rồi!

Bài liên quan
0