ページ 11

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

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

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

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;

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

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

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


↑内容取り下げます↑

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

Posted: 2013年9月12日(木) 18:26
by みけCAT
ここに提示されたコードの中には、変数game_countの実体が無いようですね。

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

Posted: 2013年9月12日(木) 18:30
by box
実は、その伏せ字にした箇所こそが最も重要な情報だったりするわけです。
game_count
ではないかと推測しますが、実際のところはどうでしょうか。

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

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

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

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

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

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

Posted: 2013年9月13日(金) 13:35
by ぱんにゃあ
そうです・・・。伏字にする必要はなかったですね、すいません>< 伏字の部分はgame_countです。
変数の実体がない・・・というのはどういうことでしょうか。。。 .hのほうで変数を宣言していれば、それをインクルードしているcppで使えるようになる、ということではないということでしょうか。

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

Posted: 2013年9月13日(金) 13:40
by みけCAT
今ヘッダにあるgame_countの宣言にはexternがついています。
これは、簡単に言うとコンパイラに「別のどこかに変数game_countの実体があるよ。ここでは実体を作らなくていいよ。」
と言っていることになります。
そして、結局「別のどこか」でgame_countの実体を作っていないため、リンカが「必要なgame_countの実体がない!」
と怒っているのです。

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

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

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

Posted: 2013年9月13日(金) 14:20
by みけCAT
ここを参考にどうぞ。
http://dixq.net/rp/5.html

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

Posted: 2013年9月13日(金) 14:43
by ぱんにゃあ
参考にしてできました!ありがとうございます。