2017-03-05 3 views
-3

J'essaye d'écrire une classe avec une carte pour garder un registre avec un identifiant unique pour accéder plus tard aux objets. Tout compilé bien jusqu'à ce que j'écrive la boucle for principale essayant d'accéder aux objets de la classe et leurs données. Je ne sais pas ce qui ne va pas. J'ai déclaré tout statique mais ne fonctionne pas. J'essaye depuis plusieurs heures maintenant mais je n'ai pas pu le résoudre. Je sais que le problème est sur la carte car c'est nouveau pour moi, mais je n'arrive pas à trouver le problème. J'espère que quelqu'un voit ce qui ne va pas dans mon code.C++: impossible d'appeler une fonction membre sans objet

#include <iostream> 
#include <map> 
#include <cassert> 
#include <string> 
#include <algorithm> 

using namespace std; 

class vertegenwoordiger{ 

public: 
    vertegenwoordiger(int id, string x, int y): ID(id), name(x),aantalpc(y) { 

     addtoregistry(this); 
     cout << "Vertegenwoordiger " << x << " is aangemaakt met " << y << " aantal verkochte pc's " << endl; 
     gemiddeldeverkoop = (gemiddeldeverkoop + y)/id; 

    } 


     static map<int, vertegenwoordiger*>registryMap; // PROBLEM HERE I GUESS 
     static void addtoregistry(vertegenwoordiger* object){ 
      registryMap[object->ID] = object; 
    } 
     static void removefromregistry(vertegenwoordiger* object){ 
     registryMap.erase(object->ID); 

    } 


    static vertegenwoordiger* findbymap(int id){ 
     return registryMap[id]; 
    } // MAYBE THIS FUNCTION IS NOT CORRECT ASWELL???? 
    void commissionfixed (vertegenwoordiger* obj){ 
     commissievast = obj->aantalpc*winstperpc; 
    } 
    void commissionextra (vertegenwoordiger*obj){ 
     if (obj->aantalpc>gemiddeldeverkoop){ 
      commissieplus = (obj->aantalpc - gemiddeldeverkoop) * 37; 
     } 

    } 

    static const int winstperpc; 
    static int gemiddeldeverkoop; 
    const int ID; 


protected: 
    string name; 
    int aantalpc; 
    int commissievast; 
    int commissieplus; 


}; 

const int vertegenwoordiger::winstperpc = 150; 
int vertegenwoordiger::gemiddeldeverkoop = 0; 

int main() 
{ 
    for (int i=0; i<4; i++){ 
     string naam; 
     int pc; 
     cout << "geef naam in :"; 
     cin >> naam; 
     cout << "geef aantal pc op :"; 
     cin >> pc; 
     vertegenwoordiger* test = new vertegenwoordiger (i+1,naam,pc); 
     cout << "volgende aub : " << endl; 
    } 


    for (int i=1; i<4 ; i++){ 
     vertegenwoordiger* val = vertegenwoordiger::findbymap(i); // I GUESS THE PROBLEM IS RELATED TO THIS LINE 
     vertegenwoordiger::commissionfixed (val); 
     vertegenwoordiger::commissionextra (val); 

    } 

    return 0; 
} 
+0

Salut, Voilà pourquoi j'ai d'abord besoin de trouver la référence à l'objet en question par findbymap (int). Mais il semble que cela ne soit pas le cas :) – Stephane

+0

'commissionfixed' est une fonction membre, vous devez donc l'appeler sur une instance d'objet, par ex. 'val-> commissionfixed (val);'. –

+0

Il en va de même pour 'commissionextra()'. –

Répondre

0
#include <iostream> 
#include <map> 
#include <cassert> 
#include <string> 
#include <algorithm> 

using namespace std; 
class vertegenwoordiger{ 
public: 
vertegenwoordiger(int id, string x, int y): ID(id), name(x),aantalpc(y){ 
addtoregistry(this); 

cout << "Vertegenwoordiger " << x << " is aangemaakt met " << y << " aantal verkochte pc's " << endl; 
gemiddeldeverkoop = (gemiddeldeverkoop + y)/id; } 

static map<int, vertegenwoordiger*>registryMap; 

static void addtoregistry(vertegenwoordiger* object){ registryMap[object->ID] = object; } 

static void removefromregistry(vertegenwoordiger* object){ registryMap.erase(object->ID); } 

static vertegenwoordiger* findbymap(int id){ return registryMap[id]; } 

void commissionfixed(){ 
commissievast = this->aantalpc*winstperpc; } 

void commissionextra(){ 
if (this->aantalpc>gemiddeldeverkoop){ commissieplus = (this->aantalpc - gemiddeldeverkoop) * 37; } } 

void readCommission(){ 

cout << "comission payment is " << this->commissievast << endl; 
} 

static const int winstperpc; 
static int gemiddeldeverkoop; 
const int ID; 

string name; 
protected: 
int aantalpc; 
int commissievast; 
int commissieplus; 
}; 

map<int, vertegenwoordiger*>vertegenwoordiger::registryMap; 

const int vertegenwoordiger::winstperpc = 150; int vertegenwoordiger::gemiddeldeverkoop = 0; 

int main() { 

for (int i=0; i<2; i++){ string naam; int pc; cout << "geef naam in :"; 
cin >> naam; 
cout << "geef aantal pc op :"; 
cin >> pc; 

vertegenwoordiger* test = new vertegenwoordiger (i+1,naam,pc); 
cout << "next please : " << endl; } 

for (int i=1; i<3 ; i++){ 

vertegenwoordiger* val = vertegenwoordiger::findbymap(i); 
val->commissionfixed(); 
val->commissionextra(); 

val->readCommission(); 
} 


return 0; } 
+0

Thx à moi-même :)))))) – Stephane