• ベストアンサー

LNK2019:未解決の外部シンボル と LNK1120:外部参照 1 が未解決について

長いタイトルになってしまいすみません。 私は、Visual C++.NETを使用して、C言語プログラミングをしています。あるサンプルプログラムを参考にしながら改良を図っているのですが、以下に示すプログラムを追加したところ、タイトルに示しましたエラーが表示されて困っています。 //長くなり見づらいため、問題の箇所のみ記します。 void main(int argc, char** argv){ } void *sender(void* context){ for(i=0;i<10;i++){ print_identity() print_identity() } } for文の中に、print_identity関数を追加したところ、 エラーが発生しました。 [エラー内容] 1. sample error LNK2019: 未解決の外部シンボル _print_identity が関数 _senderで参照されました。 2. sample fatal error LNK1120: 外部参照 1 が未解決です。 関数の定義がしていないと言うことでしょうか?実際に、定義してみたりしました(定義する場所が違うのかもしれません)が、解決できませんでした。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>print_identity関数は、自作関数です。 であれば、 void print_identity(void){;} を void print_identity(unsigned char *clue){ /* この関数での処理 */ } に置き換えて下さい。

bird_2005
質問者

お礼

解決しました。 ありがとうございました。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

>どういう意味なんでしょうか? 関数の定義そのものなので、 ; の部分には、その関数で行う実際の処理を書き連ねていかないといけません。 void print_identity(void); の場合は、プロトタイプ宣言で、どこかに実際に処理をともなう関数の定義がなければいけません。 もし、その関数が外部のライブラリに含まれていて、 中身を定義する必要が無くて本来プロトタイプ宣言だけでいいということなら、 #include指定やlibの指定あるいはリンクに含めるファイルのリストを見直しましょう。 ところで >print_identity関数を追加したところ、 print_identity関数ってなんなんですか? 自作関数ではないのですか?

bird_2005
質問者

補足

print_identity関数は、自作関数です。 以下のfor文の中に、print_identity関数を記述するつもりです。print_identity関数は、引数にunsigned char型の配列を持ちます。 for(i=0;i<10;i++){   print_identity(6バイトのunsigned charの配列)   print_identity(6バイトのunsigned charの配列) }

回答No.2

(コンパイルではなく)リンクで落ちていますから、print_identity() を含むファイルを一緒に処理するのを忘れている(プロジェクトに該当ファイルが追加されていない)というのが、ありそうだなという気がします。 もちろん、print_identy() の実体がないという可能性もあります。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

参照する前に定義がされていないということだと思います。 void print_identity(void){;} のように定義されているでしょうか 多分、voidが省略されて書かれているのではないですか

bird_2005
質問者

補足

こんばんは。 void print_identity(void){;}を以下のところに追加の様に追加したところコンパイル可能となりました。しかし、実際のところ、定義が出来ただけできちんと動作しているのかわかりませんが・・・ void *send_packet(void* context); void print_identity(byte* clue){;} void main(int argc, char** argv){ } void *sender(void* context){  for(i=0;i<10;i++){   print_identity(6バイトのunsigned charの配列)   print_identity(6バイトのunsigned charの配列)  } } ところで、このvoid print_identity(void){;}の{;}は、どういう意味なんでしょうか?中括弧をはずしてセミコロンだけでコンパイルするとエラーが表示されますが、{;}とするとコンパイル成功します。

関連するQ&A

専門家に質問してみよう