Skocz do zawartości
bartolomeo_1

constrea.h

Rekomendowane odpowiedzi

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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();      ...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ł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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ł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 :P

Nie 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.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ł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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ł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ę :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...