constメンバ関数の罠

に嵌まって3時間くらい頓挫した。
たしか、

virtual void set(const unsigned char *p){};

メンバ関数を継承側で

virtual void set(const unsigned char *p) const {
 適当な処理
};

こんな感じに間違えてconstメンバ関数にしてた。
setするのにconstつけている時点でだめだめだが、
何回やっても継承元が呼ばれていてしかも継承元が何もしないブロック付きなので
何事も無かったように何もしない。
結局、継承元を

virtual void set(const unsigned char *p) =0;

としてコンパイルエラーが出たのでやっと気付けたのであった。


最近覚えたconstメンバ関数は、const・非constどちらのインスタンスからも呼べるということを意識するあまりいろんなとこに後付けでconstつけたのが裏目に・・・