Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Inicjalizacja tablic nie będących agregatami

Ostatnio zmodyfikowano 2013-06-11 13:34
Autor Wiadomość
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:

C/C++
#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
C/C++
lista[ 5 ] =
{
    osoba( 1, "Imie" ) //jest tylko jeden obiekt
    // lub osoba()
   
};
Proszę o wyjaśnienie co robię źle.
P-85372
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ą.
P-85373
akcza
Temat założony przez niniejszego użytkownika
» 2013-06-11 13:27:32
Dzięki, działa :)
Poprawny kod:
C/C++
osoba lista[ 5 ] =
{
    osoba(),
    osoba( 1, "Imie1" ),
    osoba( 2, "Imie2" ),
    osoba()
};
P-85376
Mitu
» 2013-06-11 13:28:47
Ok, widzę, że już rozwiązane :)
P-85377
pekfos
» 2013-06-11 13:34:04
Musisz miejsce deklaracji połączyć z inicjalizacją.
Definicji :)
P-85378
« 1 »
  Strona 1 z 1