STL에서 멤버함수 포인터 어댑터 사용 도움 부탁드립니다.
for_each를 사용하여 deque에 들어있는 포인터 객체들을 해제하기 위해 소멸자에 다음과 같이 넣었습니다.
Menu::~Menu()
{
for_each(children.begin(), children.end(), mem_fun(&Menu::deleteChild));
}
void Menu::deleteChild(Menu* menu) const
{
delete menu;
}
에러메시지는 다음과 같이 뜹니다.
27 menu.cpp:30: instantiated from here
28 /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/include/g++-v3/bits/stl_algo.h:158: error: no match for call to `(std::mem_fun1_t
29 /usr/lib/gcc/i686-pc-linux-gnu/3.4.5/include/g++-v3/bits/stl_function.h:792: note: candidates are: void std::mem_fun1_t
이것 저것 다 해봤지만 해결하질 못하겠습니다. 헤더파일 소스는 아래에 올리겠습니다.
class Menu {
public:
Menu(const std::string& title = "", Menu* parent = 0);
Menu(const Menu& other);
const Menu& operator= (const Menu& other);
virtual ~Menu() = 0;
virtual Menu* add(Menu* child);
void setTitle(const std::string& title);
const std::string& getTitle() const;
protected:
void Menu::deleteChild(Menu* menu) const;
std::string title;
Menu* parent;
private:
std::deque<Menu*> children;
};
안되는게 당연하죠...
Menu:: deleteChild는 인수 하나를 받아야 하는데 for_each에는
인수 형태를 void로 넘겼으니 형체크에서 오류가 나는건 당연합니다.
해결법은 std::bind를 사용하시거나 functor로 해결하셔야 합니다.
無心
댓글 달기