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

解決


mouse  2008-01-09 20:27:33  No: 67281  IP: 192.*.*.*

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

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

編集 削除
επιστημη  URL  2008-01-10 00:35:11  No: 67282  IP: 192.*.*.*

エラーメッセージ"そのまんま"です。
関数 comopen がないのでリンクに失敗しています。
呼んでいるのにその実装を忘れてるのか、あるいはリンクすべきライブラリが足りません。

編集 削除
mouse  2008-01-10 10:39:40  No: 67283  IP: 192.*.*.*

返信ありがとうございます。

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  No: 67284  IP: 192.*.*.*

エラーメッセージをよく読みましょう。

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  No: 67285  IP: 192.*.*.*

もっと補足するなら
void comopen(); と
void comopen(char*,char*,char*,int,int);
はまったく別物だということだ

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

編集 削除
Blue  2008-01-10 11:31:57  No: 67286  IP: 192.*.*.*

マルチ先
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  No: 67287  IP: 192.*.*.*

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  No: 67288  IP: 192.*.*.*

>と変更することでコンパイルを通すことができました。
まちがっているとおもわれ。

編集 削除
επιστημη  2008-01-10 12:55:45  No: 67289  IP: 192.*.*.*

>と変更することでコンパイルを通すことができました。
通しただけとおもわれ。

編集 削除
mouse  2008-01-10 13:37:45  No: 67290  IP: 192.*.*.*

どの部分が間違っていると思われますか?
現在、実行すると
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  No: 67291  IP: 192.*.*.*

リンク先より。。。

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

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

編集 削除
επιστημη  URL  2008-01-10 13:52:13  No: 67292  IP: 192.*.*.*

> どの部分が間違っていると思われますか?

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

編集 削除
yoh2  2008-01-10 21:54:43  No: 67293  IP: 192.*.*.*

> comopen();→void comopen(char*,char*,char*,int,int);
> と変更することでコンパイルを通すことができました。

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

編集 削除