Array returnen

Status
Niet open voor verdere reacties.

NielsDesmet

Gebruiker
Lid geworden
19 mei 2008
Berichten
301
Hallo, ik heb met C++ nog niet zo veel ervaring en ik heb een probleempje;
Blijkbaar gaat het niet om in een functie, een array terug door te sturen. Als ik dit doe:
Code:
#include <iostream>
#include <string>

using namespace std;

int DeFunctie()
{
 int DeVar[5];
 DeVar[0] = 1;
 DeVar[1] = 2;
 DeVar[2] = 3;
 DeVar[3] = 4;
 DeVar[4] = 5;
 return DeVar;
}

int main()
{
    int DeMainVar = DeFunctie();
    cout<<DeMainVar;
    cin.get();
}
... Dan geeft mijn compiler (Dev C++) een fout: "invalid conversion from int* to int".
Ik heb al geprobeerd om een sterretje te zetten voor de DeVar op het laatste lijntje van DeFunctie, en dan compileert hij wel maar dan geeft hij enkel de waarde op DeVar[0] terug en is DeMainVar geen array.
Ik heb ook al geprobeerd om een typedef te maken die een int is van 10 elementen, dan werkt het wel. Maar het probleem is dat ik graag zou willen werken met variabele grootten voor die array, dus eigenlijk geen optie :S
Hoe los ik dit op?

(PS: Ik heb de overstap gemaakt van Javascript, waarschijnlijk is mijn denkmethode daarom fout :p)
 
Moet
[CPP]
int DeFunctie()
{
int DeVar[5];
DeVar[0] = 1;
DeVar[1] = 2;
DeVar[2] = 3;
DeVar[3] = 4;
DeVar[4] = 5;
return DeVar;
}
[/CPP]
niet
[CPP]
int[] DeFunctie()
{
int DeVar[5];
DeVar[0] = 1;
DeVar[1] = 2;
DeVar[2] = 3;
DeVar[3] = 4;
DeVar[4] = 5;
return DeVar;
}
[/CPP]

zijn?

Zelf kan ik geen cpp, maar wel cs en vb, en dit leek me logisch. Een array van een int != een int.
 
Nee, dat werkt niet... En da's in c++ denk ik ook syntaxisch incorrect.
Andere ideeën, aub?
 
Code:
int* DeFunctie()
In je main functie moet je dan ook
Code:
int* DeMainVar = DeFunctie();
gebruiken.
Je compiler kan dan nog steeds een waarschuwing geven
warning: address of local variable 'DeVar' returned
Je functie levert namelijk het geheugenadres van de lokale variabele "DeVar" op. Deze variabele bestaat niet meer nadat de functie is beëindigd, wat rare resultaten op kan leveren. Daarom kan je beter i.p.v.
Code:
int DeVar[5];
Code:
int* DeVar = new int[5];
gebruiken. Het gevolg is wel dat deze je het geheugen van deze variabele handmatig moet vrijgeven (mits je de variabele niet meer gebruikt voor het programma beëindigt (als het programma eindigt wordt het geheugen gebruikt door alle variabelen weer vrijgegeven)). Dit doe je met
Code:
delete[] DeMainVar;
.
 
'k sorry, ik had nog een vraag, maar ik had het laatste stukje van de vorige post niet goed begrepen, nu wel ;)
Vraag opgelost!
 
Laatst bewerkt:
Als alternatief voor de manier waarop je nu een array aanmaakt zou je ook een vector kunnen gebruiken. Dan hoef je jezelf geen zorgen te maken over het handmatig opruimen van de data. (in het geval dat je toch met pointers werkt zou je ook nog een smart pointer kunnen gebruiken, maar dat is in dit geval niet per se nodig)

Een voorbeeld die gebruik maakt van een vector:

Code:
#include <cstdlib>
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>

/*
   Ik heb voor dit voorbeeld even een makkelijke manier gekozen om de vector te vullen,
   maar normaal gesproken maak je een vector aan via 'std::vector<type> naam' en voeg je
   de waardes toe via 'naam.push_back(waarde)'
*/     
std::vector<int> deFunctie(){            
    std::vector<int> v(20);
    std::generate(v.begin(), v.end(), std::rand); 
    return v;
}
    
int main(int argc, char *argv[])
{
    std::vector<int> v = deFunctie();
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, "\n"));
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan