トップページ > 記事閲覧
関数のリンクエラーについて
名前:やまひこ 日時: 2014/10/12 02:13

1>main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl WriteSubstring(char *,int,int,int,int,int,int)" (?WriteSubstring@@YAXPADHHHHHH@Z) が関数 "void __cdecl title(void)" (?title@@YAXXZ) で参照されました。 1>C:\Users\test\Downloads\GameProg\GameProg\Debug\GameProg.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== プログラムを実行すると、このようなエラーが表示されてしまいます。 LNK2019の原因は、title()の中に呼び出している関数の宣言がされていない。 という意味のエラーとりかいしているのですが、ちゃんと宣言もしていますし いまいち原因がわかりません。 何が原因か教えていただけないでしょうか?
メンテ

Page: 1 |

Re: 関数のリンクエラーについて ( No.1 )
名前:管理人 日時:2014/10/12 02:14

エラーで報告されている WriteSubstring という関数のプログラムは 何というファイル名のファイルに書かれていますか?
メンテ
Re: 関数のリンクエラーについて ( No.2 )
名前:やまひこ 日時:2014/10/12 13:53

GameProg というファイルに保存しています
メンテ
Re: 関数のリンクエラーについて ( No.3 )
名前:管理人 日時:2014/10/12 14:01

一応確認です、GameProg.cpp ですか? それとも GameProg.h ですか?
メンテ
Re: 関数のリンクエラーについて ( No.4 )
名前:やまひこ 日時:2014/10/12 14:28

GameProg→GameProg→main.cpp というファイル構成です。
メンテ
Re: 関数のリンクエラーについて ( No.5 )
名前:やまひこ 日時:2014/10/12 14:29

このmain.cpp内でエラーが発生します。 なお、実行ファイルは、このmain.cppのみです
メンテ
Re: 関数のリンクエラーについて ( No.6 )
名前:管理人 日時:2014/10/12 14:55

ん?では WriteSubstring という関数の中身は main.cpp に書かれているということですか?
メンテ
Re: 関数のリンクエラーについて ( No.7 )
名前:やまひこ 日時:2014/10/12 15:35

そうです。わかりにくくてすみません。
メンテ
Re: 関数のリンクエラーについて ( No.8 )
名前:管理人 日時:2014/10/12 17:46

なるほど、多分分かりました 今回のエラーは、以下のようなプログラムを書いたことが原因だと思います 例1 宣言と定義で引数の型が異なる // 宣言 int FunctionA( int Num1, int Num2 ); // 定義 int FunctionA( float Num1, int Num2 ) { return Num1 + Num2; } 例2 宣言と定義で引数の数が異なる // 宣言 int FunctionA( int Num1, int Num2, int Num3 ); // 定義 int FunctionA( int Num1, int Num2 ) { return Num1 + Num2; } というわけで、恐らく WriteSubstring の宣言に書かれている戻り値の型、引数の数、引数の型と、 WriteSubstring の定義に書かれている戻り値の型、引数の数、引数の型が 異なっていると思いますので、ご確認になってみてください
メンテ
Re: 関数のリンクエラーについて ( No.9 )
名前:やまひこ 日時:2014/10/12 17:58

上記二つとも確認しましたが、間違いはなく 正しくかけていました。
メンテ
Re: 関数のリンクエラーについて ( No.10 )
名前:管理人 日時:2014/10/12 19:00

となると、上記のエラーは発生しない筈なのですが・・・ 私も確認してみたいので、お手数で申し訳ありませんが WriteSubstring 関数の 宣言と定義の部分を掲示板に貼り付けて頂けないでしょうか?
メンテ
Re: 関数のリンクエラーについて ( No.11 )
名前:やまひこ 日時:2014/10/12 20:09

//宣言部 void WriteSubstring(char *message,int start,int len,int posX,int posY,int color,int bufferLine); //messageで指定した文章をstartの位置からlen文字分表示する void WriteSubString(char *message,int start,int len,int posX,int posY,int color,int bufferLine){ int kaisuu; int maxLen=strlen(message); for(kaisuu=0;kaisuu<start && message[kaisuu]!='\0';){ if(isJapaneseCharacter(message[kaisuu])){ kaisuu+=2; start++; }else{ kaisuu++; } } if(start>=maxLen){ return; } for(kaisuu=0;kaisuu<len && message[start+kaisuu]!='\0';){ if(isJapaneseCharacter(message[start+kaisuu])){ g_messagebuffer[bufferLine][kaisuu]=message[start+kaisuu]; g_messagebuffer[bufferLine][kaisuu+1]=message[start+kaisuu+1]; len++; kaisuu+=2; }else{ g_messagebuffer[bufferLine][kaisuu]=message[start+kaisuu]; kaisuu++; } } g_messagebuffer[bufferLine][kaisuu]='\0'; DrawString(posX,posY,g_messagebuffer[bufferLine],color); } こちらとなっております
メンテ
Re: 関数のリンクエラーについて ( No.12 )
名前:管理人 日時:2014/10/12 21:07

ありがとうございます 原因が分かりました すみません、やまひこさんの場合はこちらの例でした 例3 宣言と定義で関数名が異なる // 宣言 int FunctionA( int Num1, int Num2 ); // 定義 int functionA( int Num1, int Num2 ) { return Num1 + Num2; } WriteSubstring の場合 WriteSubstring // 宣言  WriteSubString // 定義 どこが異なるか分かりますか?
メンテ
Re: 関数のリンクエラーについて ( No.13 )
名前:やまひこ 日時:2014/10/12 23:12

ああああああああああ!!! こんな盆ミスで何時間も、、、、。 わかりました。ありがとうございます。。。 「s」か「S」の違いですよね??
メンテ
Re: 関数のリンクエラーについて ( No.14 )
名前:管理人 日時:2014/10/12 23:24

はい
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存