純粋仮想関数

最近、一年ぶりぐらいにC++を触っていて、いろいろ悲鳴をあげています。
C++の文法はかなりうろ覚えでコンパイルエラーの度に一つずつ思い出していくといった状況なのですが、
次のようなリンクエラーの原因が分からずに途方に暮れてました。

% g++ -Wall main.cpp hoge.cpp
/tmp/cc3w1mAb.o(.gnu.linkonce.r._ZTV4Test+0x10): undefined reference to `Hoge::hoge(int)'
collect2: ld はステータス 1 で終了しました

半日悩んでようやく解決。
純粋仮想関数を示すキーワード(Javaの"abstract")が無いんだっけ?と思って
宣言だけして中身の実装が無いメソッドを置いていたのが原因で、

// interface
class Hoge {
public:
  virtual int hoge(int n) = 0;
};

というふうに、ちゃんと "= 0" をつけたら通った。
そういえばこういう宣言の仕方をするんだよねぇ…。
NULL も 0 と書いた方がいいらしいですし。
イメージ的にはメンバ関数は宣言しっぱなしじゃなく、必ず何らかの「定義」が必要という感じか。
コンパイルエラーじゃなくてリンクエラーになるんだな。