[c++] dynamiczna tablica struktur, Jak przekazać do funkcji żeby zabezpieczyć ją modyfikatorem const?
Ostatnio zmodyfikowano 2015-05-22 16:33
carlosmay Temat założony przez niniejszego użytkownika |
[c++] dynamiczna tablica struktur, Jak przekazać do funkcji żeby zabezpieczyć ją modyfikatorem const? » 2015-05-21 23:26:26 struct rzdw { string imie; double kwota; };
Wywołuję funkcję, która wczytuje z pliku dane do tablicy struktur rzdw * w_sponsor = new rzdw[ don ];
i z tej samej funkcji wywołuję następną funkcję wypiszSponsorow( don, w_sponsor );
a to jest nagłówek funkcji. Chcę ją zabezpieczyć modyfikatorem const przed przypadkowym nadpisaniem void wypiszSponsorow( int sdon, rzdw sw_sponsor[] ) {.......}
Chcę ją zabezpieczyć modyfikatorem const przed przypadkowym nadpisaniem, ale kompilator się burzy, void wypiszSponsorow( int sdon, const rzdw sw_sponsor[] ) {.......}
Błąd 1 error LNK2019: unresolved external symbol "void __cdecl wypiszSponsorow(int,struct rzdw * const)" (?wypiszSponsorow@@YAXHQAUrzdw@@@Z) referenced in function "bool __cdecl wczytajPlik(class std::basic_string<char,struct std::char_traits<char>, class std::allocator<char> >)" (?wczytajPlik@@YA_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) C:\Users\....
Nie wiem jak to ugryźć. Czy jest to do zrobienia tym sposobem? |
|
pekfos |
» 2015-05-22 08:38:52 |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-05-22 16:05:51 // prog wczytuje rozmiar tablicy z pliku, oraz na przemian nazwisko i kwotę zapisuje do struktury // później wypisuje zawartość struktury #include <iostream> #include <string> #include <fstream> using namespace std;
struct rzdw { string imie; double kwota; };
void wypiszSponsorow( int sdon, rzdw sw_sponsor[] ); bool wczytajPlik( string sNazwaPliku );
int main() { if( !wczytajPlik( "C:\\Users\\...\\Documents\\Visual Studio 2013\\donatorzy.txt" ) ) cout << "Nie udalo sie wczytac pliku o podanej nazwie." << endl; system( "pause" ); }
bool wczytajPlik( string sNazwaPliku ) { ifstream plik; plik.open( sNazwaPliku ); if( !plik.is_open() ) return false; int don; plik.clear(); plik.sync(); plik >> don; plik.get(); rzdw * w_sponsor = new rzdw[ don ]; int i = 0; while( plik.good() ) { getline( plik, w_sponsor[ i ].imie ); plik >> w_sponsor[ i ].kwota; plik.get(); ++i; } wypiszSponsorow( don, w_sponsor ); delete[] w_sponsor; return true; }
void wypiszSponsorow( int sdon, rzdw sw_sponsor[] ) { cout << "Nasi wspaniali sponsorzy:" << endl; for( int i = 0; i < sdon; ++i ) { if( sw_sponsor[ i ].kwota >= 10000 ) { cout << "Sponsor #" << i + 1 << endl; cout << "\t" << sw_sponsor[ i ].imie << endl; cout << "\t" << sw_sponsor[ i ].kwota << endl; } } cout << endl; cout << "Nasi sponsorzy:" << endl; for( int i = 0; i < sdon; ++i ) { if( sw_sponsor[ i ].kwota < 10000 ) { cout << "Sponsor #" << i + 1 << endl; cout << "\t" << sw_sponsor[ i ].imie << endl; cout << "\t" << sw_sponsor[ i ].kwota << endl; } } }
Wrzuciłem cały kod. Kombinowałem, żeby funkcja odbierała tą tablice jako wskaźnik, ale jest to samo. Ciągle we wskaźnikach, są niuanse które rozkminiam, z różnym skutkiem. Wydaje mi się, że jest już wskaźnikiem do wskaźnika, więc chyba nie da się w ten sposób. Sam już nie wiem. |
|
Monika90 |
» 2015-05-22 16:20:26 Dopisz const: void wypiszSponsorow( int sdon, const rzdw sw_sponsor[] );
ale w obydwu miejscach, i w deklaracji i w definicji. A to i to ma dokładnie takie samo znaczenie. |
|
carlosmay Temat założony przez niniejszego użytkownika |
» 2015-05-22 16:33:05 Zupełnie zapomniałem tam też zmienić, no i kombinowanie wyprowadziło w pole. Jednak dobrze myślałem, tyle że każdy szczegół musi się zgadzać. Serdeczne dzięki. |
|
« 1 » |