[C++] Problem z new string
Ostatnio zmodyfikowano 2011-12-31 21:15
CodeMeister Temat założony przez niniejszego użytkownika |
[C++] Problem z new string » 2011-12-31 13:48:21 wiatm, mam problem z zadeklarowaniem elementów string na stercie. mam funkcję która przeszukuje plik i drugą, która robi to samo tylko, że od tyłu. w tym celu zadeklarowałem zmienną typu string do której jest wczytywany plik txt. i chciałem ten string zadeklarować na stercie kod: void znajdz_pozycje() { system( "cls" ); int iPozycja; char taknie; string * sCo_wyszukac = new string; string * sSzukana_fraza = new string; string * sBaza = new string; string sLinia; fstream plik; plik.open( "baza.txt", ios::in ); if( plik.good() == true ) { cout << "Co chcesz wyszukac? (imie, nazwisko, email, numer): "; cin >> * sCo_wyszukac; cout << "Szukana fraza: "; cin >> * sSzukana_fraza; cout << endl << endl; while( !plik.eof() ) { getline( plik, sLinia ); * sBaza.append( sLinia ); * sBaza += '\n'; } if( sBaza.empty() == false ) { iPozycja = * sBaza.find( sSzukana_fraza ); if( iPozycja != string::npos ) cout << "Znalaziono fraze na pozycji: " << iPozycja << endl; else cout << "Nie znaleziono szukanej frazy" << endl << endl; } cout << "Czy wynik jest poprawny? [T/N]:"; cin >> taknie; switch( taknie ) { case 'T': usun_dane_sterty(); break; case 't': usun_dane_sterty(); break; case 'N': znajdz_pozycje_od_tylu(); break; case 'n': znajdz_pozycje_od_tylu(); break; } else cout << "Baza jest pusta!" << endl << endl << endl; plik.close(); } else { MessageBeep( 0x00000010L ); cout << "Blad programu: nie mozna otworzyc pliku \"baza.txt\" " << endl << endl; } getch(); system( "cls" ); }
void znajdz_pozycje_od_tylu() { iPozycja = * sBaza.rfind( * sSzukana_fraza ); if( iPozycja != string::npos ) cout << "Znalaziono fraze na pozycji: " << iPozycja << endl; else cout << "Nie znaleziono szukanej frazy" << endl << endl; } usun_dane_sterty(); }
void usun_dane_sterty() { delete sBaza; delete sSzukana_fraza; delete sCo_wyszukac; }
ten kod nie działa, wyświetla się: In function `void znajdz_pozycje()':| error: request for member `append' in `sBaza', which is of non-class type `std::string*'| error: request for member `empty' in `sBaza', which is of non-class type `std::string*'| error: request for member `find' in `sBaza', which is of non-class type `std::string*'| expected primary-expression before "else"| error: expected `;' before "else"| error: expected primary-expression before "else"| error: expected `;' before "else"| error: a function-definition is not allowed here before '{' token| In function `void usun_dane_sterty()':| error: `sBaza' was not declared in this scope|error: `sSzukana_fraza' was not declared in this scope|error: `sCo_wyszukac' was not declared in this scope| jak to poprawić? |
|
Mrovqa |
» 2011-12-31 14:37:12 @GrzesiekR, naucz się sam naprawiać tak banalne problemy, a nie zaśmiecaj forum. Jak z każdym najmniejszym problemem będziesz przychodził na forum to ty na pewno nie zostaniesz dobrym programistą... Bo co to za programista, który nie umie pisać?
Popatrz na funkcję znajdz_pozycje_od_tylu, widać od razu, że coś tam jest nie tak... (na końcu). W funkcji usun_dane_sterty niby co usuwasz? Próbujesz usunąć coś nieistniejącego... Nawet jeśli masz problemy to najpierw staraj się samemu je usunąć, a nie prosto na forum. |
|
malan |
» 2011-12-31 15:22:12 Poza tym, źle posługujesz się wskaźnikami. #include <iostream> #include <string>
int main() { std::string * str = new std::string; str->append( "string1" ); std::cout << "#1 " << * str << std::endl; str->clear(); str->append( "string2" ); str->append( "string3" ); std::cout << "#2 " << * str << std::endl; delete str; } |
|
Mrovqa |
» 2011-12-31 20:44:40 Można się jeszcze odwołać tak: ( * sBaza ).append( sLinia );
Mimo to lepiej używać operatora -> :) |
|
CodeMeister Temat założony przez niniejszego użytkownika |
» 2011-12-31 21:15:08 Chodzilo mi o to zeby nie wczytywac dwa razy pliku i szukanej frazy |
|
« 1 » |