error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ます。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ぱんにゃあ

error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ます。

#1

投稿記事 by ぱんにゃあ » 12年前

リンカエラー?が起こり、ビルドできません・・・。インクルードは正しくできてる(はず;)なので、どうしたらいいのでしょう・・・。
なにかわかるかたはいらっしゃいませんか?よろしければ解決策をください><

コードはこんな感じです↓

main.cpp↓

コード:

#include "GlbInc.h"

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    ChangeWindowMode(TRUE); 
    
    if(DxLib_Init() == -1) { 
        return -1; 
    }
    SetDrawScreen(DX_SCREEN_BACK);
    game_count = 0;

    while(CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
        ClsDrawScreen();
	  game_count++; //このように書くとビルドエラーが起こる
        ScreenFlip(); 
        if(ProcessMessage() == -1) { 
            break; 
        }
    }
    DxLib_End(); 
    return 0; 
}

GlbInc.h↓

コード:

#include "DxLib.h"

#include "GlbDef.h"
#include "GlbProt.h"
#include "GlbVar.h"
GlbDef.h↓

コード:

#define GLB extern
GlbProt.h↓
(空)

GlbVar.h↓

コード:

GLB int game_count;

アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#2

投稿記事 by usao » 12年前

あなたがコールしようとした関数の実装が存在しないということです.
何故エラーメッセージをわざわざ伏字にしたのかわかりませんが,
何らかのライブラリの関数を使っているのであれば,そのライブラリがリンクされるように設定されているか確認してください.

>インクルードは正しくできてる
ヘッダのインクルードとライブラリのリンク設定は別です.


↑内容取り下げます↑
最後に編集したユーザー usao on 2013年9月12日(木) 18:35 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#3

投稿記事 by みけCAT » 12年前

ここに提示されたコードの中には、変数game_countの実体が無いようですね。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 15年前

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#4

投稿記事 by box » 12年前

実は、その伏せ字にした箇所こそが最も重要な情報だったりするわけです。
game_count
ではないかと推測しますが、実際のところはどうでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
usao
記事: 1892
登録日時: 13年前
連絡を取る:

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#5

投稿記事 by usao » 12年前

オフトピック
ああ,その伏字部分って変数名の可能性もあるのか.
(変数の実体が無いとかいう謎なケースに出会ったことがないから関数だとしか思わなかった)
…と,先入観だけで不確かなことを書いてしまったのでNO.2は取り下げます.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#6

投稿記事 by softya(ソフト屋) » 12年前

エラーメッセージは省略せずに個人情報以外は全て掲載するのが解決への早道です。
ご自身でよく分からないエラーと書いているのに、どこまでが必要な情報かご自身で判断できるハズがないからですね。
オフトピック
私もgame_countだと思うんですけどね。
ただ、何と言うかヘッダの関係が無駄にややこしいですね。

#include "GlbDef.h"
#include "GlbProt.h"
#include "GlbVar.h"
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ぱんにゃあ

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#7

投稿記事 by ぱんにゃあ » 12年前

そうです・・・。伏字にする必要はなかったですね、すいません>< 伏字の部分はgame_countです。
変数の実体がない・・・というのはどういうことでしょうか。。。 .hのほうで変数を宣言していれば、それをインクルードしているcppで使えるようになる、ということではないということでしょうか。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#8

投稿記事 by みけCAT » 12年前

今ヘッダにあるgame_countの宣言にはexternがついています。
これは、簡単に言うとコンパイラに「別のどこかに変数game_countの実体があるよ。ここでは実体を作らなくていいよ。」
と言っていることになります。
そして、結局「別のどこか」でgame_countの実体を作っていないため、リンカが「必要なgame_countの実体がない!」
と怒っているのです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぱんにゃあ

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#9

投稿記事 by ぱんにゃあ » 12年前

ふむふむ・・・。.hでextern付きの変数を宣言しても、ほかのファイルで int game_count; としなければいけないのですね>< なんとか、hでの宣言だけでグローバル変数を共有したかったのですが。。。 やはり実体宣言用のcppを作って、そこで宣言するのがよいのでしょうか。。。変数追加時に2ヶ所に追記することになり煩雑になるかもですが><

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#10

投稿記事 by みけCAT » 12年前

ここを参考にどうぞ。
http://dixq.net/rp/5.html
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ぱんにゃあ

Re: error LNK2001: 外部シンボル ""int 〇〇〇" (?〇〇〇@@3HA)"は未解決です。 と出ま

#11

投稿記事 by ぱんにゃあ » 12年前

参考にしてできました!ありがとうございます。

閉鎖

“C言語何でも質問掲示板” へ戻る