[Solved][c++] Wczytywanie tablicy stringów do funkcji przez referencję

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
ziomekmatti18
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 15 gru 2011, 18:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: Xfce
Architektura: x86_64

[Solved][c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: ziomekmatti18 »

Witam. Języka C++ uczę się dopiero od niecałego tygodnia. Postanowiłem skorzystać z kursu na stronie cp00x.pl i właśnie odnośnie jednego z tam zawartych zadań domowych:
http://cpp0x.pl/kursy/Kurs-C++/Poziom-3 ... ejscia/351
mam problem:
program8.cpp:6:33: error: declaration of ‘imie’ as array of references
program8.cpp:6:34: error: expected ‘)’ before ‘,’ token
program8.cpp:6:43: error: expected initializer before ‘&’ token
program8.cpp: In function ‘int main()’:
program8.cpp:28:61: error: cannot pass objects of non-trivially-copyable type ‘std::string {aka struct std::basic_string<char>}’ through ‘...’
program8.cpp:28:61: error: cannot pass objects of non-trivially-copyable type ‘std::string {aka struct std::basic_string<char>}’ through ‘...’
program8.cpp:31:60: error: cannot convert ‘std::string {aka std::basic_string<char>}’ to ‘std::string* {aka std::basic_string<char>*}’ for argument ‘1’ to ‘int wypiszOsobe(std::string*, std::string*, std::string*)’
z kodem:

Kod: Zaznacz cały

#include <iostream>
#include <string>

using namespace std;

int wczytajOsobe( string & imie[], string & nazwisko[], string & wiek[] ) {
	cout << "Podaj imie dla osoby: ";
	cin >> imie[];
	cout << endl;
	cout << "Podaj nazwisko dla osoby: ";
	cin >> nazwisko[];
	cout << endl;
	cout << "Podaj wiek dla osoby: ";
	cin >> wiek[];	
}

int wypiszOsobe( string imie[], string nazwisko[], string wiek[] ) {
	cout << "Imie: " << imie << endl;
	cout << "Nazwisko: " << nazwisko << endl;
	cout << "Wiek: " << wiek << endl;
}

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;
}
Proszę Was o koretkę i ewentualnie krótki komentarz, czemu poprzednia wersja jest nieprawidłowa. Z góry dzięki i pozdrawiam.
Ostatnio zmieniony 21 gru 2011, 19:32 przez ziomekmatti18, łącznie zmieniany 1 raz.
PeeR
Sędziwy Jeż
Sędziwy Jeż
Posty: 52
Rejestracja: 09 lut 2009, 18:57
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Kontakt:

