Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Schimbare adresa DNS IPv4 pe rout...

Recomandare Barebone

Monede JO 2024

Suprasolicitare sistem electric
 CIV auto import

Mutare in MOZAMBIC - pareri, expe...

Scoatere antifurt airtag de pe ha...

Magnet in loc de clește pent...
 Cumparat/Locuit in apartament si ...

Pot folosi sistemul PC pe post de...

Sokol cu distorsiuni de cross-over

Filtru apa potabila cu osmoza inv...
 Kanal D va difuza serialul “...

Upgrade xiaomi mi11

securitate - acum se dau drept - ...

Farmacia Dr Max - Pareri / Sugest...
 

Includere biblioteca intr-un fisier header

- - - - -
  • Please log in to reply
8 replies to this topic

#1
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,884
  • Înscris: 22.04.2014
Va salut cu respect!

Detin un fisier header, care defineste o clasa. In aceasta, am declarat prototipurile metodelor + cate prototipuri de functii friend externe, urmand a avea un fisier de implementare pentru metode si functii (cu definitia lor completa).

Intr-un prototip al unei metode, apare un string - ca parametru si anume:
private:
bool verify(string);

De asemenea am si o functie friend externa, deci am in clasa si:

friend operator<<(class,string);

Implementarile lor sunt, repet, intr-un fisier de implementare (clasic).

Problema este ca desi am inclus biblioteca string (#include "string") in fisierul header, la compilare, primesc mesajul "string" has not been declared (adica exact ca si cand nu as fi declarat biblioteca string).

Am incercat inclusiv sa includ toate bibliotecile folosite intr-un alt fisier header doar cu biblioteci, si astfel sa includ doar una peste tot unde e nevoie .. fara rezultat. Pur si simplu, cand ajunge compilatorul si ,,citeste" clasa din header, nu recunoaste identificatorul string desi am inclus-o imediat sub #ifndef

Unde gresesc?

Edited by Rhesus, 22 April 2014 - 17:41.


#2
xyv123

xyv123

    Member

  • Grup: Members
  • Posts: 439
  • Înscris: 01.03.2012
Inlocuieste string cu std::string, in locurile in care e folosit.

#3
Balescu_Ovidiu

Balescu_Ovidiu

    Junior Member

  • Grup: Members
  • Posts: 220
  • Înscris: 05.03.2014
Ai doua posibilitati:
1.scrii std:: inaintea cuvantului string
2.scrii la inceput using namespace std;

#4
xyv123

xyv123

    Member

  • Grup: Members
  • Posts: 439
  • Înscris: 01.03.2012
Nu-i recomandat sa folosesti using namespace std in fisierele header.

#5
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,884
  • Înscris: 22.04.2014
Cat de prost sa fiu sa uit de namespace... de unde sa scoata string-ul care e declarat in namespace-ul std... Mersi fain! Dupa cateva sute de linii, iti mai scapa ...

#6
Balescu_Ovidiu

Balescu_Ovidiu

    Junior Member

  • Grup: Members
  • Posts: 220
  • Înscris: 05.03.2014

 xyv123, on 22 aprilie 2014 - 17:47, said:

Nu-i recomandat sa folosesti using namespace std in fisierele header.
Ai dreptate aici.

#7
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Vezi ca e posibil ca nici functiile friend sa nu fie necesar sa fie defapt friend.

#8
Rhesus

Rhesus

    Senior Member

  • Grup: Senior Members
  • Posts: 2,884
  • Înscris: 22.04.2014
@dani.user
Stiu ca functiile friend ies din sfera OOP-ului (si sunt de evitat) dar cred ca sunt necesare atata timp cat conduc operatii intre 2 instante ale unor clase diferite (definite separat). In rest, incerc cat mai mult sa profit de beneficiile OOP, si sa incapsulez datele cu ajutorul claselor. Posted Image

Edited by Rhesus, 22 April 2014 - 21:50.


#9
dani.user

dani.user

    Guru Member

  • Grup: Senior Members
  • Posts: 30,236
  • Înscris: 24.02.2007
Tocmai aici e confuzia.
Singurul rol a lui friend e sa permiti acces unei alte clase la parametrii privati, ori daca ai o functie getValue() de exemplu, publica, poti bine-mersi s-o folosesti in cadrul operator<<(ostream&...) si nu-ti mai trebuie nici un friend.

Anunturi

Chirurgia spinală minim invazivă Chirurgia spinală minim invazivă

Chirurgia spinală minim invazivă oferă pacienților oportunitatea unui tratament eficient, permițându-le o recuperare ultra rapidă și nu în ultimul rând minimizând leziunile induse chirurgical.

Echipa noastră utilizează un spectru larg de tehnici minim invazive, din care enumerăm câteva: endoscopia cu variantele ei (transnazală, transtoracică, transmusculară, etc), microscopul operator, abordurile trans tubulare și nu în ultimul rând infiltrațiile la toate nivelurile coloanei vertebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate