bartolomeo_1 Opublikowano 4 Listopada 2004 Zgłoś Opublikowano 4 Listopada 2004 czy ktoś wie dlaczego ta biblioteka nie dziala na borlandzie 6 personal? kod sie kompiluje ale nawet cos takiego nie dziala: #include <constrea.h>int main() { char w[100]; constream c = constream( ); if( c == NULL ) cout << "wpada"; c.clrscr(); c.textmode(C4350); c.rdbuf()->textcolor(RED); c << "Nowa rozdzielczość ekranu w trybie tekstowym"; return 0; }wyrzuca ze "pamiec nie moze byc 'read'" :P Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
K3310pH Opublikowano 4 Listopada 2004 Zgłoś Opublikowano 4 Listopada 2004 hmm, nie wiem co to za biblioteka ale robisz cos takiego: constream c = constream( ); if( c == NULL ) cout << "wpada"; c.clrscr(); constream c; >> tworzy obiekt klasy constream, ale usilujesz mu jeszcze cos przypisac hmm nie wiem jak smiga ta biblioteka, ale wg mnie cos jest nietak if ( c == NULL ) moje C++ juz protestuje, bo nie mozesz sobie tak porownywac dopoki klasa nie ma zadeklarowanego operatora == zakladajac, ze to, co powyzej by smigalo, to i tak nie jest dobrze, jezeli jest c=0 to owszem, wypisujesz "wpada" ale potem dalej program sie wykonuje i mimo, iz nie stworzyles obiektu klasy ( lub wystapil jakichs blad ), to odwolujesz sie do niego stad pamiec nie moze byc 'read'. dawno nic nie robilem w c [ach to php :|] sprobuj constream *c = new constream(); if ( !c ) return; c->clrscr(); ... Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bartolomeo_1 Opublikowano 4 Listopada 2004 Zgłoś Opublikowano 4 Listopada 2004 łomatko człowieku pomyśl i sprawdz zanim napiszesz bzdury. constream c = constream( );to po prostu jawne wywolanie konstruktora domyslnego. jest to rownoznaczne z constream c();poza tym tak jak wiekszosc klas typu stream, constream ma operator == przeciążony. to standardowy sposob stwierdzania czy strumien dziala. wiem ze program dziala dalej to mial byc tylko pogladowe sprawdzenie :P a teraz miodek ;) pomysł z dynamicznym przydziałem pamięci zadziałał :) dzięki! (dziwne ze kompilator nie wyświetlił żadnego #error "dzialaj na wskaznikach" jak probowalem bez tego Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
K3310pH Opublikowano 4 Listopada 2004 Zgłoś Opublikowano 4 Listopada 2004 klasa c = klasa(); klasa c();jawnie, zgadzam sie, chyba kwestia gustu, ja tam nie terroryzuje nawiasami, pomiajac kwestie parametrow [zwierzenia] nie lubie streamow, ale za to lubie wskazniki ;p [/zwierzenia] Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 6 Listopada 2004 Zgłoś Opublikowano 6 Listopada 2004 łomatko człowieku co ty za herezję szerzysz?! łomatko człowieku pomyśl i sprawdz zanim napiszesz bzdury. constream c = constream( );to po prostu jawne wywolanie konstruktora domyslnego. jest to rownoznaczne z constream c(); Nie jest równoznaczne. Druga deklaracja to deklaracja funkcji bezparametrowej 'c' zwracającej obiekt constream. W C++ nie można definiować prywatnych funkcji w funkcjach ale można za to je deklaraować. poza tym tak jak wiekszosc klas typu stream, constream ma operator == przeciążony. to standardowy sposob stwierdzania czy strumien dziala.O!??? Od kiedy? Poprawna konstrukcja obiektu (przez konstruktor) całkowicie wystarczy do stwierdzenia, że obiekt jest, istnieje i został poprawnie utworzony. Jeśli byłbyś tak miły i pokazał operator== dla strumieni w kodzie nagłówka... Może on jest faktycznie w Borlandzie? Tylko CO porównuje...? :o Istnieje za to operacja odczytu stanu strumienia, przez operator! (w Borland C++), czyli: if ( !stream ) -> stream failed. W GCC jest to operator bool() dla strumieni :) wiem ze program dziala dalej to mial byc tylko pogladowe sprawdzenie :PNie chodziło o to że działa, tylko że nie kończysz programu po wykryciu(!?) błędu. Jednak najprawdopodobniej "standardowy sposob stwierdzania czy strumien dziala" to wielki błąd z Twojej strony. Nawet na pewno. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bartolomeo_1 Opublikowano 8 Listopada 2004 Zgłoś Opublikowano 8 Listopada 2004 łomatko. TO SA NIE ZADNE HEREZJE. Programista sie znalazl... constream c = constream(); constream c();to to samo. przekompiluj to na dole sobie i sprawdz. ja nie znam zadnej funkcji co sie int() nazywa :lol: #include<iostream.h>#include<fstream.h>class p{public: operator bool() { return 0; }};class v{public: v(int i) :g(i) {} int g;};int main(int argc, char* argv[]){ fstream f1, f2; f1.open("c:\\autoexec.bat"); f2.open("asdffdsa"); if(f1 == NULL) cout << "NIE MA autoexec`a" <<endl; if(f2 == NULL) cout << "nie ma pliku asdffdsa"<< endl; p aaa = p(); if( aaa == NULL ) cout << "rzutowanie dziala" << endl; v bbb = v(999); int i = int(666); cout << i << ", " << bbb.g; return 0;}to ze ten program dziala dalej to WIEM! wyobraz sobie ze chcialem po prostu zobaczyc co sie stanie jak mimo wszystko sproboje uzyc tego strumienia. Tak ciezko zrozumiec? :P Jezeli chodzi o ten przeladowany operator== to rzeczywiscie przesadzilem. nie ma go oczywiscie, jest natomiast wspomniany przez Ciebie operator rzutowania na bool, i on automatycznie sie uruchamia jak przyrownoje do NULL, tak samo jak ten napisany przezemnie w klasie p. Ten od steam`ow oczywiscie zwraca odwrotnosc tego, co zwrocilby operator ! czekam na polemike lub przeprosiny :> -- ps. jak ktos wie co jest nie tak z ta klasa constream w borlandzie 6 to niech napisze bo do dzis nie doszedlem i uzywam conio :P Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 10 Listopada 2004 Zgłoś Opublikowano 10 Listopada 2004 łomatko. TO SA NIE ZADNE HEREZJE. Programista sie znalazl... constream c = constream(); constream c();to to samo. przekompiluj to na dole sobie i sprawdz. Żartujesz chyba, nie? Język C++ to język formalny o ściśle określonej składni, to nie poezja żebyś mógł sobie interpretować! Nie rozumiesz o czym piszesz: 'constream()' jest konstruktorem, ale 'constream c()' to funkcja. To NIE jest to samo. Przecież to podstawa języka deklaracja zmiennych i funkcji. Jak trzeba łopatologicznie to proszę bardzo: [php:1:6f03113613] int a(); // ale za to 'int a(jakas-wartosc);' jest ok int main() { a = 0xdeadbeef; } [/php:1:6f03113613] Wyjście kompilatora: g.cpp: In function `int main()': g.cpp:4: error: assignment of function `int a()' g.cpp:4: error: cannot convert `unsigned int' to `int ()()' in assignment ja nie znam zadnej funkcji co sie int() nazywa :lol: Tak :lol: int jest typem prostym ale w sensie obiektu 'int()' jest konstruktorem dla int, bo w C/C++ istnieją dwa sposoby inicjalizacji typ zm=wart; lub typ zm(wart);, zresztą nadużywasz jednego z nich :P A 'int a();' to wcale nie jest zmienna 'a' tylko funkcja 'a()' zwracająca int. Nadal nie dociera? :evil: A to, że nie precyzujesz tego co piszesz to tylko Twoja wina. Nie możesz napisać 'int a();' i powiedzieć, że to jest zmienna a, bo nie jest. Dopiero będzie jeśli napiszesz 'int a(0);'. Co do tego "przeładowywania" operatorów (tak naprawdę to zdefiniowania, ale mniejsza z tym...) Porównanie bool z NULL? Hmmm, czemu nie... :roll: Ale działa tylko dlatego, że false jest równe 0, ale czy jest równe NULL, czyli (void*)0? No akurat w kompilatorach dla DOS i Windows WEWNĘTRZNA reprezentacja NULL to adres z wszystkimi bitami zerowymi, ALE istnieją systemy, na których NULL (mimo, że (void*)0) nie jest reprezentowany w taki sposób, np. ma któreś bity ustawione, czyli jego wartość nie wynosi 0. I co wtedy? Sprawdzanie 'if (strumien==NULL)' jest wtedy bez sensu, bo należy to zrobić tak jak zostało zaprojektowane, czyli 'if (!strumien)'. Rozumiesz teraz? BTW. odpowiadając na takie dziwne posty sam wiele się uczę :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
bartolomeo_1 Opublikowano 15 Listopada 2004 Zgłoś Opublikowano 15 Listopada 2004 A to, że nie precyzujesz tego co piszesz to tylko Twoja wina. Nie możesz napisać 'int a();' i powiedzieć, że to jest zmienna a, bo nie jest. Dopiero będzie jeśli napiszesz 'int a(0);'.no dobra :oops: wiem kiedy przyznać się do błędu. jakoś musiałem akurat przespać ten rozdział ;) No akurat w kompilatorach dla DOS i Windows WEWNĘTRZNA reprezentacja NULL to adres z wszystkimi bitami zerowymi, ALE istnieją systemy, na których NULL (mimo, że (void*)0) nie jest reprezentowany w taki sposób, np. ma któreś bity ustawione, czyli jego wartość nie wynosi 0. I co wtedy?Jakiś przykład takiego systemu? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
marcinEc Opublikowano 19 Listopada 2004 Zgłoś Opublikowano 19 Listopada 2004 No akurat w kompilatorach dla DOS i Windows WEWNĘTRZNA reprezentacja NULL to adres z wszystkimi bitami zerowymi, ALE istnieją systemy, na których NULL (mimo, że (void*)0) nie jest reprezentowany w taki sposób, np. ma któreś bity ustawione, czyli jego wartość nie wynosi 0. I co wtedy?Jakiś przykład takiego systemu? Patrz: http://www.lysator.liu.se/c/c-faq/c-1.html dokładnie: 1.14: Seriously, have any actual machines really used nonzero null pointers, or different representations for pointers to different types? na podanej stronie... Nie o to chodzi, czy istnieją czy nie. To jest błąd porównać bool z NULL, czyli w C++ ze wskaźnikiem (void*)0, ale z samym zerem (czyli false) oczywiście nie jest błędem. Tak czy siak powodzenia w programowaniu :D Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...