- ベストアンサー
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 が未解決です。 関数の定義がしていないと言うことでしょうか?実際に、定義してみたりしました(定義する場所が違うのかもしれません)が、解決できませんでした。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>print_identity関数は、自作関数です。 であれば、 void print_identity(void){;} を void print_identity(unsigned char *clue){ /* この関数での処理 */ } に置き換えて下さい。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
>どういう意味なんでしょうか? 関数の定義そのものなので、 ; の部分には、その関数で行う実際の処理を書き連ねていかないといけません。 void print_identity(void); の場合は、プロトタイプ宣言で、どこかに実際に処理をともなう関数の定義がなければいけません。 もし、その関数が外部のライブラリに含まれていて、 中身を定義する必要が無くて本来プロトタイプ宣言だけでいいということなら、 #include指定やlibの指定あるいはリンクに含めるファイルのリストを見直しましょう。 ところで >print_identity関数を追加したところ、 print_identity関数ってなんなんですか? 自作関数ではないのですか?
補足
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の配列) }
- 麻野 なぎ(@AsanoNagi)
- ベストアンサー率45% (763/1670)
(コンパイルではなく)リンクで落ちていますから、print_identity() を含むファイルを一緒に処理するのを忘れている(プロジェクトに該当ファイルが追加されていない)というのが、ありそうだなという気がします。 もちろん、print_identy() の実体がないという可能性もあります。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
参照する前に定義がされていないということだと思います。 void print_identity(void){;} のように定義されているでしょうか 多分、voidが省略されて書かれているのではないですか
補足
こんばんは。 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){;}の{;}は、どういう意味なんでしょうか?中括弧をはずしてセミコロンだけでコンパイルするとエラーが表示されますが、{;}とするとコンパイル成功します。
お礼
解決しました。 ありがとうございました。