error C2065を解決するには?

解決


よこ  2006-11-03 20:47:22  No: 63470

はじめまして。

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


επιστημη  2006-11-03 21:35:05  No: 63471

で、getmkをコンパイルしたobjもしくはlibはリンクしたんでしょうか?


επιστημη  2006-11-03 21:38:06  No: 63472

また、他のヘッダで __GETMK_H__ を#defineしていないでしょうか。


よこ  2006-11-03 22:13:46  No: 63473

回答ありがとうございます。
勉強不足で申し訳ありません。
まず、1つ目。
>>getmkをコンパイルしたobjもしくはlibはリンク
についてですが、getmkは本体のC++プロジェクトとは別にコンパイルしてobjまたはlibをリンクしなくてはいけないのですか?その場合は、別コンパイルで作成したobjまたはlibを使いたいプロジェクトのディレクトリに移せばいいのでしょうか?
2つ目。
他のヘッダで__GETMK_H__ を#defineとのことですが、これは行っていませんでした。他のヘッダすべてに#defineしなければならないのでしょうか。ちなみに他のヘッダはresouce.hとStdAfx.hです。


επιστημη  2006-11-03 23:13:31  No: 63474

> getmkは本体のC++プロジェクトとは別にコンパイルしてobjまたはlibをリンクしなくてはいけないのですか?
プロジェクトに含まれているならOK.

> 他のヘッダで__GETMK_H__ を#defineとのことですが、これは行っていませんでした。他のヘッダすべてに#defineしなければならないのでしょうか。

逆。同じものがあってはならない。


よこ  2006-11-03 23:26:38  No: 63475

たびたびすみません。ありがとうございます。
他のヘッダでは同一#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つです。


επιστημη  2006-11-03 23:43:14  No: 63476

…マニュアル読みました?


よこ  2006-11-03 23:55:52  No: 63477

お恥ずかしいのですがマニュアルは読んでいません。
製品にくっついてきたマニュアルのことでしょうか?紛失してしまったらしく、残っていないようです。VC++は実は自分の持ち物ではないので、なくなったマニュアルに関してはどうしようもありません。ただ、ネット上にころがっているのであればそちらを参考にしたいと思います。


επιστημη  2006-11-04 00:30:21  No: 63478

MSDN(オンライン・マニュアル)です。


よこ  2006-11-04 00:35:17  No: 63479

解決しました。エラーも消え、実行できるようになりました。
最後まで丁寧にご指導くださり本当にありがとうございました。


επιστημη  2006-11-04 00:45:38  No: 63480

何が原因で/どう解決したのか、顛末を添えるのがマナー。


よこ  2006-11-04 21:27:02  No: 63481

失礼いたしました。遅くなってしまいましたが、顛末をご報告いたします。
getmk.c側のコンパイルオプションで既存のプリコンパイルヘッダを利用するようにデフォルトで設定してありまして、そこで、プリコンパイルヘッダを利用しないことで解決いたしました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加