VC全般 LNK2001リンクエラーの回避策 | 株式会社リッカWebサイト

株式会社リッカ

BLOG
ブログ詳細

2015-11-09VC全般 LNK2001リンクエラーの回避策

困った時の画像

環境

(環境依存なし)

Windows8.1
VC2013

現象

リンクエラーって難しいですよね。
コンパイルが通ってるから行数の特定も難しいですし。

先日「リンクエラー:LNK2001」が出て、同僚が悩んでいたので一緒に見てました。

MSDNでは難しい説明がずらりと…
(参考:リンカ ツール エラー LNK2001)
けど、そんなに難しいことはしてないんです。

原因

以下のようなコードを書いていました。

なんとなく通りそうな気がしますが、LNK2001が発生します。

BaseClassに着目すると、funcが仮想関数になっていて実装がありませんでした。
話を聞くと、純粋仮想関数を作りたかったみたいです!!

と言うことは

これでOKじゃないか!

結論

「LNK2001:外部シンボル”xxxxxx”は未解決です。」が発生したら、
慌てず追加したコードを確認しましょう。

解決方法に書きましたが、純粋仮想関数を作るなら引数の後ろに=0を書きます。
仮想関数なら実装(定義)をちゃんと書きましょう。

追加調査

今回は、ライブラリに書いた基本クラスをDLLに書いた派生クラスが継承していました。

ライブラリではビルドが通ってしまうのが厄介なところですね。
リンクエラーの絶望感は半端ないっすからね!!