- btz: Internet fejlesztés országosan!
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- Luck Dragon: Asszociációs játék. :)
- VoidXs: Tényleg minden játék optimalizálatlan?
- sziku69: Fűzzük össze a szavakat :)
- Hieronymus: A németországi vasúthálózat
- sziku69: Szólánc.
- gban: Ingyen kellene, de tegnapra
- Gurulunk, WAZE?!
- Hieronymus: Három júniusi képem
Ú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.
-
dabadab
titán
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.
-
dabadab
titán
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!
- Új! Számla + 1-3ÉV Gari! Áfás! Gamer PC - Számítógép! R5 8400F / RX 9060XT / 32GB DDR5 / 1TB SSD M.2
- Új! Számla + 1-3ÉV Gari! Áfás! Gamer PC - Számítógép! I5 14400F / RTX 3080 / 32GB DDR5 / 1TB SSD M.2
- Új! Számla + 1-3ÉV Gari! Áfás! Gamer PC - Számítógép! I5 14400F / RTX 5070 / 32GB DDR5 / 1TB SSD M.2
- Új! Számla + 1-3ÉV Gari! Áfás! Gamer PC - Számítógép! I5 14400F / RTX 5060 Ti / 32GB DDR5 / 1TB SSD
- AKCIÓ!!! GAMER PC: Új i5-14400F +RTX 5060/5060Ti/5070/5070Ti +16-64GB DDR4! GAR/SZÁMLA! 50 FÉLE HÁZ!
- Erő és sebesség? Most az Öné lehet! Ráadásul kamatmentes rèszletre is!
- 120 - Lenovo Legion Pro 5 (16ARX8) - AMD Ryzen 7 7745HX, RTX 4070 (48 hónap garancia!)
- Samsung Galaxy S23 Ultra , 8/256 GB , Kártyafüggetlen
- Csere-Beszámítás! Asztali számítógép játékra! I5 14400F / RX 6900 XT 16GB / 32GB DDR5 / 1TB SSD
- Dell latitude, precision, xps, magyar világítós billentyűzetek eladóak
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest