はじめまして。
Visual C++ 6.0でWin32 Applicationでプログラムを作成したのですが、タイトルのエラーが消えません。
C++のプログラムから、自作のCソース(getmk.c)から関数getmkを呼び出すプログラム構成になっています。はじめはインクルードファイルに問題があってerror LNK2001というエラーが出ていたのですが、以下のようにインクルードファイル(getmk.h)を改善した結果、LNKエラーは消えました。ところが次に「error C2065: 'getmk' : undeclared identifier」が現れるようになりました。getmkが定義されていないといっていることはわかるのですが、C++側のソースでもC側のソースでもgetmk.hはインクルードしています。何が問題なのか自力ではわかりませんでした。長くなってしまいましたが、どなたかご指摘いただければありがたいです。よろしくお願いします。
#ifndef __GETMK_H__
#define __GETMK_H__ 1
#ifdef __cplusplus
extern "C" {
#endif
unsigned long getmk(char msg[], int mlen, char key[], int klen, int fg);
#ifdef __cplusplus
}
#endif
#endif
で、getmkをコンパイルしたobjもしくはlibはリンクしたんでしょうか?
また、他のヘッダで __GETMK_H__ を#defineしていないでしょうか。
回答ありがとうございます。
勉強不足で申し訳ありません。
まず、1つ目。
>>getmkをコンパイルしたobjもしくはlibはリンク
についてですが、getmkは本体のC++プロジェクトとは別にコンパイルしてobjまたはlibをリンクしなくてはいけないのですか?その場合は、別コンパイルで作成したobjまたはlibを使いたいプロジェクトのディレクトリに移せばいいのでしょうか?
2つ目。
他のヘッダで__GETMK_H__ を#defineとのことですが、これは行っていませんでした。他のヘッダすべてに#defineしなければならないのでしょうか。ちなみに他のヘッダはresouce.hとStdAfx.hです。
> getmkは本体のC++プロジェクトとは別にコンパイルしてobjまたはlibをリンクしなくてはいけないのですか?
プロジェクトに含まれているならOK.
> 他のヘッダで__GETMK_H__ を#defineとのことですが、これは行っていませんでした。他のヘッダすべてに#defineしなければならないのでしょうか。
逆。同じものがあってはならない。
たびたびすみません。ありがとうございます。
他のヘッダでは同一#defineは見つかりませんでした。
getmk.cをプロジェクトに組み込んだ結果、新たに
fatal error C1010: unexpected end of file while looking for precompiled header directive
Generating Code...
Error executing cl.exe.
とエラーが出てきました。ヘッダ関係だということはわかるのですが、つまり何が悪いのでしょうか?自分で調べて見た結果、stdafx.hがインクルードされていないことが原因のようなのですが、これを追加するとfatal error C1853という別のエラーが出てきてしまいました・・・。
getmk.cのでインクルードしているのは
#include "getmk.h"
#include <stdio.h>
#include <stdlib.h>
#include <mbstring.h>
の4つです。
…マニュアル読みました?
お恥ずかしいのですがマニュアルは読んでいません。
製品にくっついてきたマニュアルのことでしょうか?紛失してしまったらしく、残っていないようです。VC++は実は自分の持ち物ではないので、なくなったマニュアルに関してはどうしようもありません。ただ、ネット上にころがっているのであればそちらを参考にしたいと思います。
MSDN(オンライン・マニュアル)です。
解決しました。エラーも消え、実行できるようになりました。
最後まで丁寧にご指導くださり本当にありがとうございました。
何が原因で/どう解決したのか、顛末を添えるのがマナー。
失礼いたしました。遅くなってしまいましたが、顛末をご報告いたします。
getmk.c側のコンパイルオプションで既存のプリコンパイルヘッダを利用するようにデフォルトで設定してありまして、そこで、プリコンパイルヘッダを利用しないことで解決いたしました。
ツイート | ![]() |