- Alacsony profilú, madzagmentes klaviatúrák jöttek a Razer színeiben
- ASUS ROG csúcslap érkezett, ezúttal a "lopakodó" fajtából
- Átvette a DRAM-piac trónját az SK Hynix a Samsungtól
- Pénztárcabarát, ugyanakkor trendi mikrotorony jött a Jonsbótól
- A Linux támogatását vágja meg leginkább az Intel leépítése
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- Calibre, az elektronikus könyvtár
- VR topik (Oculus Rift, stb.)
- NVIDIA GeForce RTX 5070 / 5070 Ti (GB205 / 203)
- AMD Ryzen 9 / 7 / 5 9***(X) "Zen 5" (AM5)
- Egérpad topik
- Először égett le egy újságnál a GeForce RTX 5090
- Milyen belső merevlemezt vegyek?
- Kezdő fotósok digitális fényképei
- Nikon DSLR topik
Ú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
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Spórolós topik
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- XPEnology
- Milyen légkondit a lakásba?
- E-roller topik
- Elektromos autók - motorok
- Samsung Galaxy A34 - plus size modell
- Samsung Galaxy S21 Ultra - vákuumcsomagolás
- Calibre, az elektronikus könyvtár
- Elemlámpa, zseblámpa
- További aktív témák...
- Dell 16 Inspiron 5625 FHD+ IPS Ryzen5 5625U 4.3Ghz 16GB 512GB SSD Radeon RX Vega7 Win11 Garancia
- Új Dell 14 Inspiron 5415 FHD IPS Ryzen5 5500U 4.0Ghz 8GB 256GB SSD Radeon RX Vega7 Win11 Garancia
- Dell 14 Latitude 5440 FHD IPS i5-1245U vPro 4.4Ghz 10mag 16GB 256GB Intel Iris XE Win11 Pro Garancia
- HP 14 Elitebook 640 G9 FHD IPS i5-1235U 4.4Ghz 10mag 16GB 256GB Intel Iris XE Win11 Pro Garancia
- HP 14 Pavilion FHD IPS i5-1135G7 4.2Ghz 16GB RAM 512GB SSD Intel Iris XE Graphics Win11 Garancia
- Hordozható Gamer Számítógép / PC! HP Omen X 1000P / I7 7820HK / GTX 1080 8GB / 16GB DDR4
- Honor 70 128GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba ár! HP 255 G7 - AMD A4 I 4GB I 128SSD I HDMI I 15,6" FHD I Radeon I HDMI I W11 I Cam I Gari!
- BESZÁMÍTÁS! AOC 24B1XHS 60Hz FHD IPS 7ms monitor garanciával hibátlan működéssel
- Gamer Notebook! Acer Nitro 5! Csere-Beszámítás! I5 11400H / RTX 3050Ti / 16GB DDR4 / 500GB SSD!
Állásajánlatok
Cég: FOTC
Város: Budapest