August 20, 2001
Hej, Jag håller på att skriva ett program...
Jag har skapat en klass och ett vektorobjekt till klassen:
Dryck temp[5]
Hur skickar man hela objektet (med alla de olika vektorerna) till en ny funktion, så att jag kan använda klassens datamedlemmar och funktioner även i den funktionen...
September 1, 2002
Om det är C++ vi snackar så löses det enkelt med pekare.
Den nya funktionen behöver ha en strukturpekare/objektpekare som in-argument, och när du anropar funktionen skickar du med pekaren till strukturen som ett argument till funktionen.
Kom ihåg att du måste deklarera strukturvariabeln på sådant sätt att andra funktioner kan nå den, dvs public/protected.
I funktionen sedan adresserar du objektets medlemmar med -> istället för .
September 1, 2002
Skulle du kunna vara vänlig att skriva hur deklarationen av vektorobjekten (med medlemmar och allt) ser ut. Det är även intressant att se hur funktionsdeklarationen ser ut och hur du anropar denna funktion.
Svårt att hjälpa till annars, för det finns risk att jag pratar äpplen och du pratar päron. 🙂
August 20, 2001
Fixade det nog 😉
Men såhär ser det för tillfället ut:
// Dryck.h
class Dryck
{
char varunamn[20]; // Varans namn
float pris; // Varans pris
public:
Dryck() { pris = 0; strcpy(varunamn, ""); } // Konstruerare som nollställer datamedlemmar
~Dryck() {} // Destruerare
// Medlemsfunktion för tilldelning av ett drycknamn och pris
void Set_Dryck(float p, char vn[20]) { pris = p; strcpy(varunamn, vn); }
float Get_Pris() { return pris; } // Returnerar objektpris
char *Get_Varunamn() { return varunamn; } // Returnerar objektnamn
float Vaxel(float betalning) { return (betalning - pris); } // Returnerar växel vid beställning
};
// Kaffeautomat.cpp
#include <iostream>
#include <conio>
#include "Dryck.h"
using namespace std;
Dryck *Meny(Dryck *pekare);
int main()
{
Dryck Obj[5];
// Dryck *pObj = Obj;
char *Drycker[5] = { "Kaffe", "Mocka", "Choklad", "Nyponsoppa", "Fruktsoppa" };
float Dryckpris[5] = { 3, 3.5, 2.5, 4, 4.5 };
float Inbetalning = 0;
int Key = getch();
for(int i = 0; i < 5; i++)
{
Obj[i].Set_Dryck(Dryckpris[i], Drycker[i]);
}
Meny(&Obj[0]);
// do {
// cout << "test";
// system("cls");
// Meny(&Obj[0]);
// if(Key == 0) Key = getch()* - 1;
// } while(Key != 13);
}
Dryck *Meny(Dryck *pekare)
{
cout << "Vx84lj dryck Nr."; cout.width(60); cout << "Avsluta < Esc >" << endl;
for(int i = 0; i < 5; i++)
{
cout << "0 : " << pekare->Get_Varunamn() << "t: " << pekare->Get_Pris() << endl;
pekare++;
}
// cout << pekare->Get_pris();
return 0;
}
July 28, 2003
deklarera den nya funktionen ungefär såhär:
void foo(Dryck drycker[], int count);
alternativt:
void foo(Dryck *drycker, int count);
Därefter är det bara att köra på som vanligt:
for (int i = 0; i < count; i++)
drycker[i].Set_pris(12345);
anropa funktionen:
foo(Obj, 5);
August 20, 2001
Det funkade inte speciellt bra... Men jag har redan löst det problemet...
Kan någon förklara varför programet hänger sig och sedan när jag trycker på enter så skriver den ut menyn (och avslutar sig själv) ... eller om jag trycker på en annan knapp så skriver det ut menyn om och om igen utan att jag kan stanna programmet????
1 Guest(s)