[C++] Inicjalizacja tablic nie będących agregatami
Ostatnio zmodyfikowano 2013-06-11 13:34
akcza Temat założony przez niniejszego użytkownika |
[C++] Inicjalizacja tablic nie będących agregatami » 2013-06-11 12:57:48 Witam, mam problem z następującym kodem: #include <iostream> #include <string.h>
using namespace std;
class osoba { private: int wiek; char imie[ 80 ]; public: osoba( int lata, char * txt ); osoba(); void wypisz(); };
int main() { osoba lista[ 5 ]; lista[ 5 ] = { osoba(), osoba( 1, "Imie1" ), osoba( 2, "Imie2" ), osoba() }; return 0; }
osoba::osoba( int lata, char * txt ) : wiek( lata ) { strcpy( imie, txt ); }
osoba::osoba() { wiek = 0; strcpy( imie, "Nieznajomy" ); }
void osoba::wypisz() { cout << "Imie: " << imie << ", lat: " << wiek << endl; }
Błędy: C:\Users\Patryk\Desktop\Code Blocks\cwiczenie\main.cpp|30|error: no match for 'operator=' in 'lista[5] = {osoba(), osoba(1, ((char*)"Imie1")), osoba(2, ((char*)"Imie2")), osoba()}'| C:\Users\Patryk\Desktop\Code Blocks\cwiczenie\main.cpp|30|note: candidate is:| C:\Users\Patryk\Desktop\Code Blocks\cwiczenie\main.cpp|7|note: osoba& osoba::operator=(const osoba&)| C:\Users\Patryk\Desktop\Code Blocks\cwiczenie\main.cpp|7|note: no known conversion for argument 1 from '<brace-enclosed initializer list>' to 'const osoba&'|
Działa tylko kiedy w lista[ 5 ] = { osoba( 1, "Imie" ) };
Proszę o wyjaśnienie co robię źle. |
|
akwes |
» 2013-06-11 13:14:15 Starasz się użyć listy inicjalizacyjnej już po definicji obiektu.
Właściwie to starasz się wpakować 4 obiekty do szóstego elementu tablicy. Musisz miejsce deklaracji połączyć z inicjalizacją. |
|
akcza Temat założony przez niniejszego użytkownika |
» 2013-06-11 13:27:32 Dzięki, działa :) Poprawny kod: osoba lista[ 5 ] = { osoba(), osoba( 1, "Imie1" ), osoba( 2, "Imie2" ), osoba() };
|
|
Mitu |
» 2013-06-11 13:28:47 Ok, widzę, że już rozwiązane :) |
|
pekfos |
» 2013-06-11 13:34:04 Musisz miejsce deklaracji połączyć z inicjalizacją. |
Definicji :) |
|
« 1 » |