2015-10-19 16 views
1

注:座標是一個std ::對爲什麼這給我一個鏈接器錯誤? (隨機數生成使用<random>)

class Random 
{ 
public: 
    Random() 
    { 
     gen.seed(rd()); 
    }; 
    coord rnd_coord(int x, int y) 
    { 
     std::uniform_int_distribution<> dist_x(0, x - 1); 
     std::uniform_int_distribution<> dist_y(0, y - 1); 
     coord temp; 
     temp.first = dist_x(gen); 
     temp.second = dist_y(gen); 
     return temp; 
    } 
private: 
    static std::random_device rd; 
    static std::mt19937 gen; 
}; 

然後在main.cpp中

int x; 
Random R; 
coord C; 
C = R.rnd_coord(10, 10); 
std::cout << C.first << ", " << C.second << std::endl; 
std::cin >> x; 

return 0; 

Im做一些測試用,但我有很多的問題與它:(,tbh我沒有編程在一段時間無論如何,我想做一個幫助函數,將返回指定的範圍內的隨機座標,說功能是在「snake_utility.h」,但因爲它給了我錯誤我把它放在一個班,現在我得到鏈接器錯誤:

錯誤1個錯誤LNK2001:無法解析的外部符號 「私人:靜態 類的std :: random_device隨機:: RD」 C(RD @隨機@@ 0Vrandom_device @ STD @@?A):\用戶\ Reethok \桌面\ C++ \寵物 項目\蛇\蛇\ main.obj蛇錯誤2錯誤LNK2001:無法解析 外部符號 「私人:靜態類 的std :: mersenne_twister_engine 隨機::根」 (創@隨機@@ 0V? $ mersenne_twister_engine @ $ 0CA @ $ 0CHA @ $ 0BIN @ $ 0BP @ $ 0JJAILANP @ $ 0L @ $ 0PPPPPPPP @ $ 06 $ 0JNCMFGIA @ $ 0P @ $ 0OPMGAAAA @ $ 0BC @ $ 0GMAHIJGF @@ std @@ A)C:\用戶\ Reethok \ Desktop \ C++ \ Pet Projects \ Snake \ Snake \ main.obj Snake錯誤3錯誤LNK1120:2 無法解析的外部C:\ Users \ Reethok \ Desktop \ C++ \寵物 項目\蛇\調試\ Snake.exe 1蛇

提前感謝!

回答

4

static類的成員變量是在構造類的實例時構造的。另一方面,static成員變量對於該類的所有實例都是相同的。他們需要明確定義。

您需要在封閉命名空間中定義static成員變量。在.cpp文件中添加

std::random_device Random::rd; 
std::mt19937 Random::gen; 

相關問題