2017-03-05 2 views
-3

나중에 개체에 액세스 할 수 있도록 고유 한 ID로 레지스트리를 유지하기 위해 맵을 사용하여 클래스를 작성하려고합니다. 클래스와 데이터의 객체에 액세스하려고 할 때 main에 for 루프를 작성할 때까지는 모든 컴파일이 완료되었습니다. 나는 정확히 무엇이 잘못되었는지를 놓치고있다. 나는 모든 정적을 선언했지만 작동하지 않는다. 나는 지금 몇 시간 동안 노력했지만 그것을 해결할 수 없었다. 나는 그 문제가지도에 새롭다는 것을 안다. 그러나 문제를 찾을 수없는 것 같다. 누군가가 내 코드에서 무엇이 잘못되었는지 보길 바랍니다. 내가 findbymap (INT)에 의해 해당 개체에 대한 참조를 찾을 필요가 왜 첫번째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

안녕하세요 이 때문입니다. 그러나 그것은 그것을 얻지 못하는 것 같습니다 :) – Stephane

+0

'commissionfixed'는 멤버 함수입니다. 그래서 객체 인스턴스에서 호출해야합니다. 'val-> commissionfixed (val);'. –

+0

'commissionextra()'에도 똑같이 적용됩니다. –

답변

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 : 나) :))))))))) – Stephane

관련 문제