簡體   English   中英

C++ 項目:在哪里用 function 定義全局變量

[英]C++ project: Where to define global variable with function

我正在編寫一個 C++ 項目,在某些時候,我需要生成一個隨機數列表,我稱之為“Zobrist”數字。 我試圖做這樣的事情:

文件“zobrist.h”:

#ifndef ZOBRIST_H
#define ZOBRIST_H

namespace Zobrist
{
int ZOBRIST_NUMBERS[64];
bool ZOBRIST_NUMBERS_GENERATED;
void GENERATE_ZOBRIST_NUMBERS();
}

#endif // ZOBRIST_H

文件“zobrist.cpp”:

#include "zobrist.h"

bool Zobrist::ZOBRIST_NUMBERS_GENERATED = false;

void Zobrist::GENERATE_ZOBRIST_NUMBERS()
{
    for (uint i=0; i!=64; ++i) 
    {
        ZOBRIST_NUMBERS[i] = // Something
    }
    ZOBRIST_NUMBERS_GENERATED = true;
};

然后在我項目的其他幾個文件中,我想包含“zobrist.h”並編寫如下內容:

if (!Zobrist::ZOBRIST_NUMBERS_GENERATED) {Zobrist::GENERATE_ZOBRIST_NUMBERS();}
int x = Zobrist::ZOBRIST_NUMBERS[0] // etc.

但是,這不能編譯,我不明白為什么。 我收到諸如multiple definition of Zobrist::ZOBRIST_NUMBERS類的錯誤。 (我嘗試在“zobrist.h”中加入一些“extern”關鍵詞,但並沒有解決錯誤。)

我哪里錯了,正確的方法是什么?

您的 header 文件包含多個變量的定義,並且 header 包含在多個源文件中,因此多個源文件有自己的這些變量的副本。 然后,當您嘗試鏈接已編譯的 object 文件時,會導致多定義錯誤。

您需要使用extern關鍵字聲明header 中的變量,然后在一個源文件中定義它們,可能是 zobrist.cpp。 因此,您的 header 將包含以下內容:

namespace Zobrist
{
extern int ZOBRIST_NUMBERS[64];
extern bool ZOBRIST_NUMBERS_GENERATED;
void GENERATE_ZOBRIST_NUMBERS();
}

並且 zobrist.cpp 將包含以下內容:

bool Zobrist::ZOBRIST_NUMBERS_GENERATED = false;
int Zobrist::ZOBRIST_NUMBERS[64];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM