Parameters naar functies

Status
Niet open voor verdere reacties.

manhaeve5

Gebruiker
Lid geworden
9 jan 2007
Berichten
276
Ik heb deze functie:
Code:
void optellen(int *a, int *b)
{
 ...gedoe...
}
Maar als ik bevoorbeeld dit wil gebruiken
Code:
optellen(4,6);
gaat dit natuurlijk niet. Hoe kan ik dit oplossen zonder dat ik de pointers moet vervangen
 
Ik weet niet of dit werkt:

Code:
int main ( )
{
   int a = 1;
   int b = 2;

   optellen(&a, &b);
}

void optellen(int *a, int *b)
{
 ...gedoe...
}

Anders moet je dit proberen:
Code:
int main ( )
{
   int a = 1;
   int b = 2;
   int *p1 = &a;
   int *p2 = &b;

   optellen(p1, p2);
}
 
Ja dat werkt maar dat bedoel ik niet. Het moet zo gaan, zonder integers te aanamaken
Code:
opetellen(4,6);
 
op de manier die jij wilt kan het niet, ik zou het zo doen als het perse met die functie moet:
Code:
#include <iostream>

using namespace std;
void optellen(int *a, int *b);
void optelmirror( int a, int b );

int main(int argc, char *argv[])
    {
    optelmirror( 5, 6 );

    system("PAUSE");
    return EXIT_SUCCESS;
    cin.get();
    }
void optelmirror( int a, int b )
    {
    int x = a;
    int y = b;
    optellen( &x, &y );
    }
void optellen(int *a, int *b)
    {
    cout << *a << endl << *b << endl;
    }

mocht je het niet prettig vinden om met een andere naam te werken declareer dan een functie met dezelfde naam alleen nog een extra variabele, dan ziet de compiler automatisch welke je bedoelt als je die variabele wel of niet meegeeft
 
Eigenlijk werkt dat niet want dit is m'n echte code:
Code:
#include <cstdlib>
#include <iostream>
#include <etl>
using namespace std;
template <class T>
class vec
{
      private:
             int vecsize;
      public:
             T *data;
             vec():vecsize(0){}
             void add(T &a)
             {
                 data=&a;
                 data++;
                 vecsize++;
             }
             int size(){return vecsize;}
             void display(int loc)
             {
                  cout<<*(data-loc)<<endl;
             }
};

int main()
{
    vec<float> vec1;
    float b=20.2;
    vec1.add(b);
    vec1.display(0);
    vec1.display(1);
    cin.sync();
    cin.get();
    return 0;
}
Hoe kan ik dit hier doen dat je dit kunt doen vec1.add(10);
 
kan je een tweede "add" functie maken waarin het geen reference variabele is?
zo niet dan kun je alsnog een mirror functie maken die de add functie met reference aanroept (dit is wel langzaamer)

edit:
btw waarom moet het een reference zijn als je de var toch niet verandert? maak er een const reference van
 
ik heb ff geexperienteerd met je code, paar aanmerkingen

doe niet display(0) je schrijft dan de waarde van waar de pointer is en aangezien je de pointer gelijk verplaatst nadat je er een waarde in hebt geschreven weet je nooit wat hier instaat.

je getallen komen er achterstevoren in weet niet of dit de bedoeling is maar ik vind het lastig :P

nog een blok code waar je mischien wat aan hebt? ik heb een functie toegevoegd zodat je ieder type als data toe kan voegen en niet alleen het type van de class. p.s. het zijn geen pointers dat kan namenlijk niet als je het getal aanmaakt in de aanroep.

Code:
#include <cstdlib>
#include <iostream>
//#include <etl>
using namespace std;
template <class T>
class vec
{
      private:
             int vecsize;
      public:
             T *data;
             vec():vecsize(0){}
             void add(T &a)
             {
                 data=&a;
                 data++;
                 vecsize++;
             }
             template< typename V >
             void add(V a)
             {
                 *data=static_cast<T>(a);
                 data++;
                 vecsize++;
             }
             int size(){return vecsize;}
             void display(int loc)
             {
                  cout<<*(data-loc)<<endl;
             }
};

int main()
{
    vec<float> vec1;
    float b=20.2;
    vec1.add(b);
    vec1.add(6);
    vec1.display(1);
    vec1.display(2);
    cin.sync();
    cin.get();
    return 0;
}
ohja ik heb de etl header uitgezet omdat ik die niet hebt maar mag geen invloed hebben lijkt me
 
Bedankt, en die <etl> header is er een dat ik zelf geschreven heb. En kun je me die template<typename V> en die static cast eens uitleggen?
Er is verder nog 1 probleem:
als ik deze twee omwissel
Code:
vec1.add(6);
vec1.add(b);
Crasht m'n programma
 
Laatst bewerkt:
de template is dezelfde werking als de template die jij voor je class gemaakt heb alleen is hij voor types als int,double,float en niet voor een class

static cast is eigenlijk een manier om een omvorming van een getal te forceren
dus: (static_cast<int>(6.01) == 6) is waar

k zal morgen eens kijken waarom hij crasht
 
nog ff een vraagje wat je nou precies wilt doen, ik heb nog eens gekeken naar wat je doet maar ik kan mij niet voorstellen waar je dit voor nodig kan hebben, wat jij nu doet is de pointer naar het begin van de meegeleverde variabele zetten en dan beweeg je hem naar het volgende blok waar zo'n variabele in past. Je moet weten dat als je bijvoorbeeld twee keer een float toevoegt deze waardes in je geheugen niet achter elkaar hoeven te liggen. dit zorgt er dus voor dat je display functie waardes uit gaat spugen van geheugenblokken waar wij niet van weten wat erin zit.

dus nogmaals wat wil je precies doen met deze class?

p.s. weet je wat het verschil is tussen pointers en data in pointers?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan