| Tymek Temat założony przez niniejszego użytkownika | Problem z operacją na plikach  » 2011-01-08 19:30:50 #include <iostream.h>#include <fstream.h>
 struct firmy {
 char * nazwa;
 float przychod;
 };
 main()
 {
 
 firmy firma;
 ofstream plik1( "dane_firmy.dat", ios::binary | ios::app | ios::out );
 firma.nazwa = "test";
 firma.przychod = 23;
 
 plik1.write( reinterpret_cast < char *>( & firma ), sizeof( firma ) );
 plik1.close();
 int i = 1;
 ifstream plik( "dane_firmy.dat", ios::binary | ios::in );
 while( 1 )
 {
 
 plik.read( reinterpret_cast < char *>( & firma ), sizeof( firma ) );
 
 if( plik.eof() )
 break;
 
 cout << i << " " << firma.nazwa << " " << firma.przychod << endl;
 i++;
 }
 plik.close();
 getchar();
 }
 
To zadanie muszę zamienić na " Przykład 1 - obsługa programu za pomocą menu. Poszczególne operacje wykonujemy za pomocą funkcji. Dane wczytujemy z klawiatury." nie za bardzo mi to poszło i mam dużo błędów z którymi sam nie nie mogę się uporać  #include <iostream>#include <fstream>
 struct firmy {
 char * nazwa;
 float przychod;
 };
 
 void zapisz_do_pliku( ifstream * plik1, firmy dane )
 {
 plik1->read( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
 }
 
 void odczytaj_z_pliku( ofstram * plik2, firmy dane )
 {
 plik2->write( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
 }
 
 int main()
 {
 cout << "wybierz opcje 1 dla zapisania , 2 dla odczytania " << endl;
 cin >> wybor;
 switch( wybor )
 case 1
 : cin >> firma.nazwa >> firma.przychod;
 zapisz_do_pliku( plik1, & firma );
 break;
 case 2:
 odczytaj_z_pliku( plik2, & firma );
 cout << firma.nazwa << firma, przychod;
 break;
 }
 
 firmy firma;
 ofstream plik1( "dane_firmy.dat", ios::binary | ios::app | ios::out );
 ifstream plik2( "dane_firmy.dat", ios::binary | ios::in );
 firma.nazwa = "test";
 firma.przychod = 23;
 
 plik1.close();
 
 system( "pause" );
 }
 
 | 
|  | 
| dmx81 | » 2011-01-08 23:44:35 po pierwsze
 wybor - int?char? cokolwiek?
 
 
 
 | 
|  | 
| dmx81 | » 2011-01-08 23:53:58 po drugie:
 plik1, plik2 - uzywasz zmiennych zanim zadeklarujesz/zdefiniujesz
 
 po trzecie, to samo firma
 
 no i using namespace std ? albo std::cout itd...
 | 
|  | 
| ison | » 2011-01-08 23:55:26 brakuje ci przestrzeni nazw std w linii 16 powinno być ofstream a nie ofstram zmienna wybor  jest niezadeklarowana dopisz  przed w linii 29 zmienna firma  nie jest zadeklarowana dopisz  na początku funkcji main przy switchu brakuje ci klamer plik1 i plik2 w funkcji main są niezadeklarowane w linii 39 zmienne plik1 i plik2 nazwij inaczej, nazwy ci kolidują (ifstream i ofstream) błędów jest więcej... | 
|  | 
| dmx81 | » 2011-01-08 23:58:40 widze ze sie zdublowalismy w odpowiedziach w tym samym czasie ;)- wazne, aby autor postu odnalazl bledy i poprawil...
 
 PS>> nasuwa sie pytanie, czy przy tak podstawowych bledach, znane jest ci rzutowanie, ktorego tu uzywasz?
 | 
