Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Ce reprezinta in chimie abrevieri...

Google pay ma taxeaza in timp ce ...

Kia Picanto 2022 - Problema motor?

Durere umar AC Joint
 Care este cea mai sanatoasa paine?

Zgomot ritmic ce urmeaza rotirea ...

Merita Lumix FZ82 in 2024?

Nu pot activa Memory Integrity
 Supratensiuni accidentale

Cuțit/ briceag drumetie

Cum am acces la o parte dintr-un ...

Mother's Day
 Recomandare aparat de vidat alime...

Izolatie exterioara casa parter P...

Cuvinte si expresii neclare

Mod de lucru Purmo Tempco Digital...
 

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,254
  • Î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,254
  • Î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

Neurochirurgie minim invazivă Neurochirurgie minim invazivă

"Primum non nocere" este ideea ce a deschis drumul medicinei spre minim invaziv.

Avansul tehnologic extraordinar din ultimele decenii a permis dezvoltarea tuturor domeniilor medicinei. Microscopul operator, neuronavigația, tehnicile anestezice avansate permit intervenții chirurgicale tot mai precise, tot mai sigure. Neurochirurgia minim invazivă, sau prin "gaura cheii", oferă pacienților posibilitatea de a se opera cu riscuri minime, fie ele neurologice, infecțioase, medicale sau estetice.

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