Article View: pl.comp.objects
Article #4565Re: C++ i friends
From: Sektor van Skijlen
Date: Fri, 15 Jan 1999 20:01
Date: Fri, 15 Jan 1999 20:01
71 lines
3564 bytes
3564 bytes
W ostatnim odcinku, Marilyn Manson naskrobal:
: class klasa0
: {
: friend klasa1;
: //***etykieta0***
: klasa0();
: }
: class klasa1
: {
: klasa0 obiekt;
: //***etykieta1***
: }
: a w glownym pliku yes:
: void main()
: {
: klasa1 objjekt;
: }
: i kompilator tfierdzi, ze za chiny nie moze, a co nie moze? otoz: COMPILER
: COULD NOT GENERATE DEFAULT CONSTRUCTOR FOR CLASS 'klasa1'
Po pierwsze - przypominam (nie Tobie jednemu) - prosze pisac, JAKI kompilator.
Kompilatory lubia miec swoje dziwactwa, o czym mialem sie wielokrotnie okazje
przekonac. Ja skopilowalem ten przyklad uzywajac GCC 2.8.1 na Linuxie i
kompilator sie przyplul tylko do tego, ze nie ma zwlok konstruktora klasa0.
Jak go napisalem ( klasa0::klasa0() {} ) to nic juz nie powiedzial.
Masz tam jeszcze jeden blad. Przed deklaracja friend klasa1 nie zostala
zdefiniowana. Winienes tedy napisac "friend class klasa1", bo w tym momencie
kompilator nie wie, co to takiego ta "klasa1".
: Malo tego, teraz lepsze. Jesli w miejsce etykieta0 wpiszemy specyfikator
: public: wszystko chodzi idealnie i kompilator nawet nie smie sie odezwac.
: Wniosek: przyjmuje konstruktor klasy0 jako default konstruktor klasy1. (hmm
: widocznie Stroustrup duzo nad tym myslal i wyszlo mu, ze tak bedzie lepiej)
Nie win Stroustrupa za babole Borlanda :*)) bo zapewne tego kompilatora
uzywales, jak mi sie wydaje. Powiem Ci tylko tyle, ze Borland jest znany z
takich numerow. Kiedys ustawilem w opcjach, zeby parametry przekazywal przez
rejestry (to byl BC 3.1). Jak sie wtedy natknal na jakas czysta metode
wirtualana (mimo, ze ona NIE PRZYJMOWALA i NIE ZWRACALA ZADNYCH parametrow),
to wyrzucal jakis dziwny, niezrozumialy blad (nie przytocze Ci, bo juz nie
pamietam, robilem to jakies 3 lata temu). Kiedy oznaczylem funkcje
modyfikatorem cdecl (albo ustawilem w opcjach, ze ma przekazywac parametry na
stosie w konwencji C), to juz bledu nie bylo. W tym momencie nalezalo wrecz
spytac "Co ma piernik do wiatraka ?". Niestety, zaraz za tym cisnelo sie na
usta zdanie "Tyle co Borland do kompilatorow."...
: Wniosek ogolny: jesli klasa0 yes friendem klasy1 (ma w sobie text "friend
: klasa1;") i ma konstruktor, to klasa1 musi miec tez swoj konstruktor
: (publiczny w tym porzypadku, ale to niewazne), poniewaz inaczej kompilator
: uzyje konstruktora klasy0 jako konstruktora klasy1. (i nasuwa sie pytanie
: WHY??????)
Wniosek ogolny: uzywaj dobrych kompilatorow.
: Podstawowe pytanie: CZY DOBRZE ROZUMUJE?
Widze, ze Borland potrafil w glowach namieszac jeszcze bardziej, niz
Stroustrup (vide moj post z przetlumaczonym wywiadem).
--
-=* P O Z D R A W I A M ! *=-
[-=* Ij waiet salden mijn spijr, ta faenen aire ats trauven diaenna *=-]
____....----````Sektor van Skijlen: sektor at beer.com''''----....____
<sPAm @ pROtEctIOn>
Technical Details
Message-ID:
<77o6rh$j0q$4@polonez.man.lodz.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!netra.daewoo.com.pl!news.task.gda.pl!news.man.lodz.pl!not-for-mailReferences:
<77nvrc$b30$1@sun1000.pwr.wroc.pl>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!pingwin.icm.edu.pl!mat.uni.torun.pl!news.nask.pl!orion.cst.tpsa.pl!netra.daewoo.com.pl!news.task.gda.pl!news.man.lodz.pl!not-for-mail
From: Sektor van Skijlen <sektor@spam.org>
Newsgroups: pl.comp.objects
Subject: Re: C++ i friends
Date: 15 Jan 1999 20:01:53 GMT
Lines: 71
Message-ID: <77o6rh$j0q$4@polonez.man.lodz.pl>
References: <77nvrc$b30$1@sun1000.pwr.wroc.pl>
NNTP-Posting-Host: zly.kis.p.lodz.pl
User-Agent: tin/pre-1.4-981225 ("Volcane") (UNIX) (SunOS/5.5.1 (i86pc))
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit