Problem typu no match for operator*

0

Hej.

Nie powiem, ze jestem poczatkujacym programista, ale wiele tez nie umiem :)
Pisze program na zaliczenie info (ale tez uzytkowy) ktory liczy na podstawie wskazan licznikow wysokosc rachunkow za media. I pojawil mi sie pewnien problem jak chce zapisac dane do pliku:

void cMenu::dodaj_dane(string file_name){
     char *np;
     int f_size, ic;
     fstream data_f;
     sDane dane_tmp;
          
     np=new char[file_name.length()+1];
     file_name.copy(np,file_name.length(),0);
     data_f.open(np,fstream::binary|fstream::app);
     f_size=data_f.tellg();
     ic=sizeof(data_f)/sizeof(sDane);
     //if (ic==0) data_f.seekp(ios::beg);
     //else data_f.seekp(ios::end);
     
     cout<<"Podaj miesiac (cyfra: 1-12): ";
     cin>>dane_tmp.miesiac;
     cout<<"Podaj rok: ";
     cin>>dane_tmp.rok;
     cout<<"Podaj odczyt energii elektrycznej[kW]: ";
     cin>>dane_tmp.el;
     cout<<"Podaj odczyt gazu[m^3]: ";
     cin>>dane_tmp.gaz;
     cout<<"Podaj odczyt ZW[m^3]: ";
     cin>>dane_tmp.zw;
     cout<<"Podaj odczyt CWU[m^3]: ";
     cin>>dane_tmp.cwu;
     ic=sizeof(sDane);
     data_f.write(*dane_tmp, ic);  //tu jest blad
     data_f.close();
     }

STRUKTURA:

struct sDane{
      unsigned short int miesiac;
      unsigned short int rok;
      double cwu, zw, el, gaz;  
      };

i w zaznaczonej linii wyskakuje blad "No match for 'operator*' in '*dane_tmp'

Please help :)

0

No tak, bo operatora * się używa np. do wskaźników, kiedy chcę się uzyskać wartość, która kryje się pod tym wskaźnikiem.

Tu byś musiał użyć operatora &, ale nie wiem czy to przejdzie.

0

nie przeszlo, probowalem...

wyswietla blad:
131 D:\dokumenty\rachunki\main.cpp no matching function for call to `std::basic_fstream<char, std::char_traits<char> >::write(sDane*, int&)'
note d:\Dev-Cpp\include\c++\3.4.2\bits\ostream.tcc:360 candidates are: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::write(const _CharT*, std::streamsize) [with _CharT = char, _Traits = std::char_traits<char>]

Jakies pomysly jak sobie z tym poradzic?? (poza zapisem do pliku tekstowego??)

EDIT:
Dalem rade. nie do konca rozumiem jednak czemu tamten sposob nie dzialal...
teraz wyglada to tak(przepisane z jakiegos przyladu na 4programmers:) )

void cMenu::dodaj_dane(string file_name){
     char *np;
     int f_size;
     fstream data_f;
     sDane* dane_tmp=new sDane;//tu zmiana z sDane dane_tmp;
          
     np=new char[file_name.length()+1];
     file_name.copy(np,file_name.length(),0);
     data_f.open("dane.dat",fstream::binary|fstream::app|fstream::out);
     f_size=data_f.tellg();
     
     cout<<"Podaj miesiac (cyfra: 1-12): ";
     cin>>dane_tmp->miesiac;
     cout<<"Podaj rok: ";
     cin>>dane_tmp->rok;//i wszedzie zamiast . jest ->
     cout<<"Podaj odczyt energii elektrycznej[kW]: ";
     cin>>dane_tmp->el;
     cout<<"Podaj odczyt gazu[m^3]: ";
     cin>>dane_tmp->gaz;
     cout<<"Podaj odczyt ZW[m^3]: ";
     cin>>dane_tmp->zw;
     cout<<"Podaj odczyt CWU[m^3]: ";
     cin>>dane_tmp->cwu;
     ic=sizeof(sDane);
     data_f.write((char*)dane_tmp, sizeof(sDane));//i zrzutowanie na char*
     data_f.close();
     }

1 użytkowników online, w tym zalogowanych: 0, gości: 1