- Telekom mobilszolgáltatások
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
- iPhone topik
- Samsung Galaxy Z Fold7 - ezt vártuk, de…
- Macrodroid
- Samsung Galaxy S22 Ultra - na, kinél van toll?
- Honor Magic7 Pro - kifinomult, költséges képalkotás
- Négy színben tetszeleg a Galaxy S25 FE
- Bemutatkozott a Poco X7 és X7 Pro
- Motorola Edge 50 Neo - az egyensúly gyengesége
Hirdetés
Talpon vagyunk, köszönjük a sok biztatást! Ha segíteni szeretnél, boldogan ajánljuk Előfizetéseinket!
Új hozzászólás Aktív témák
-
jattila48
aktív tag
válasz
kemkriszt98 #4043 üzenetére
De hát leírtam, hogy nem hívódik. Definiálni kell a megfelelő copy ctort a fv. visszatérési értékének létrehozásához, de a copy elision miatt NEM hívódik meg. Ez azért lehet így, mert az optimalizálás (copy elision) a fordítás után egy későbbi fázosban történik, a fordító pedig előre nem tudja, hogy majd lehetséges lesza alkalmazni a copy elision-t, ezért biztos ami biztos, megköveteli a copu ctor definiálását.
-
jattila48
aktív tag
válasz
kemkriszt98 #4041 üzenetére
A második esetben az értékadó operátorod hívódik meg (ami szintén nem egészen jól van megírva, ld. az előző kommentemet). Viszont az A::initFromFile függvényed érték szerint ad vissza A típusú objektumot (egyébként vissza adhatná new-val létrehozott objektum címét is, vagy még jobb, ha unique_ptr-ben adja vissza), aminek a létrehozásához mindenképpen szükség van a copy ctor.-ra. Látni kéne ezt a fv.-t, mert lehet, hogy a visszatérő értéket nem bal értékből állítja elő (pl. return A() formában valamilyen ctor.-ral, ahol a ctor.-ral létrehozott objektum a fv. törzsében temporális lesz), ez esetben pedig a stack-en történő visszatérő érték létrehozásához a const A& argumentumú copy ctor-ra van szükség. Megjegyzendő, hogy a modern C++ fordítók ilyen esetben a copy elision nevezetű optimalizálást fogják végrehajtani, vagyis valójában nem hívják meg a copy ctort, hanem egyből a stacken mint visszatérő értéket hozzák létre a szóban forgó temporálist. Ennek ellenére a megfelelő copy ctor definiálását megkívánják. Összefoglalva: valószínűleg az initFromFile fv.-ed visszatérő értékének létrehozásához követeli meg a fordító a megfelelő copy ctort.
-
jattila48
aktív tag
válasz
kemkriszt98 #4039 üzenetére
Ahogy EQMontoya mondta, a copy ctor.-nak A(const A&), az értékadó operátornak pedig A& operator=(const A&) típusúnak kell lenni. Mivel neked ilyen ctor.-od nem volt, ezért szólt a fordító. Amit te írtál az is copy ctor, csak a programodban nem volt megfelelő, mert a változót A::initFromFile("asd") fv.-el akartad inicializálni, aminek a visszatérő értéke nem balérték (nem lehet neki értéket adni, nem lehet a címét képezni,... A fv.-ek visszatérő értékei nem balértékek, hanem csak temporálisok). A C++ szabvány szerint nem balérték pedig csak konstans referenciához köthető. Ezért nem volt jó a te copy ctor.-od, és ezért jó a const referencia argumentumú copy ctor. Ugyanígy az értékadó operátorra is. Ha az inicializálás/értékadás jobboldalán nem fv. visszatérési értéke lenne, hanem egy közönséges változó (balérték), akkor a te ctor.-os és értékadó operátorod is jó lenne. Egyébként milyen fordítót használsz? Mert a MSVC a szabványtól eltérően megengedi nem balérték nem const referenciához kötését. Lehet, hogy azzal működne a programod.
Nem próbáltam ki, de szerintem itt lehet a baj. -
EQMontoya
veterán
válasz
kemkriszt98 #4037 üzenetére
Ezt nem siekrült felfognom. Melyik esetben mi nem hívódik?
A const referencia paraméter pedig természetesen vonaktozik az operator=-re is.
-
EQMontoya
veterán
válasz
kemkriszt98 #4035 üzenetére
A copy konstruktorodnak referencia szerint (és konstansként) kellene átvennie a paramétert.
-
kingabo
őstag
válasz
kemkriszt98 #2556 üzenetére
Az ideiglenes megoldások a legállandóbbak!
-
Jester01
veterán
válasz
kemkriszt98 #2556 üzenetére
Egyszeri használatra meg ez fölösleges program, sokkal egyszerűbben is le lehet ezeket gyártani.Na mindegy.
-
Jester01
veterán
válasz
kemkriszt98 #2554 üzenetére
Azért azt érzed, hogy ez borzalmas, ugye?
A hiba mindenesetre itt van: string s = "PC" + a+b+c+d;
Itt a + operátor az nem karakter hozzáfűzés, hanem a "PC" konstanshoz képest pointer művelet. Éljen az operator overloading
Egy lehetséges javítás: string s = string("PC") + a + b + c + d; -
sssirius
tag
válasz
kemkriszt98 #2550 üzenetére
Kipróbáltam és valóban 0-t eredményez bármilyen karakter beadása esetén. A system("PAUSE") hívást nem használtam még sosem, én cin.ignore(10000, "\n")-t használnék és utána cin.get().
Halvány emlékeimben még rémlik olyasmi, hogy a következő beolvasás előtt érdemes meghívni a cin.sync()-et is.A cin.clear() csak az error flag-et fogja helyrerázni, de ha közben leütsz egy billentyűt akkor az bennmarad a bufferben ezért kell a cin.ignore(10000, "\n") ami legfeljebb 10000 karaktert figyelmen kívül hagy, amíg nem érkezik egy újsor karakter. Így az ENTER-t leütve tudod folytatni a programodat (ha jól sejtem azért van benn a system("PAUSE").
-
WonderCSabo
félisten
válasz
kemkriszt98 #2546 üzenetére
Hogy hogy mg sem áll többet? Mi a while feltétele? Posztold azt is.
-
WonderCSabo
félisten
válasz
kemkriszt98 #2543 üzenetére
-
sssirius
tag
válasz
kemkriszt98 #2541 üzenetére
Értem, oké. Ha kételkedsz a szintaktika helyességében, akkor érdemes a függvény hívását kikommentezni. Bár nem biztos, hogy olyan hibaüzenetet kaptál volna ami nyomra vezet.
Nem akartam rosszindulatúan kötekedni, csak én mindig parancssorból szoktam fordítani (new Windows), és ilyen esetben ott szerintem kiírná, hogy mi a baja. -
sssirius
tag
válasz
kemkriszt98 #2536 üzenetére
Ahogy dabadab kolléga mondja... de azért egy fordításnyi fáradtságot szerintem rá lehetne szánni az ilyesmire, ha már annyira érdekel. Ez csak személyes vélemény.
-
válasz
kemkriszt98 #2536 üzenetére
"Meg lehet ezt hívni 1 paraméterrel?"
Nem, mert le se fordul, default parametereket csak utolsokent lehet megadni.
-
LW
őstag
válasz
kemkriszt98 #2536 üzenetére
Szia!
Jobb oldalra szokás tenni az alapértelmezett értékes paramétereket, így az ismereteim szerint nincs értelme.
Pl. C# azt hiszem szól is ezért. -
cattus
addikt
válasz
kemkriszt98 #2456 üzenetére
-
WonderCSabo
félisten
válasz
kemkriszt98 #2453 üzenetére
Ha jelentkezel a BME-re, akkor van ilyen oldal.
Egyébként szerintem nincs.
-
válasz
kemkriszt98 #2402 üzenetére
Hozzalinkelted forditasnal a glutot?
Ú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!
- Projektor topic
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Kormányok / autós szimulátorok topikja
- Elektromos autók - motorok
- AMD Navi Radeon™ RX 7xxx sorozat
- E-roller topik
- Kerékpárosok, bringások ide!
- Milyen billentyűzetet vegyek?
- HBO Max
- További aktív témák...
- MacSzerez.com - 2017 MacBook Pro 15" / i7 2.9GHz - 4 Mag / 16GB RAM / 512GB SSD / Radeon Pro 4GB
- MacSzerez.com - iPhone 13 Pro Max / 128GB / Asztro szürke / Garancia!
- MacSzerez.com - iPhone 13 Pro Max / 128GB / Sierra Blue / Új Apple akkumulátor!
- Nitro AN515-57 15.6" FHD IPS i5-11400H RTX 3050 16GB 512GB NVMe + 1TB HDD magyar vbill gar
- MacSzerez.com - iPad Pro 11" / M1 / Ezüst / Wifi / 128GB / Garancia
- Kaspersky, BitDefender, Avast és egyéb vírusírtó licencek a legolcsóbban, egyenesen a gyártóktól!
- Microsoft Surface Laptop 5 13.5" i5-1245U 16GB 512GB 1év garancia
- Microsoft Surface Laptop 5 13.5" i5-1245U 16GB 256GB 1év garancia
- MacBook Pro 16 2021 M1 Max 32GB 512GB 1 év garancia
- Gamer PC-Számítógép! Csere-Beszámítás! I5 14400F / RX 6900XT 16GB / 32GB DDR5 / 1TB SSD
Állásajánlatok
Cég: FOTC
Város: Budapest