Chirurgia endoscopică a hipofizei
"Standardul de aur" în chirurgia hipofizară îl reprezintă endoscopia transnazală transsfenoidală. Echipa NeuroHope este antrenată în unul din cele mai mari centre de chirurgie a hipofizei din Europa, Spitalul Foch din Paris, centrul în care a fost introdus pentru prima dată endoscopul în chirurgia transnazală a hipofizei, de către neurochirurgul francez Guiot. Pe lângă tumorile cu origine hipofizară, prin tehnicile endoscopice transnazale pot fi abordate numeroase alte patologii neurochirurgicale. www.neurohope.ro |
Unde e eroarea? std::unordered_map
Ultima postare: iul 18 2022 10:47, Inițiat de
wolfenste
, iun 21 2022 12:23
·
0
#1
Publicat: 21 iunie 2022 - 12:23
#include <iostream> #include <unordered_map> class Node { public: std::string m_name; Node (std::string name); }; Node::Node (std::string name) { m_name = name; } int main (void) { std::unordered_map <std::string, Node> map; auto n {Node ("unu")}; // No error map ["unu"] = Node ("unu"); // Error // candidate: 'Node::Node(std::string) // candidate expects 1 argument, 0 provided return 0; } Daca folosesc un vector in loc de unordered_map functioneaza fara eroare. Daca fac Node fara constructor functioneaza si cu unordered_map. Stiu ca e ceva stupid dar momentan renunt ca pierd timpul. Poate gaseste cineva si imi spune si mie. Editat de wolfenste, 21 iunie 2022 - 12:28. |
#2
Publicat: 21 iunie 2022 - 13:22
Nu am mai lucrat cu C++ de foarte mulți ani, așa ca sunt șanse mari să greșesc, dar
1. Când ai declarat constructorul tău cu argument name, ai eliminat constructorul implicit fără nici un argument. 2. map["unu"] mai întâi va încerca să creeze un obiect de tip Node folosind constructorul implicit, care în cazul tău nu mai există => eroarea cu 0 provided. |
#4
Publicat: 21 iunie 2022 - 13:50
tavitu, on 21 iunie 2022 - 13:22, said:
Nu am mai lucrat cu C++ de foarte mulți ani, așa ca sunt șanse mari să greșesc, dar 1. Când ai declarat constructorul tău cu argument name, ai eliminat constructorul implicit fără nici un argument. 2. map["unu"] mai întâi va încerca să creeze un obiect de tip Node folosind constructorul implicit, care în cazul tău nu mai există => eroarea cu 0 provided. Pff, da acum merge cu un constructor gol in plus pe acolo. 2. Eroarea imi spune ca este folosit constructorul meu Node:Node (std::string name) si ca nu ii furnizez argumentul cerut in definitie dar eu il furnizam. E vina mea, fara indoiala, dar tine si de modul neintuitiv in care lucreaza unordered_map de vreme ce in alte circumstante (cu vector sau variabila normala) compilatorul stie sa se descurce. Multumesc frumos! |
#8
Publicat: 26 iunie 2022 - 08:50
Ce treaba are map cu constructorul lui Node? De ce ar trebui sa stie map ce argument primeste constructorul lui Node? map ["unu"] ar trebui sa ia un obiect gata facut de expresia Node ("unu").
Ceva se intampla si cu map asta, daca incerci sa compilezi o sa primesti un mesaj de eroare mult mai lung in care map se plange el de ceva dar nu inteleg eu ce, are de-a face cu definitia mai multor chestii din librarie si nu m-as apuca acum sa sap. E mai rapid sa intrebi pe softpedia. |
#9
Publicat: 26 iunie 2022 - 21:29
map["unu"] ia obiectul daca-l gaseste, dar daca nu-l gaseste creaza unul. Daca n-ai constructor public, nu stie cum sa-l creeze => eroare la compilare.
= Node("unu") vine ulterior. Obiectul deja creat e inlocuit de altul. Pentru a evita asta se foloseste emplace. Editat de dani.user, 26 iunie 2022 - 21:30. |
#12
Publicat: 11 iulie 2022 - 11:44
map ["unu"] = Node ("unu");
De ce trebuie sa stie map de maruntaiele lui Node? map e la stanga lui = La dreapta lui =, Eu ii dau explicit argument pentru constructorul lui Node. Astfel este creat un obiect Node complet care mai apoi este atribuit lui map ["unu"]. Iar Node ("unu") inseamna ca Eu am ales sa folosesc exact acel constructor cu semnatura Node (std::string). map sa stea cuminte la locul lui si sa astepte ce-i dau. Editat de wolfenste, 11 iulie 2022 - 11:47. |
#13
Publicat: 18 iulie 2022 - 10:47
= inseamna ca modifici ceva existent. In acest caz tu creezi Node("unu") dar apoi modifici cel din map cu =, ori pentru asta trebuie sa existe deja in map, iar map nu stie cum sa-l creeze pentru a exista deja. Deci trebuie emplace pentru a-i spune lui map sa introduca ceva deja creat, nu sa incerce sa creeze ceva ce nu stie cum.
|
Anunturi
▶ Utilizatori activi: 1
0 membri, 1 vizitatori, 0 utilizatori anonimi