Toon posts:

[c++] pointer naar een vector ?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

ik wil dus een functie een pointer naar een vector terug laten geven. Dit omdat ik enkele bewerkingen op die vector wil uitvoeren.

Ik heb dit als volgt gedaan:

vector <int> * GetallenKlasse :: GetGetallen()
{
return &getallen;
}

Hier wordt ie dus "teruggegeven"
naar hier....:

vector <int> * getallen;
getallen = test.GetGetallen();

gaat allemaal lekker, geen errors ofzo.., maar als ik dan iets met 'getallen' ( de pointer naar de vector dus ) wil doen, geeft de compiler de volgende errormelding:

GRRR copy/paste werkt niet |:(
naja iets van : request voor member size, which is of non-aggragate type vector<int,allocator<int> >

Aangezien ik nauwelijks ervaringen heb met vectoren in c++ ( gebruikte altijd loeigrote arrays ;) ) wordt ik hier een beetje gek van. Ik hoop dat hier iemand de oplossing weet.


alvast bedankt,

plors

Verwijderd

Kun je misschien ook de code posten die de error oplevert ?

Edit:
Welkom op GoT en /P&W :)
Voor nuttige informatie: P&W FAQ.

Verwijderd

Topicstarter
heel simpel :)

cout << getallen.size();

zou dus het aantal elementen van de vector moeten tonen.

  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:21

Sjonny

Fratser

je werkt met een pointer .... use -> ipv . natuurlijk!

The problem is in the part of your brain that handles intelligence.


Verwijderd

Op donderdag 06 juni 2002 21:16 schreef plors het volgende:
heel simpel :)

cout << getallen.size();

zou dus het aantal elementen van de vector moeten tonen.
Members aanroepen m.b.v. een pointer werkt als volgt:
code:
1
cout << getallen->size();

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 19:42
Op donderdag 06 juni 2002 21:09 schreef plors het volgende:
naja iets van : request voor member size, which is of non-aggragate type vector<int,allocator<int> >
Ik vind dat je toch wel de moeite mag nemen om de volledige foutmelding exact over te nemen. Dat is namelijk wel relevant.

Op basis van de tekst "non-aggregate type" gok ik dat je een pointer als object/structure probeert te gebruiken. Is 'test' wel een object (en dus geen pointer naar een object)?

Verwijderd

Topicstarter
Natuurlijk!! -> ipv .

wat kan een mens soms ook stom zijn ;(


iig bedankt!

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Waarom wil je in een pointer returnen naar een vector in dit geval. 90% van de tijd is de vector het hart van je classe en wil je die niet vrijgeven voor bewerkingen dmv een pointer toch?

Verwijderd

Topicstarter
in principe heb je gelijk, was ook meer voor experimentele doeleinden. Wilde het gewoon eens doen.

Sneechy bedankt *D

Verwijderd

Topicstarter
hmm, dit is vreemd....

members als erase() en insert() werken prima, maar als ik dus de aloude size() in cout << getallen->size(); gebruik, geeft hij altijd 0 terug :S

iemand nog een idee hoe dit komt en of het op te lossen is?

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Je debuggertool kan er vast achter komen :?

  • Sjonny
  • Registratie: Maart 2001
  • Laatst online: 21:21

Sjonny

Fratser

doe es wat code posten, want zo moeten wij ook maar wat raden...

The problem is in the part of your brain that handles intelligence.


Verwijderd

Topicstarter
ok, ff flink snoeien, maar dit is waar het om gaat:

GetallenKlasse.h
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <vector>

class GetallenKlasse
{
vector <int> getallen;

public:

vector <int> * GetGetallen();
void GetallenInvoer();
void ShowGetallen();

};

GetallenKlasse.cc :
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
29
#include "GetallenKlasse.h"


vector <int> * GetallenKlasse :: GetGetallen()
{
return &getallen;
}


void GetallenKlasse :: GetallenInvoer()
{
int getal;

for( int i=0;i<5;i++ ) {
cout << "Geef getal : "; cin >> getal;
getallen.push_back( getal );
}

}


void GetallenKlasse :: ShowGetallen()
{
for( int i=0;i<getallen.size();i++ ) {
cout << getallen[i] << " ";
}
cout << "\n";

}

en hier de Main.cc
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream.h>
#include <vector>
#include "GetallenKlasse.h"

int main()
{

      GetallenKlasse test;
test.GetallenInvoer();

vector <int> * getallen;
getallen = test.GetGetallen();

      getallen->erase( getallen->begin() + 3 );
getallen->insert( getallen->begin() + 3, 50 );

      cout << getallen->size() << endl;

test.ShowGetallen();
}

Dit is het stukje waar het om gaat, erase/insert werken wel goed, het 4e element wordt keurig vervangen door 50, maar bij size() gaat het dus een mis, daar zegt ie dat zich maar 0 elementen in de vector bevinden.

Verwijderd

Eén van de nuttige tips in de P&W FAQ waar ik al eerder naar verwees is dat je je source code tussen [ code ] .. [ /code ] tags kan (behoort te) zetten om je formatting te behouden :).

Verwijderd

offtopic:
de plors???

Verwijderd

Topicstarter
is al opgelost, na het opnieuw opstarten van mijn IDE ging het wel goed. vaag, maar jah....



idd hijmen, er is er maar een 8-)

Verwijderd

Op vrijdag 07 juni 2002 15:48 schreef plors het volgende:
idd hijmen, er is er maar een 8-)
meld je ff aan op ti4.nl dan! >:)

Verwijderd

[offtopic]
heu plors, had je mbo maar af moeten maken had je het misschien geweten :p
[/offtopic
Pagina: 1