Ernie Skrevet 19. april 2005 Del Skrevet 19. april 2005 Men du skal være veldig forsiktig med er å bruke using i header-filer. Hvorfor det egentlig? Har funnet ut at det må brukes fra tid til annen (fjernet et par komplatorfeil), men når MÅ man bruke det og når bør man ikke? Hva kan man bruke i stedet? Lenke til kommentar
A_N_K Skrevet 19. april 2005 Del Skrevet 19. april 2005 (endret) Jeg kan ikke komme på noen tilfeller hvor du må bruke using, det er simpelthen en snarvei for å unngå å prefikse med namespacet. Det er uansett regnet for dårlig stil å bruke using i header-filer siden det forurenser det globale navnerommet, i hver enkelt kildefil er det mer opptil hver og en. Edit: eksessiv negasjon igjen :| Endret 19. april 2005 av A_N_K Lenke til kommentar
☀ ❄ Skrevet 19. april 2005 Del Skrevet 19. april 2005 (endret) Jeg kan ikke komme på noen tilfeller hvor du må bruke using, det er simpelthen en snarvei for å unngå å prefikse med namespacet. Jeg vil gjerne understreke at A_N_K med det mener at det ikke finnes noen situasjoner hvor du må bruke using for å inkludere et namespace i en headerfil. Han mener ikke at han er så vimsete at han har glemt i hvilke tilfeller det er Kort sagt: Bruk namespace-prefikset i headerfiler. Alltid. Edit: La til for å inkludere et namespace Endret 19. april 2005 av Myubi Lenke til kommentar
A_N_K Skrevet 19. april 2005 Del Skrevet 19. april 2005 Som tommelfingerregel sier jeg meg aldri 100% sikker Lenke til kommentar
☀ ❄ Skrevet 19. april 2005 Del Skrevet 19. april 2005 Derfor gjør jeg det for deg Lenke til kommentar
kjetil7 Skrevet 19. april 2005 Del Skrevet 19. april 2005 Hehe.. det finnes vel ikke noen regel uten unntak... Hva med denne kodesnutten: main.h class x { public: void a(int d) { } }; class y : public x { public: void a(char*b, char*c) { } }; main.cpp: int main() { y yp; yp.a(1); } Forslag? Lenke til kommentar
☀ ❄ Skrevet 19. april 2005 Del Skrevet 19. april 2005 Forslag? class x { public: void a(int d) {} }; class y : public x { public: void a(char* b, char* c) {} using x::a; }; Men i dette tilfellet er det ikke snakk om å inkludere et namespace. Uansett, jeg ser poenget ditt, og redigerer ordlyden i posten min Lenke til kommentar
kjetil7 Skrevet 19. april 2005 Del Skrevet 19. april 2005 Ja, jeg vet at jeg kanskje trakk den litt langt ... . Men jeg bare måtte . Lenke til kommentar
knuto Skrevet 20. april 2005 Del Skrevet 20. april 2005 Dersom eg har oppfatta det heile rett er grunnen til at du ikkje skal bruke using i ei headerfil enkelg og greit at dette då vil bli used i alle andre headerfiler og C++-filer. Dersom du har using namespace std; i ei headerfil vil du ikkje kunne "unngå å use / bruke" dette namespacet i dine C++-filer i prosjektet, noko som kan lage feil eller missforståelsar. (rett?) Lenke til kommentar
☀ ❄ Skrevet 20. april 2005 Del Skrevet 20. april 2005 Ikke helt, men nesten. Dersom du bruker en using-deklarasjon i en headerfil vil den identifikatoren bli gjort tilgjengelig i samme skop som du har deklarasjonen på alle steder headerfilen blir inkludert. Eksempel: using std::cout; class my_class { public: using std::cin; protected: using std::vector; private: using namespace std; }; std::cout vil bli globalt tilgjengelig i alle filer som inkluderer headerfilen. std::cin vil bli tilgjengelig som my_class::cin i alle filer som inkluderer headerfilen. std::vector vil bli tilgjengelig lokalt i my_class, samt lokalt i alle klasser som arver my_class. namespace std vil bli tilgjengelig lokalt i my_class. Lenke til kommentar
hishadow Skrevet 21. april 2005 Del Skrevet 21. april 2005 Jeg kan ikke komme på noen tilfeller hvor du må bruke using, det er simpelthen en snarvei for å unngå å prefikse med namespacet. Jeg vil gjerne understreke at A_N_K med det mener at det ikke finnes noen situasjoner hvor du må bruke using for å inkludere et namespace i en headerfil. Han mener ikke at han er så vimsete at han har glemt i hvilke tilfeller det er Kort sagt: Bruk namespace-prefikset i headerfiler. Alltid. Edit: La til for å inkludere et namespace Så litt i tcpl se (s.181)... Gitt du har to namespace A og B som definerer en String klasse hver... og du skriver koden... #include <A> #include <B> using namespace A; using namespace B; void test() { String test("en string"); } ... løsningen for å fikse navnkræsj ved f.eks. å velge A var ... #include <A> #include <B> using namespace A; using namespace B; using A::String; void test() { String test("en string"); } Lenke til kommentar
☀ ❄ Skrevet 21. april 2005 Del Skrevet 21. april 2005 Så litt i tcpl se (s.181)... Gitt du har to namespace A og B som definerer en String klasse hver... og du skriver koden... #include <A> #include <B> using namespace A; using namespace B; void test() { String test("en string"); } ... løsningen for å fikse navnkræsj ved f.eks. å velge A var ... #include <A> #include <B> using namespace A; using namespace B; using A::String; void test() { String test("en string"); } Men nå var det snakk om headerfiler. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå