2012-11-26 28 views
3

我想提出一個基於文本的RPG與C++和我有同樣的錯誤彈出一次又一次,我知道我在做什麼根本性錯誤,但我不知道是什麼。搜索提出了針對特定編譯器錯誤的解決方案,但沒有任何可用於修復我正在編寫的代碼的解決方案。C++無法建立變量之間的通信中獨立的功能

問題我想回答:如何使用指針在不同函數之間啓用變量通信?換句話說,我如何使用指針指向一個變量的值,以便我可以在未聲明的函數中使用和操作該值?

TL; DR版本:我試圖讓我的「exp」int變量與使用指針的外部函數進行通信。我得到的錯誤「ISO C++禁止指針和整數[-fpermissive]之間的比較」

龍版本:這裏有一個位碼的地方,我有問題:

在文件charlvl.cpp:

... 
int lvl = 1; 
int *exp = 0;//value I want communicated to main() 
int str = 0; 
int vit = 0; 
... 

文件fight.cpp(main.cpp中):

... 
//you've just killed a monster 

cout << "\nThe monster drops to the ground." << endl; 
cout << "You gained " << expValue << " experience!" << endl; 
&exp += expValue;//&exp is the character's experience. 

//expValue is the exp gained upon monster death 
//*exp (from charlvl.cpp) is the value I want to communicate to here. 

這不是在這裏宣佈,但在charlvl.cpp。如何在charlvl.cpp和main()中的聲明變量之間建立通信,而不必求助於使用全局變量?

+1

'* exp + = expvalue'是我想你在找什麼。 –

+0

變量被聲明爲全局變量,還是局部在函數中?你爲指針分配內存嗎?如果變量是全局變量,爲什麼要使用指針?何時可以在其他源文件中聲明'extern'?除了明顯的語法錯誤之外,沒有足夠的信息來正確回答這個問題,請發佈更完整的代碼(請參閱http://sscce.org/獲取提示)。 –

回答

0

你已經得到了&*運營商混淆。 *int*變成int,而&int*變成int**

這是你想要什麼:

(*exp) += expValue; 

你可能要考慮使用參考。

2

如果定義EXP作爲一個全球性的指針,你不需要考慮通信的事情,你可以只是簡單的用它在不同的功能,但在使用它的方式是錯誤的。

&exp += expValue;

應該改變

*exp += expValue;

因爲*手段獲得該指針的內容給我。

順便說一句,儘量不要定義EXP爲指針也可以正常工作。

int exp = 0; exp += expValue;

這是所有基於exp是一個全局變量或全局指針。

如果你在一個函數中定義它是這樣的:

void func() 
{ 
    int *expPtr = 0; 
    int exp = 0 
} 

你想使用它的另一個功能

void use() 
{ 
    // trying to use expPtr or exp. 

} 

我所知道的方法是:

1,使用本地var並返回func(),但請注意,返回的var只是一個副本。

int func() 
{ 
    int exp = 0; 
    exp++; 
    return exp; 
} 

2,使用本地指針併爲它分配內存,然後返回指針或分配新的內存,以一個全球性的指針。但要小心內存泄漏,你需要儘快刪除它,只要你不使用它。

int * func() 
{ 
    int *expPtr = 0; 
    expPtr = new int(2); 
    return expPtr; 
} 
+0

謝謝,我已經把exp和expValue以及一些其他問題變量放在了命名空間中,並且清除了每一個問題。我不喜歡因爲某些原因而聲明全局變量,這就是我爲什麼使用指針的原因,也是爲了我自己的教育。儘管我在小型程序中嘗試過,但我仍會嘗試更改周圍的符號,即使使用正確的指針語法,我仍然一直在獲取「變量未在此範圍內聲明」的錯誤。 –

+0

嗯...我認爲不使用全局變量是OOP思想,我自己相信使用任何好的,不僅僅使用純粹的面向對象。 – shengy