|  | 
| Tymek Temat założony przez niniejszego użytkownika | » 2011-01-09 15:13:04 #include <iostream>#include <fstream>
 using namespace std;
 
 struct firmy
 {
 char * nazwa;
 float przychod;
 void zapisz_do_pliku( ifstream * plik1, firmy dane );
 void odczytaj_z_pliku( ofstream * plik2, firmy dane );
 };
 
 void zapisz_do_pliku( ifstream * plik1, firmy dane )
 {
 plik1->read( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
 }
 
 void odczytaj_z_pliku( ofstream * plik2, firmy dane )
 {
 plik2->write( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
 }
 
 int main()
 {
 ofstream plik1( "dane_firmy.dat", ios::binary | ios::app | ios::out );
 ifstream plik2( "dane_firmy.dat", ios::binary | ios::in );
 firmy firma;
 int wybor;
 firma.nazwa = "test";
 firma.przychod = 23;
 
 cout << "wybierz opcje 1 dla zapisania , 2 dla odczytania " << endl;
 cin >> wybor;
 switch( wybor )
 {
 case 1:
 cin >> firma.nazwa >> firma.przychod;
 zapisz_do_pliku( plik1, & firma );
 break;
 case 2:
 odczytaj_z_pliku( plik2, & firma );
 cout << firma.nazwa << firma.przychod;
 break;
 }
 
 
 plik1.close();
 plik2.close();
 
 system( "pause" );
 }
 
wiecie może co to za błędy? 38  invalid conversion from `void*' to `std::ifstream*'  38  conversion from `firmy*' to non-scalar type `firmy' requested  41  invalid conversion from `void*' to `std::ofstream*'  Jeżeli ktoś wie co skopałem z tymi wskaźnikami i może mi wytłumaczyć będę bardzo wdzięczny | 
|  | 
| ison | » 2011-01-09 16:44:48 w funkcji void zapisz_do_pliku( ifstream * plik1, firmy dane )
argumentem jest ifstream a ty próbujesz przekazać obiekt typu ofstream | 
|  | 
| Tymek Temat założony przez niniejszego użytkownika | » 2011-01-09 17:04:08 #include <iostream>#include <fstream>
 using namespace std;
 
 struct firmy
 {
 char * nazwa;
 float przychod;
 void zapisz_do_pliku( ifstream * plik1, firmy dane );
 void odczytaj_z_pliku( ofstream * plik2, firmy dane );
 };
 
 void zapisz_do_pliku( ifstream * plik1, firmy dane )
 {
 plik1->read( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
 }
 
 void odczytaj_z_pliku( ofstream * plik2, firmy dane )
 {
 plik2->write( reinterpret_cast < char *>( & dane ), sizeof( dane ) );
 }
 
 int main()
 {
 ofstream plik2( "dane_firmy.dat", ios::binary | ios::app | ios::out );
 ifstream plik1( "dane_firmy.dat", ios::binary | ios::in );
 firmy firma;
 int wybor;
 firma.nazwa = "test";
 firma.przychod = 23;
 
 cout << "wybierz opcje 1 dla zapisania , 2 dla odczytania " << endl;
 cin >> wybor;
 switch( wybor )
 {
 case 1:
 cin >> firma.nazwa >> firma.przychod;
 zapisz_do_pliku( plik1, & firma );
 break;
 case 2:
 odczytaj_z_pliku( plik2, & firma );
 cout << firma.nazwa << firma.przychod;
 break;
 }
 
 
 plik1.close();
 plik2.close();
 
 system( "pause" );
 }
 
Poprawiłem ale nadal mam błąd 38  a.cpp invalid conversion from `void*' to `std::ifstream*'  38 1 a.cpp conversion from `firmy*' to non-scalar type `firmy' requested  41  invalid conversion from `void*' to `std::ofstream*'  41 C:\Documents and Settings\x\Pulpit\Studia\Projekty programów\Lab 11\zadanie 1 a.cppnon-scalar type `firmy' requested  | 
|  | 
| « 1 »  2 |