2

私の問題を説明する小さなグラフをペイントで描きました。

<img>でも、投稿後にタグを使うと出てこないみたい?

グラフ:

http://i44.tinypic.com/103gcbk.jpg

4

3 に答える 3

7

問題は、db の宣言のスコープです。コード:

extern Database db;

本当に「dbはどこかでグローバルに宣言されていますが、ここではありません」という意味です。その後、コードは先に進まず、実際にはグローバルに宣言しますが、main() の外側では見えない main() 内でローカルに宣言します。リンケージの問題を解決するには、コードは次のようになります。

file1.c

Database db;
int main ()
{
  ...
}

file2.c

extern Database db;
void some_function ()
{
  ...
}
于 2008-12-27T16:10:35.443 に答える
3

main() の外でデータベースをインスタンス化する必要があります。それ以外の場合は、グローバル変数をシャドウするローカル変数を宣言するだけです。

GameServer.cpp:

#include GameSocket.h
Database db(1, 2, 3);
int main() {
   //whatever
}
于 2008-12-27T14:55:40.727 に答える
1

extern はすべての CPP (および結果の OBJ) ファイルに適用されているため、実際に DB をインスタンス化するものはありません。

これを回避する 1 つの方法を次に示します。Database.h で、次のように変更extern Database dbします。

#ifdef INSTANTIATE_DB
Database db;
#else
extern Database db;
#endif

次に、CPP ファイルの 1 つ (データベースがある場合は Database.cpp が適しています) の#define INSTANTIATE_DB前にを追加し#include "Database.h"ます。

于 2008-12-27T14:58:53.620 に答える