Hirdetés
- Luck Dragon: Asszociációs játék. :)
- koxx: A bajnokok egere? Lamzu Maya Champions Edition 8K gamer egér
- sziku69: Fűzzük össze a szavakat :)
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Klaus Duran: HP wifi nyomtatás+ win11.
- ubyegon2: Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- Sub-ZeRo: Euro Truck Simulator 2 & American Truck Simulator 1 (esetleg 2 majd, ha lesz) :)
- sziku69: Szólánc.
- Brogyi: CTEK akkumulátor töltő és másolatai
- Gurulunk, WAZE?!
Új hozzászólás Aktív témák
-
vimes
senior tag
Na, most átnéztem a kódot, és megtaláltam a szegmentálási hiba okát is:
for(int j = 0; i < oszlopok; j++)
gj
volt vagy fél óra mire ezt a pitiáner hibát észrevettem....Közben a gyakvezéremtől is kaptam választ, amiből megértettem, hogy mit rontottam el, és hogy miért is nem értettem a fordító hibaüzenetét, most már (azt hiszem
) világos a szitu, úgyhogy úgy néz ki megoldódott a problémám 
-
vimes
senior tag
Na így már lefordult, viszont el is szállt szegmentálási hibával
az első mátrix első sorát jól kiírta, aztán kb. beterítette a konzolt a memóriaszemét, meg a sok 0
De mivel már a mátrix elemeinek kiíratásánál elszállt, legalább az sanszos, hogy a konstruktorban csesztem el valamit. Majd holnap (ma) délelőtt átnézem alaposan a kódot.Hát igen, van egy kis kilométer-hiányom C++-ban
az látszik. Kb. 2-3 órát programozgattam szemeszter kezdete óta, elvették az időm a többi tárgyak 
"A C-s tömbök azért elég rémisztően néznek ki, meg a félig magyar metódus- és változónevek is."
Nem vagyok nagy operator overloading-császár, de gyanús hogy abban sem szoktak vezérlési szerkezeteket használni
Nyilván nem a legjobb a kód stílusa, most csak az lenne a lényeg, hogy működő legyen a kód, leadhassam, aztán készülhessek a C++ gyakvizsgára. Akkor már lesz is időm leülni rendesen programozni...Ja, és köszönöm szépen mindkettőtöknek a segítséget!
-
vimes
senior tag
Sziasztok,
Alább látható az általam írt forráskód (a program két mátrixot ad össze, von ki, szoroz össze). A problémám, hogy a main függvényben, mikor az operator overloading-ot szeretném használni, arra a három sorra error-t kapok a fordítótól, de nem értem miért...
(Szerintem elég az operator overloading-os részt elolvasni a kódból, de mivel én nem tudom pontosan hol a hiba, ez nem 100%)#include <iostream>
#include <iomanip>
using namespace std;
class Matrix{
private:
unsigned int sorok;
unsigned int oszlopok;
double** elemek;
public:
Matrix(unsigned int n, unsigned int m, double szam) : sorok(n), oszlopok(m){
elemek = new double*[n];
for(int i = 0; i < n; i++)
{
elemek[i] = new double[m];
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
elemek[i][j] = szam;
}
}
}
Matrix(unsigned int n, unsigned int m) : sorok(n), oszlopok(m){
elemek = new double*[n];
for(int i = 0; i < n; i++)
{
elemek[i] = new double[m];
}
for(int i = 0; i < n; i++)
{
for(int j = 0; j < m; j++)
{
cout << (i+1) << ". sor " << (j+1) << ". oszlop: ";
double ertek;
cin >> ertek;
elemek[i][j] = ertek;
}
}
cout << endl;
}
Matrix(Matrix &masik){
sorok = masik.sorok;
oszlopok = masik.oszlopok;
elemek = new double*[masik.sorok];
for(int i = 0; i < sorok; i++)
{
elemek[i] = new double[oszlopok];
}
for(int i = 0; i < sorok; i++)
{
for(int j = 0; j < oszlopok; j++)
{
elemek[i][j] = masik.elemek[i][j];
}
}
}
~Matrix(){
for(int i = 0; i < sorok; i++){
delete[] elemek[i];
}
delete[] elemek;
}
unsigned int getSorok() const {return sorok;}
unsigned int getOszlopok() const {return oszlopok;}
double getElem(const unsigned int n, const unsigned int m) const {return elemek[n-1][m-1];}
void setElem(const unsigned int n, const unsigned int m, const double szam){
cout << "Mátrix(" << n << "x" << m << ") eleme: " << elemek[n-1][m-1] << endl;
elemek[n-1][m-1] = szam;
cout << "(" << n << "x" << m << ") új értéke: " << elemek[n-1][m-1] << endl;
}
void dispMatrix(){
for(int i = 0; i < sorok; i++)
{
for(int j = 0; i < oszlopok; j++)
{
cout << left << setw(6) << elemek[i][j] << " ";
}
cout << endl;
}
}
Matrix operator+(const Matrix &B){
Matrix C(this->sorok, this->oszlopok, 0);
if((this->sorok == B.sorok) && (this->oszlopok == B.oszlopok)){
for(int i = 0; i < this->sorok; i++){
for(int j = 0; j < this->oszlopok; j++){
C.elemek[i][j] = this->elemek[i][j] + B.elemek[i][j];
}
}
return C;
}
else{
cout << "A mátrixokon a '+' művelet nincs értelmezeve!" << endl;
return C;
}
}
Matrix operator-(const Matrix &B){
Matrix C(this->sorok, this->oszlopok, 0);
if((this->sorok == B.sorok) && (this->oszlopok == B.oszlopok)){
for(int i = 0; i < this->sorok; i++){
for(int j = 0; j < this->oszlopok; j++){
C.elemek[i][j] = this->elemek[i][j] - B.elemek[i][j];
}
}
return C;
}
else{
cout << "A mátrixokon a '-' művelet nincs értelmezeve!" << endl;
return C;
}
}
Matrix operator*(const Matrix &B){
Matrix C(this->sorok, B.oszlopok, 0);
if(this->oszlopok == B.sorok){
for(int i = 0; i < this->sorok; i++){
for(int j = 0; j < B.oszlopok; j++){
int szum = 0;
for(int k = 0; k < this->oszlopok; k++){ // lehetne akár k < B.getSorok() is, hiszen ez a feltétele a mátrixszorzásnak...
szum += this->elemek[i][k] * B.elemek[k][j];
}
C.elemek[i][j] = szum;
}
}
return C;
}
else{
cout << "A mátrixokon a '*' művelet nincs értelmezeve!" << endl;
return C;
}
}
};
int main(){
//konstruktor kipróbálása
Matrix A(3,3);
Matrix B(3,3);
//operator overloading kipróbálása
Matrix C = A + B; //hibás elvileg...
Matrix D = A * B; //hibás elvileg...
Matrix E = A - B; //hibás elvileg...
//dispMatrix(), getSorok(), getOszlopok()...
cout << "C mátrix: A + B" << endl;
C.dispMatrix();
cout << "C mátrix dimenziója: " << C.getSorok() << "x" << C.getOszlopok() << "." << endl;
cout << "D mátrix: A * B" << endl;
D.dispMatrix();
cout << "D mátrix dimenziója: " << D.getSorok() << "x" << D.getOszlopok() << "." << endl;
cout << "E mátrix: A - B" << endl;
E.dispMatrix();
cout << "E mátrix dimenziója: " << E.getSorok() << "x" << E.getOszlopok() << "." << endl;
//getElem(), setElem()...
//válasszuk ki 'A' mártix egy tetszőleges elemét, és módosítsuk egy általunk választott értékre...
int n, m;
double v;
cout << "'A' melyik elemét?" << endl;
cout << "Oszlop: ";
cin >> n;
cout << "Sor: ";
cin >> m;
cout << "Erre az értékre: ";
cin >> v;
A.setElem(n, m, v);
//kérjük le a módosított elem értékét még egyszer...
cout << A.getElem(n, m) << endl;
return 0;
}Ezt kapom a g++ -tól:
matrix2.cpp: In function ‘int main()’:
matrix2.cpp:154:15: error: invalid initialization of non-const reference of type ‘Matrix&’ from an rvalue of type ‘Matrix’
Matrix C = A + B;
^
matrix2.cpp:46:3: note: initializing argument 1 of ‘Matrix::Matrix(Matrix&)’
Matrix(Matrix &masik){
^
matrix2.cpp:155:15: error: invalid initialization of non-const reference of type ‘Matrix&’ from an rvalue of type ‘Matrix’
Matrix D = A * B;
^
matrix2.cpp:46:3: note: initializing argument 1 of ‘Matrix::Matrix(Matrix&)’
Matrix(Matrix &masik){
^
matrix2.cpp:156:15: error: invalid initialization of non-const reference of type ‘Matrix&’ from an rvalue of type ‘Matrix’
Matrix E = A - B;
^
matrix2.cpp:46:3: note: initializing argument 1 of ‘Matrix::Matrix(Matrix&)’
Matrix(Matrix &masik){
^Egyszerűen nem látom, hogy hol van a hiba a kódban, ami a fenti errort okozza...

Előre is köszönöm a segítséget!
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- iPhone topik
- Horgász topik
- World of Warships
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Autós topik
- Honor Magic5 Pro - kamerák bűvöletében
- Úgy állhat le a 16 GB-os GeForce RTX 5060 Ti gyártása, hogy közben nem áll le
- Spórolós topik
- exHWSW - Értünk mindenhez IS
- Gaming notebook topik
- További aktív témák...
- Game Pass Ultimate előfizetés azonnal, problémamentesen, méghozzá OLCSÓN! Immáron 8 éve!
- ÁRGARANCIA! Épített KomPhone Ryzen 5 5600X 16/32/64GB RAM RTX 5050 8GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone Ryzen 7 7700X 32/64GB RAM RX 7800 XT 16GB GAMER PC termékbeszámítással
- HIBÁTLAN iPhone 13 128GB Pink -1 ÉV GARANCIA - Kártyafüggetlen, MS4243, 100% Akksi
- Xiaomi Redmi Note 12 128GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: Laptopszaki Kft.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
volt vagy fél óra mire ezt a pitiáner hibát észrevettem....


