意味不明なリンカエラー (1) †VC++(.NET)で、コンパイルは通るのに、リンクでエラーになる。 hoge.obj : error LNK2001: 外部シンボル "(シンボル名)" (C++でのシンボル名?)" は未解決です。 C++ でのシンボル名というのは "??メソッド名や名前空間を@@でつないだような文字列" みたいなやつ。 Microsoft の説明を見ると、これは、 シンボル名は宣言されているが、実装がない(見つからない) ケースが多いだろうと。つまり、
というパターンになるだろうなぁと。 前者の間違いは比較的発見しやすいが、後者の場合にハマることが多い。 つまり、宣言通りに実装している(はずである)のに、リンカが「実装がない」と怒っていると。 ちゃんと探せよボケリンカ!といいたくなるエラー。 宣言はヘッダー(.h)に書いて、実装を別のファイル(.cpp など)に書く場合、 かつ、それらのソースが同じプロジェクトに含まれていない場合に、 そのヘッダのみを include して使おうとしたときに、 リンカがこの実装を見つけてくれないというパターンが多い。 この場合、次の解決方法がある。
どちらもあまり美しくないが、一応これで解決はする。 もっと良い方法ないかなぁ。 備考 †クラスの場合、ヘッダにインラインで書かないで別の実装部を記述する場合は、 クラス名::メンバ名(メソッド名) という記述をする必要がある。 |