모든 개체에 대한 참조 목록을 유지해야하는 클래스가 있습니다. 예를 들어 : mapA
가 main.cpp
글로벌에만 있기 때문에동일한 클래스에서 사용하는 클래스 참조 클래스
//A.cpp
class A {
A() {}
someMethod() {}
someOtherMethod() { mapA[0]->someMethod(); }
}
//main.cpp
#include <map>
std::map<int, A*> mapA;
int main(int argc, char const *argv[]) {
int count = 0;
A* a = new A();
mapA[count] = a;
count++;
}
그러나, A.cpp
그것을 참조 할 수 없습니다. 내가 extern
을 사용하여 시도했지만 map
이 같은 클래스 A
을 사용하기 때문에 어디에 넣어야할지 모르겠다.
이 문제를 해결하는 가장 좋은 방법은 무엇입니까?
는 결함이 디자인처럼 조금 보이는. 첫째로, 왜 당신은 1 위의 맵에 저장된 미가공 포인터를 사용하고 있습니까? 실제 요구 사항에 대해 설명하고 사례를 조금 더 사용 하시겠습니까? 해결하려고하는 XY 문제와 약간의 소리가납니다. –
@ πάνταῥεῖ 나는'deposit()'과'withdraw()'메소드를 사용하여 은행 시스템을 작성하고있다. 그러나 나는 또한 어떤 은행의 계좌간에 돈을 이체하는'transfer()'를 가지고있다. 그래서 은행이 모든 기존 은행을 추적하기를 바랍니다. ABA와 같은 것. – drum
이 'transfer()'작업을 수행 할 수있는 인터페이스를 제공하는 모든 계정에 대해 상위 컨테이너 컨테이너 클래스를 갖는 것은 어떻습니까? 아마도 그런 종류의 비즈니스 논리를 외부화해야합니다. 또한 원시 포인터를 다루지 말고 대신 [스마트 포인터] (http://en.cppreference.com/w/cpp/memory)를 가져야합니다. –