■ error LNK2019 未解決の外部シンボルを解決するには?

[Visual C++ Q & A 掲示板] [過去ログの一覧]


mouse 2008/01/09(水) 20:27:33 <初心者>
Gate_Keeper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl comopen(void)" (?comopen@@YAXXZ) が関数 _main で参照されました。

このようなエラーが出てしまいます。どのようにすればいいのか助言をお願いします。

επιστημη [HomePage] 2008/01/10(木) 00:35:11
エラーメッセージ"そのまんま"です。
関数 comopen がないのでリンクに失敗しています。
呼んでいるのにその実装を忘れてるのか、あるいはリンクすべきライブラリが足りません。

mouse 2008/01/10(木) 10:39:40
返信ありがとうございます。

cppファイルで

#include "CommSet.h"
void comopen();
void main(){
・・・
comopen();
・・・

また、ヘッダーファイル内で

void comopen(char*,char*,char*,int,int);
void comopen(char *pComport, char *pBaudRate, char *pParity, int bytesize, int stopbits){
・・・

というようにしているので実装されていると考えているのですが何か足りないでしょうか?
また、リンクすべきライブラリというのはどのようにして調べたらいいのでしょうか?

ゴン 2008/01/10(木) 10:59:56
エラーメッセージをよく読みましょう。

Gate_Keeper.obj : error LNK2019: 未解決の外部シンボル "void __cdecl comopen(void)" (?comopen@@YAXXZ) が関数 _main で参照されました。

void __cdecl comopen(void)はvoid comopen()のことで、επιστημηさんの助言と合わせると、void comopen()が実装されていないということです。

tetrapod 2008/01/10(木) 11:05:50
もっと補足するなら
void comopen(); と
void comopen(char*,char*,char*,int,int);
はまったく別物だということだ

> リンクすべきライブラリというのはどのようにして調べたらいいのでしょうか?
マニュアル読め、ちうことになるな。
誰が作ったかわからない void comopen(); の正体を知っているのは mouse 氏のみなので
どのマニュアルを読めばよいか判断できるのも mouse 氏のみ

Blue 2008/01/10(木) 11:31:57
マルチ先
http://www.play21.jp/board/formz.cgi?action=res&resno=13241&page=&id=dixq&rln=13254
より
>void comopen(); 
の定義がないと思われる。

mouse 2008/01/10(木) 12:00:20
[[解決]]

cppファイル内で
void comopen();→void comopen(char*,char*,char*,int,int);
comopen();→void comopen(char*,char*,char*,int,int);
と変更することでコンパイルを通すことができました。
助言をしてくださったみなさま、ありがとうございました。

Blue 2008/01/10(木) 12:02:28
>と変更することでコンパイルを通すことができました。
まちがっているとおもわれ。

επιστημη 2008/01/10(木) 12:55:45
>と変更することでコンパイルを通すことができました。
通しただけとおもわれ。

mouse 2008/01/10(木) 13:37:45
どの部分が間違っていると思われますか?
現在、実行すると
Debug Assertion Failed!

Program:...
File:fprintf.c
Line:55

Expression:(str!=NULL)

For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts.

というエラーが出てしまい、実行結果を見ることができないので、通すところまでしかできませんでした。

ww 2008/01/10(木) 13:45:37
リンク先より。。。

/////<Gate_Keeper.cpp> 入退室システムのメイン制御(文字列の送信受信)///////

…閉じ込められないかねwww

επιστημη [HomePage] 2008/01/10(木) 13:52:13
> どの部分が間違っていると思われますか?

ソースの呈示もないのに"どの部分"と仰られましても、ねぇ。
Debug-modeで実行すればassert失敗地点までのcall-stackが追えるんじゃないすか?

yoh2 [E-Mail] 2008/01/10(木) 21:54:43
> comopen();→void comopen(char*,char*,char*,int,int);
> と変更することでコンパイルを通すことができました。

これ、関数を呼び出しが関数宣言に変わってしまっています。
つまり、「comopen()を呼び出そうとしている」→「何もしない」と変化しています。
関数名から推測するに、comポートの準備ができていないためにエラーになっているのでは?

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library