내 C++ 클래스 용 달력을 작성합니다. 정적 메서드와 정적 컨테이너 유틸리티 클래스가 있습니다. 가장 두드러진 :int 및 tuple의 정적 STL지도는 0을 반환합니다.
Dictionary.h
static std::map<int,std::tuple<std::string,int>>months;
static std::map<int,std::tuple<std::string,int>>::iterator mitr;
이지도는 키, 월 0-11로 포함되어 있습니다. 튜플 값은 각 달의 문자열 표현과 각 달의 일 수를 포함합니다.
하는 Calendar.cpp
Calendar::Calendar(){
Dictionary::init();
time_t t = chrono::system_clock::to_time_t(chrono::system_clock::now());
tm* t2 = localtime(&t);
int mo = (t2->tm_mon);
Dictionary::mitr = Dictionary::months.find(mo);
cout<<(*Dictionary::mitr).first<<endl; // => 0
cout<<get<0>((*Dictionary::mitr).second)<<endl; // nothing
}
잘 모르겠어요 : 예를 들면 : 나는 다른 클래스에서이지도를 액세스 할 때
Dictionary.cpp
map<int,tuple<string,int>> Dictionary::initMonths(){
map<int,tuple<string,int>>m;
map<int,tuple<string,int>>::iterator mapitr = m.begin();
m.insert(mapitr, make_pair(0,make_tuple("January",31)));
m.insert(mapitr, make_pair(1,make_tuple("February",28)));
// insert remaining months...
return m;
}
문제가 발생합니다 내가 여기서 잘못하고있는 것. 모든 제안을 부탁드립니다.
편집 :
void Dictionary::init(){
packaged_task<map<int,tuple<string,int>>()>task3(initMonths);
future<map<int,tuple<string,int>>>fu3 = task3.get_future();
guarded_thread t3(std::move(task3));
map<int,tuple<string,int>>months = fu3.get();
}
여기에서지도를 사용하는 주된 이유는 월 번호 인덱스를 바인딩하는 것이기 때문에, 달의 문자열 이름과 달의 일 수를 모두 하나의 컨테이너에 함께 표시합니다. –
벡터로 여전히 가능할 것입니다 (그리고 더 쉬울 수도 있습니다) : 'std :: vector> months (12); 개월 [0] = make_tuple ("January", 31); // ...' –
volzo
... btw, 원래 문제가 해결 되었습니까? – volzo