2013-12-07 87 views
-2

這裏的代碼的一個片段:預期主表達式之前「=」令牌

typedef int Biome; 
typedef int Terrain; 
typedef int Geo; 

void mapGen(int mX, int mY /*max x and y map size*/) 
{ 
    int seed; 
    int costRemaining = 1; 
    Biome biomeCur; 
    Biome bChange = 0; 
    Terrain terrainCur; 
    Terrain tChange; 
    Geo geoCur; 
    Geo gChange; 
    cout << "Please enter an integer to use as the generation seed"; 
    cin >> seed; 
    srand(seed); 
    biomeCur = rand() % MBIOME; //error is here 
    terrainCur = rand() % MTERRAIN; 
    geoCur = rand() % MGEO;  

我可以設置biomeCur爲0時,我將其初始化但我發現了在該行上述錯誤兩種方式。 我假設這意味着它沒有被正確聲明,但我沒有看到任何代碼錯誤。

+0

你有沒有'#include '?! –

+4

什麼是MBIOME? – odinthenerd

+0

我建議使用''而不是'rand'。 – chris

回答

1

我犯了一個可編譯例子出來的代碼:

#include <iostream> 
#include <stdlib.h> 
using namespace std; 

typedef int Biome; 
typedef int Terrain; 
typedef int Geo; 

//added by me 
const int MBIOME = 10; 
const int MTERRAIN = 10; 
const int MGEO = 10; 

void mapGen(int mX, int mY /*max x and y map size*/) 
{ 
    int seed; 
    int costRemaining = 1; 
    Biome biomeCur; 
    Biome bChange = 0; 
    Terrain terrainCur; 
    Terrain tChange; 
    Geo geoCur; 
    Geo gChange; 
    cout << "Please enter an integer to use as the generation seed"; 
    cin >> seed; 
    srand(seed); 
    biomeCur = rand() % MBIOME; //error is here 
    terrainCur = rand() % MTERRAIN; 
    geoCur = rand() % MGEO;  
} 


int main() { 
    mapGen(1,1); 
    return 0; 
} 

我唯一改變的事情是定義MBIOMEMTERRAINMGEO。我認爲他們是問題的根源。

編輯:正如你在你的評論中寫的,你使用的是#define MBIOME = 10。這意味着無論你在哪裏寫MBIOME,預處理器都會用= 10取代它,如果你確實使用了定義寫入#define MBIOME 10。不過,我會建議使用const int而不是#define#define使用不讀取語法或不瞭解範圍的預處理程序,因此const int更安全。有人說預處理器比常量變量更有效,但他們仍然生活在80年代。現代編譯器可以輕鬆進行正確的優化。

爲了說明預處理器有風險的原因,想象你在另一個命名空間中編寫了一個名爲MBIOME()的函數。預處理器將把它變成10(),因爲它不知道名稱空間,它只是替換。

+0

你能解釋這是如何幫助嗎? – 0x499602D2

+0

這可能是真正的問題,我正在使用: #define MBIOME = 10 這兩者有什麼區別? – user3055201

+0

@ 0x499602D2它似乎已經發現問題就好了。 – odinthenerd

相關問題