Toon posts:

[c++] vector problemen....

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb een programmaatje geschreven waarin ik een lidfunctie van een object dat zich in een vector bevindt wil uitvoeren. Van deze vector heb ik alleen een pointer.

Klinkt wat vaag zo, maar zal de situatie proberen uit te leggen adhv de volgende code.
Eerst de Klasse Persoon:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Persoon
{
private:
    int nummer;
    string naam;

public:
    Persoon()
    {
    }

    Persoon( string naam, int nummer)
    {
        this->naam = naam;
        this->nummer = nummer;
    }

    void ShowPersoon()
    {
        cout << naam << " " << nummer << endl;
    }
    
    friend ostream& operator<<( ostream &uit, Persoon &p )
    {
        uit << p.naam << " " << p.nummer << endl;
    }

};

spreekt voor zich allemaal lijkt me.

Dan de Klasse Groep:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Groep
{
private:
    vector <Persoon> personen;
    string groepnaam;
    Persoon persoon;

public:
    Groep()
    {
    }

    Groep( string groepnaam, Persoon persoon )
    {
        this->groepnaam = groepnaam;
        personen.push_back( persoon );
    }

    vector <Persoon> * GetPersonen()
    {
        return &personen;
    }
};

Hierin is dus een vector personen gedeclareerd van type Persoon. Via de functie GetPersonen() is een pointer naar deze vector verkrijgbaar.


En dan nog de main, waarin een persoon p1 wordt aangemaakt en een groep g1.
code:
1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
    Persoon p1( "jantje", 5000 );
    Groep g1( "groep1", p1 );

    vector <Persoon> * personen;

    personen = g1.GetPersonen();
    
    personen[0]->ShowPersoon(); 
    
}

personen is een pointer van type Persoon, die via g1.GetPersonen naar de vector in het object g1 gaat wijzen. Tot hier gaat het allemaal prima.
Alleen als ik nu een lidfunctie van een object dat zich in de vector bevind wil aanroepen gaat het mis. In dit geval wil ik dus de naam en het nummer van de eerste ( en enigste ) persoon in de vector op het beeld zetten. Dit dmv de lidfunctie ShowPersoon().

Als ik nu compile krijg ik de volgende melding:

base operand of `->' has non-pointer type `vector<Persoon,allocator<Persoon> >'

Dit is tamelijk logisch, want de base operand is nu eigenlijk een object Persoon, maar als ik nu `->' door een `.' vervang, dus personen[0].ShowPersoon(); krijg ik de volgende melding van de compiler:

no matching function for call to `vector<Persoon,allocator<Persoon> >::ShowPersoon ()'

Dus ergens gaat er nog steeds iets fout, tzou heel goed iets zeer eenvoudigs kunnen zijn, maar ik zie het ff niet meer.

Ik hoop dat duidelijk is wat de bedoeling is, en wacht in spanning af :)

grtz,

plors

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
En ditte dan ?
code:
1
(*personen)[0].ShowPersoon();

[edit]
Misschien nog wat bijspijkeren die pointerkennis ....

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Waarom geeft GetPersonen() een pointer terug en niet een reference? Dat lijkt mij veel logischer en netter.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:39
Op vrijdag 07 juni 2002 19:11 schreef Orphix het volgende:
Waarom geeft GetPersonen() een pointer terug en niet een reference? Dat lijkt mij veel logischer en netter.
Waar. Die pointernotatie is aan de vunzige kant... ;)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 18:17
Op vrijdag 07 juni 2002 19:11 schreef Orphix het volgende:
Waarom geeft GetPersonen() een pointer terug en niet een reference? Dat lijkt mij veel logischer en netter.
Hoe werkt dat met een reference dan?

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 18:17
Hè, nou wil ik het ook wel graag weten ook :)

Verwijderd

Als je in je C++ boek opzoekt wat een reference is (en hoe het ten opzichte van een pointer staat), vergelijk:

vector <Persoon> * GetPersonen()

met:

vector<Persoon> &getPersonen()

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 18:44
Op zaterdag 08 juni 2002 12:39 schreef lnfinitive het volgende:
Als je in je C++ boek opzoekt wat een reference is (en hoe het ten opzichte van een pointer staat), vergelijk:

vector <Persoon> * GetPersonen()

met:

vector<Persoon> &getPersonen()
En een echt goed boek laat zien dat je eigenlijk
code:
1
vector<Persoon> const& getPersonen() const;

bedoeld, omdat je niks wil wijzigen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1