Kezdőoldal » Számítástechnika » Programozás » Mi a probléma ebben a C++ kódban?

Mi a probléma ebben a C++ kódban?

Figyelt kérdés

A Kód:


Vektor operator*(double val, const Vektor& vec){

for (size_t i = 0; i < vec.size(); i++)

vec[i] = vec[i] * val;

}



A Hiba:

vektor.cpp:53:16: error: assignment of read-only location ‘(& vec)->Vektor::operator[](i)’

vec[i] = vec[i] * val;

^

vektor.cpp:54:1: error: no return statement in function returning non-void [-Werror=return-type]

}



Itt a kód részlet, amiben az indexelést oldom meg:

double& Vektor::operator[](size_t idx){

if(idx >= nElements) throw "AGKMB1";

return pVec[idx];

}

const double& Vektor::operator[](size_t idx) const{

if(idx >= nElements) throw "AGKMB1";

return pVec[idx];

}



Tehát van const és anélküli változata is, így nem értem mért írja, hogy read-only adatról van szó.

(A feladat megoldásához kell a const és a sima operátoros overloadja szóval nem tudok a constosat kitörölni, hogy működjön, ha egyátalán ez a baj :D )



2020. márc. 3. 19:20
 1/5 A kérdező kommentje:

Oké, megtaláltam a hibát, de legalább ezzel a kérdéssel segítem a 2. féléves BMEs kollegágat.


Egy új vektort kellett létehozni és abba bele rakni a már megszorzott értékeket.

2020. márc. 3. 19:26
 2/5 anonim ***** válasza:
100%

Olvasni tudni kell ;)

Odaírta az elsőhöz, hogy const, és te annak akarsz értéket módosítani.

Ezután nem void függvényben Érték nélkül tértél vissza.


const double& Vektor::operator[](size_t idx) const

Ez mi? Ilyen nem létezik.

És nincs különbség az előző deklaráció és eközött, amit a fordító kezelni tudna. A fordító honnan tudná, hogy konstansra hívja-e vagy sem? Arról nem is beszélve, hogy nincs olyan, hogy konstans visszatérési érték.

2020. márc. 3. 20:13
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

2# Valami külömbség csak ha ha mindkét függvényt megkellett csinálni.


(Megadták a deklarációt headerben, nekem csak cpp fileban implementálni kellett. Meg előadásban is példa ként felhozzák)


Amúgy ha valaki tudja, mert én nem.


Mért kell a constal ugyan azt implementálni, ha maximálisan ugyan azt csinálja?

2020. márc. 3. 21:08
 4/5 anonim ***** válasza:
100%

Csak const-tal kéne, a másik felesleges.

Azért kell const-tal definiálni, hogy meg lehessen hívni const változóra is, különben errort dob a fordító.

2020. márc. 3. 21:14
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:
76%
#3 A konstans metódusok megszorítása, hogy nem módosíthatnak az objektum állapotán, és ennek az egyik kitétele, hogy ők maguk is kizárólag konstans metódusokat hívhatnak meg. Ha nem lenne konstans változata az index operátornak, akkor nem tudnál indexelni konstans metódusokban.
2020. márc. 4. 00:11
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!