나중에 개체에 액세스 할 수 있도록 고유 한 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;
}
안녕하세요 이 때문입니다. 그러나 그것은 그것을 얻지 못하는 것 같습니다 :) – Stephane
'commissionfixed'는 멤버 함수입니다. 그래서 객체 인스턴스에서 호출해야합니다. 'val-> commissionfixed (val);'. –
'commissionextra()'에도 똑같이 적용됩니다. –