C++:不能调用成员函数没有对象

问题描述:

我想写一个类与映射保持注册表与唯一的ID以便以后访问对象。所有编译好,直到我写了for循环主要试图访问类的对象和他们的数据。我完全错了。我声明所有静态,但不起作用。我一直在尝试几个小时,但无法解决它。我知道问题出在地图上,因为这对我来说是新的,但我似乎无法找到问题。希望有人看到我的代码中出了什么问题。C++:不能调用成员函数没有对象

#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

嗨,这就是为什么我要先找到findbymap(INT)参考给有问题的对象。但它似乎没有得到:) – Stephane

+0

'commissionfixed'是一个成员函数,所以你必须在一个对象实例上调用它, 'val-> commissionfixed(VAL);'。 –

+0

这同样适用于'commissionextra()'。 –

#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 to myself :)))))) – Stephane