prostyy Temat założony przez niniejszego użytkownika |
Podczas kompilacji programu wyskakuje dziwny log dotyczący std::string. » 2014-08-10 08:42:58 To mój program (nieskończony ale to nie ważne bo chce zobaczyć czy funkcja jest bez błędów) #include <iostream> #include <cstdlib> #include <ctime> #include <string>
using namespace std; int wczytajOsobe( string tabImie[ 0 ], string tabNazwisko[ 0 ], int tabWiek[ 0 ] ) { bool czyDobrze = cin.good(); do { cout << "Podaj imie: "; cin >> tabImie[ 0 ]; cin.good(); cin.clear(); cin.sync(); } while( czyDobrze != true ); }
int main() { string imie[ 2 ]; string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
Problem jest następujący. Podczas kompilacji wyskakuje coś takiego przy pierwszej pętli for w funkji int main() D:\A_programowanie\test.cpp|27|error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_string<char>*}' for argument '1' to 'int wczytajOsobe(std::string*, std::string*, int*)'| Proszę o pomoc. |
|
Mateus. |
» 2014-08-10 09:14:31 int wczytajOsobe( string tabImie[ 0 ], string tabNazwisko[ 0 ], int tabWiek[ 0 ] ) { bool czyDobrze = cin.good(); Tak nie tworzy się kopii tablic używanych w funkcji (chociaż tutaj powinna być raczej zmienna string, a nie tablica). To co jest w następnej linijce nie jest potrzebne. Można łatwiej sprawdzać. Poza tym funkcja int musi zwracać wartość. Może powtórz podstawy zanim weźmiesz się za stringi. |
|
prostyy Temat założony przez niniejszego użytkownika |
» 2014-08-10 09:56:49 Tak brzmiało polecenie z kursu: Napisz prosty program, który wczyta imię, nazwisko i wiek dwóch osób. Funkcja główna programu ma mieć następującą postać: int main() { std::string imie[ 2 ]; std::string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
Jeżeli coś robię źle to czy możecie powiedzieć mi co to jest i jak to poprawić? |
|
Jacob99 |
» 2014-08-10 10:54:46 Na pewno to miało wykorzystywać tablicę stringów?. Co to jest za kurs? A błąd wcale nie jest dziwny. Jeśli nie umiesz przetłumaczyć z angielskiego to brzmi on tak: D:\A_programowanie\test.cpp|27|błąd: nie można przekonwertować 'std::string {aka std::basic_string<char>}' na 'std::string* {aka std::basic_string<char>*}' dla argumentu '1' w 'int wczytajOsobe(std::string*, std::string*, int*)'|
| |
|
Monika90 |
» 2014-08-10 11:06:39 Jeżeli funkcja main musi mieć podaną postać, to parametry funkcji wczytajOsobe muszą być referencjami. |
|
Mateus. |
» 2014-08-10 11:38:24 W funkcji wczytajOsobe możesz odbierać argumenty np. tak: int wczytajOsobe( string & tabImie, string & tabNazwisko, int & tabWiek ) Stringi nie muszą być zabezpieczane przed błędem wczytania, bo może w nich być chyba wszystko. Natomiast zmienna tabWiek musi być przed błędnymi danymi zabezpieczona. Z funkcją wypiszOsobe nie powinieneś mieć problemów, bo to jedna linijka kodu :-) |
|
prostyy Temat założony przez niniejszego użytkownika |
» 2014-08-10 16:32:57 Myślę, że to mi pomoże ale męczyłem się z tym tak długo, że wezmę się za to jutro :). Dzięki wszystkim. Ps. Jacob99 to jest kurs z tej strony czyli cpp0x.pl. |
|
radek04 |
» 2014-08-26 16:56:34 Mam bardzo podobny problem. To moja pierwotna wersja: #include <iostream> #include <string>
int wczytajOsobe( std::string im[], std::string n[], int w[] ) { std::cout << "Wpisz imie nr 1: "; std::cin >> im[ 0 ]; std::cout << "Wpisz nazwisko nr 1: "; std::cin >> n[ 0 ]; std::cout << "Wpisz wiek nr 1: "; std::cin >> w[ 0 ]; std::cout << "Wpisz imie nr 2: "; std::cin >> im[ 1 ]; std::cout << "Wpisz nazwisko nr 2: "; std::cin >> n[ 1 ]; std::cout << "Wpisz wiek nr 2: "; std::cin >> w[ 1 ]; return 0; }
int wypiszOsobe( std::string im[], std::string n[], int w[] ) { std::cout << "Imie 1: " << im[ 0 ] << "\n" << std::cout << "Nazwisko 1: " << n[ 0 ] << "\n" << std::cout << "Wiek 1: " << w[ 0 ] << "\n"; std::cout << "Imie 2: " << im[ 1 ] << "\n" << std::cout << "Nazwisko 2: " << n[ 1 ] << "\n" << std::cout << "Wiek 2: " << w[ 1 ] << "\n"; return 0; }
int main() { std::string imie[ 2 ]; std::string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
To rozwiązany problem (z pomocą Internetu): #include <iostream> #include <string>
int wczytajOsobe( std::string & im, std::string & n, int & w ) { std::cout << "Wpisz imie: "; std::cin.clear(); std::cin.sync(); std::cin >> im; std::cout << "Wpisz nazwisko: "; std::cin.clear(); std::cin.sync(); std::cin >> n; std::cout << "Wpisz wiek: "; std::cin.clear(); std::cin.sync(); std::cin >> w; return 0; }
int wypiszOsobe( std::string & im, std::string & n, int & w ) { std::cout << std::endl << "Imie: " << im << std::endl << "Nazwisko: " << n << std::endl << "Wiek: " << w << std::endl; return 0; }
int main() { std::string imie[ 2 ]; std::string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
Tylko nie do końca rozumiem, dlaczego np. w funkcji wczytajOsobe jako argumenty nie muszą wystąpić tablice np. std::string im[] czy też std::string & im[] . Przecież w trakcie kursu tak się uczyliśmy w rozdziale 19. Może mi to ktoś wyjaśnić? Chyba nic z kursu nie opuściłem, ale tego nie mogę zrozumieć. |
|
« 1 » 2 3 |