VC PlusPlus:Link Error LINK2019 未解決のシンボル…で参照されました。 対処方法 新しいページはコチラ

提供: yonewiki
移動: 案内, 検索
(2.C言語とC++言語の混在による呼び出し関数の互い違い)
(2.C言語とC++言語の混在による呼び出し関数の互い違い)
151行: 151行:
 
#endif
 
#endif
  
void __cdecl zcalloc(void * vValue,unsigned int uiValue,unsigned int uiValue2);
+
void __cdecl zcalloc(void * vValue, unsigned int uiValue, unsigned int uiValue2);
  
 
#ifdef __cplusplus
 
#ifdef __cplusplus
165行: 165行:
  
 
 そしてSample.hとSample.cppを自分が開発を進めているプロジェクトに取り込みます。インクルードパスの解決をしている場合は、Sample.hはプロジェクトに追加する必要はないかもしれません。なのでしっかりとSample.cppをプロジェクトに追加します。ヘッダファイルはSample.cpp内で#include "Sample.h"となっているなら、プロジェクトのプロパティのC/C++の項目の全般のところにある追加のインクルードファイルパスにSample.hがあるところを相対パスで指定します。必ずセットで移動する仕組みの関係になっていればです。一緒には動かさない。参照するライブラリ群は常に同じなら絶体パスで指定すると良いでしょう。であれば、本来ならばインクルードは#include <Sample.h>のように記述する方法をとるといいのかもしれません。元のファイルとの関係もあるので、あまり変更しない方がいいと思うので、"Sample.h"のような記述でインクルードするもの有りだとは思います。ちなみに<Sample.h>のようになっていれば、プロジェクトのプロパティのVCディレクトリという欄の追加のインクルードの方にパスを記述します。リンカエラーが何が参照できなかったかというヒントは表示されるので名前マングリング処理されたエラーが表示されても冷静に対処できるはずです。名前マングリングがややこしさを増殖させて感じてしまいがちですが、名前マングリングが起こることが分かっていれば、正確に何がどこに無くてエラーなのかっていうのは探知できると思います。
 
 そしてSample.hとSample.cppを自分が開発を進めているプロジェクトに取り込みます。インクルードパスの解決をしている場合は、Sample.hはプロジェクトに追加する必要はないかもしれません。なのでしっかりとSample.cppをプロジェクトに追加します。ヘッダファイルはSample.cpp内で#include "Sample.h"となっているなら、プロジェクトのプロパティのC/C++の項目の全般のところにある追加のインクルードファイルパスにSample.hがあるところを相対パスで指定します。必ずセットで移動する仕組みの関係になっていればです。一緒には動かさない。参照するライブラリ群は常に同じなら絶体パスで指定すると良いでしょう。であれば、本来ならばインクルードは#include <Sample.h>のように記述する方法をとるといいのかもしれません。元のファイルとの関係もあるので、あまり変更しない方がいいと思うので、"Sample.h"のような記述でインクルードするもの有りだとは思います。ちなみに<Sample.h>のようになっていれば、プロジェクトのプロパティのVCディレクトリという欄の追加のインクルードの方にパスを記述します。リンカエラーが何が参照できなかったかというヒントは表示されるので名前マングリング処理されたエラーが表示されても冷静に対処できるはずです。名前マングリングがややこしさを増殖させて感じてしまいがちですが、名前マングリングが起こることが分かっていれば、正確に何がどこに無くてエラーなのかっていうのは探知できると思います。
 +
 +
 +
 C言語からC++言語に変更するには、ファイルの拡張子の変更だけで済む場合もありますが、関数の引数の型定義が、外出しになっている以下のように記述された関数
 +
 +
Sample.c
 +
<syntaxhighlight2 lang="c">
 +
 +
void zcalloc(vValue, uiValue, uiValue2)
 +
void * vValue,
 +
unsigned int uiValue,
 +
unsigned int uiValue2
 +
{
 +
  …
 +
}
 +
</syntaxhighlight2>
 +
 を
 +
 +
Sample.cpp
 +
<syntaxhighlight2 lang="cpp">
 +
 +
void zcalloc(void * vValue, unsigned int uiValue, unsigned int uiValue2)
 +
{
 +
  …
 +
}
 +
</syntaxhighlight2>
 +
 と、こんな感じに修正する必要があります。メンドクサイ。
  
  

2021年2月5日 (金) 00:00時点における版



個人用ツール
名前空間

変種
操作
案内
ツールボックス