Mi a probléma ebben a C++ kódban?
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 )
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.
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.
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?
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ó.
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
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!