Re: [c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: PeeR »

Dziwne to zadanie. Bo za pomocą operatora [] dostajesz znak który się znajduje pod numerem którym wywołasz np:

Kod: Zaznacz cały

string text;
text = "Miasto";
cout << text[2]; // wyświetli się 'a'
Więc jak chcesz zrobić z klasy string wektor to ja bym to zrobił na klasie Vector http://pl.wikibooks.org/wiki/C++/Vector
ziomekmatti18
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 15 gru 2011, 18:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: Xfce
Architektura: x86_64

Re: [c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: ziomekmatti18 »

To akurat zapamiętałem z lekcji w Pascalu. Autor tego kursu jeszcze tego nie wspominał, więc założyłem, że metoda jest trochę inna. Zatem w głównej funkcji main tak naprawdę nie deklaruję tablicy z dwoma elementami o dowolnej pojemności na stringi, tylko zmienną string składającą się z dwóch znaków?
Dzięki za tą klasę Vector, jednak czy istnieje jeszcze inna metoda zrobienia tego zadania, bezklasowa?
Ostatnio zmieniony 21 gru 2011, 19:22 przez ziomekmatti18, łącznie zmieniany 1 raz.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Re: [c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: beluosus »

Do funkcji wysyłasz jeden obiekt z tablicy, a nie całą tablicę obiektów. Poza tym trzeci argument ma być liczbą całkowitą.

Kod: Zaznacz cały

void wczytajOsobe(string &imie, string &nazwisko, int &wiek)
{
   cout << "Podaj imie dla osoby: ";
   cin >> imie;
   cout << "Podaj nazwisko dla osoby: ";
   cin >> nazwisko;
   cout << "Podaj wiek dla osoby: ";
   cin >> wiek;   
}

void wypiszOsobe(const string &imie, const string &nazwisko, int wiek)
{
   cout << "Imie: " << imie << endl;
   cout << "Nazwisko: " << nazwisko << endl;
   cout << "Wiek: " << wiek << endl;
}
W funkcji wypiszOsobe() możesz nie korzystać z referencji, ale wtedy niepotrzebnie skopiujesz obiekt (więcej roboty dla procesora i pamięci). Dlatego użyłem const żeby funkcja nie zmieniała zawartości obiektów - bo ma je tylko wyświetlić.

@PeeR: tam nie masz string text; tylko string text[2];

PS
std::endl prócz tego, że wstawia nową linię to jeszcze robi flush bufora na output (wyświetla zbuforowane dane). Jeżeli Ci na tym nie zależy to po prostu napisz "\n".
ziomekmatti18
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 15 gru 2011, 18:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: Xfce
Architektura: x86_64

Re: [c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: ziomekmatti18 »

Ale głupi błąd :O Wielkie dzięki sensei beluosus :D
A co do flush bufora to jeszcze do tego nie doszedłem ^^
Ostatnio zmieniony 21 gru 2011, 19:27 przez ziomekmatti18, łącznie zmieniany 1 raz.
PeeR
Sędziwy Jeż
Sędziwy Jeż
Posty: 52
Rejestracja: 09 lut 2009, 18:57
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Kontakt:

Re: [c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: PeeR »

beluosus pisze:@PeeR: tam nie masz string text; tylko string text[2];
Więc w takim razie jak tak deklarujemy string to co się dzieje? Bo sam nie wiem :D
ziomekmatti18
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 15 gru 2011, 18:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: Xfce
Architektura: x86_64

Re: [c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: ziomekmatti18 »

PeeR pisze:
beluosus pisze:@PeeR: tam nie masz string text; tylko string text[2];
Więc w takim razie jak tak deklarujemy string to co się dzieje? Bo sam nie wiem :D
Dwuelementowa tablica, którą wypełniają wartości typu string. Tak przynajmniej wywnioskowałem z zadania.
Ale dla pewności zaczekajmy na opinię profesjonalisty, bo ja jestem jeszcze świeżakiem ;x
PeeR
Sędziwy Jeż
Sędziwy Jeż
Posty: 52
Rejestracja: 09 lut 2009, 18:57
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: KDE Plasma
Architektura: x86
Kontakt:

Re: [Solved][c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: PeeR »

Faktycznie dokładnie tak jest przetestowałem

Kod: Zaznacz cały

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string text[2];
  text[0] = "Miasto";
  cout << text[0][2]; // wyświetli się 'a'
  text[1] = "666";
  cout<<"\n"<<text[1];
}
I dopiero teraz się o tym dowiedziałem :roll:
ziomekmatti18
Piegowaty Guziec
Piegowaty Guziec
Posty: 11
Rejestracja: 15 gru 2011, 18:39
Płeć: Mężczyzna
Wersja Ubuntu: 11.10
Środowisko graficzne: Xfce
Architektura: x86_64

Re: [Solved][c++] Wczytywanie tablicy stringów do funkcji przez referencję

Post autor: ziomekmatti18 »

PeeR pisze:Faktycznie dokładnie tak jest przetestowałem

Kod: Zaznacz cały

#include <iostream>
#include <string>

using namespace std;

int main()
{
  string text[2];
  text[0] = "Miasto";
  cout << text[0][2]; // wyświetli się 'a'
  text[1] = "666";
  cout<<"\n"<<text[1];
}
I dopiero teraz się o tym dowiedziałem :roll:
Wow fajna opcja. Dzięki za dokształcenie :)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 10 gości