Błąd przy kompilacji.

0

Mam następujący kod:

main.cpp

#include <iostream>
#include <ctime>
#include "macierz.h"
#include "wektor.h"

int main(){
	using namespace std;

	//tablice, które zostaną wykorzystane do utworzenia macierzy
	int** macierz1 = new int*[5];
	for (int i = 0; i < 5; i++)
		macierz1[i] = new int[5];

	int** macierz2 = new int*[5];
	for (int i = 0; i < 5; i++)
		macierz2[i] = new int[5];

	//uzupelnienie tablic
	srand(time(NULL));
	for (int i = 0; i < 5; i++){
		for (int j = 0; j < 5; j++){
			macierz1[i][j] = rand() % 10 + 1;
			macierz2[i][j] = rand() % 10 + 1;
		}
	}

	//utworzenie macierzy
	Macierz *macierz1 = new Macierz(5, 5, macierz1);
	Macierz *macierz2 = new Macierz(5, 5, macierz2);

	system("pause");
	return 0;
}

oraz macierz.cpp

#include "macierz.h"
#include <cstring>

//konstruktory
Macierz::Macierz(int i, int j){
	wiersze = i;
	kolumny = j;

	int** macierz = new int*[wiersze];
	for (int it = 0; it < kolumny; it++)
		macierz[it] = new int [kolumny];
}

Macierz::Macierz(int i, int j, int** wartosc){
	wiersze = i;
	kolumny = j;
	wartosci = wartosc;
}

Macierz::Macierz(int i, int j, Macierz &podstawowy){
	wiersze = i;
	kolumny = j;

	int** macierz = new int*[wiersze];
	for (int it = 0; it < kolumny; it++)
		macierz[it] = new int[kolumny];

	memcpy(wartosci, podstawowy.wartosci, sizeof(int) * wiersze * kolumny);
}

//metody dostepowe
int Macierz::dostepWiersze(){
	return wiersze;
}

int Macierz::dostepKolumny(){
	return kolumny;
}

int** Macierz::dostepWartosci(){
	return wartosci;
}

Podczas kompilacji otrzymuję błąd o treści: "differs in levels of indirection from int**", który odnosi się do linijek:

        Macierz *macierz1 = new Macierz(5, 5, macierz1);
	Macierz *macierz2 = new Macierz(5, 5, macierz2);

Próbowałem to naprawić i nie wiem za bardzo jak sobie poradzić z tym problem. Prosiłbym o pomoc.
Przy okazji jak ten kod wygląda od strony jakościowej? Liczę na wskazówki, ponieważ jestem początkującym.

0

daj też macierz.h

0
ujemny napisał(a):

daj też macierz.h

macierz.h

#ifndef __MACIERZ_H__
#define __MACIERZ_H__

class Macierz{
public:
	Macierz(int i, int j);
	Macierz(int i, int j, int** wartosc);
	Macierz(int i, int j, Macierz &podstawowy);
	~Macierz();

	int dostepWiersze();
	int dostepKolumny();
	int** dostepWartosci();

private:
	int wiersze;
	int kolumny;
	int** wartosci;
};

#endif
1
int** macierz1
Macierz *macierz1
0
ujemny napisał(a):
int** macierz1
Macierz *macierz1

No i co w związku z tym?

0
amadeusz1 napisał(a):
ujemny napisał(a):
int** macierz1
Macierz *macierz1

No i co w związku z tym?

To, że nie możesz mieć dwóch zmiennych o tej samej nazwie

0
ujemny napisał(a):
amadeusz1 napisał(a):
ujemny napisał(a):
int** macierz1
Macierz *macierz1

No i co w związku z tym?

To, że nie możesz mieć dwóch zmiennych o tej samej nazwie

Racja, dzięki.
Drugi problem dotyczy tego, że mam trochę "chałupniczo" zrobiony konstruktor kopiujący... jak powinien wyglądać taki konstruktor 'z prawdziwego zdarzenia'?

0
ujemny napisał(a):

Konstruktory

Czyli w sumie chodzi o skopiowanie początkowej tablicy, pytanie w jaki sposób poprawnie kopiować te elementy?

Macierz::Macierz(const Macierz &podstawowy){
	for (int i = 0; i < wiersze; i++){
		for (int j = 0; j < kolumny; j++){
			
//?

		}
	}
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1