2013-03-28 163 views
4

好吧,請對我的代碼仔細檢查之下,它只是一個功能的一部分相較於C++中的空

void RepeatWord(){ 
    system("cls"); 
    string word = NULL; 
    string newword = NULL; 
    int repeats = 0; 
    while(true){ 
     if(word == NULL){ 
      cout<<"Currently no word is stored.."; 
      cout<<"\n\nPlease enter a word: "; 
      cin>>word; 
     } 
.... 

好,我一直在與其他編程語言,我總是在做一個比較一個NULL的價值,但在C + + ......它似乎是一個不同的情況。錯誤說..

error: no match for 'operator==' in 'word == 0'

以及我在想,我只是比較一個NULL,我真的不知道爲什麼這是錯的。比較一個值到NULL到C++是不同的?請教我。由於

注:我知道的比Java

+1

不要將'std :: string's設置爲null(此運行會引發異常)。 'std :: string word;'是一個空字符串。 – chris 2013-03-28 06:07:42

+3

Woah woah ...你不能null這樣的對象。這不是Java。 – Mysticial 2013-03-28 06:07:51

+0

@chris所以它真的不可能在C++中設置NULL值? – 2013-03-28 06:08:43

回答

7

您正試圖以比較對象與NULL,你不能比較與NULL對象的更多紅寶石。你需要比較一個指針。這樣做可以檢查指針是否指向不是有效對象的東西。

在你的情況你想檢查std::string是否爲空。您可以使用std::string,std::string::empty()提供的成員函數。

考慮您的問題,我講了一個良好的學習本書需要:

The Definitive C++ Book Guide and List

+0

點呃?你能指點我一個教程,在那裏我可以學習如何使用指針?所以我可以設置NULL值? – 2013-03-28 06:09:46

+2

@Mahan C++與STL的關鍵是你不需要指針。 – 2013-03-28 06:12:11

+1

@Mahan:請從內嵌的鏈接中挑選一本好書,回答 – 2013-03-28 06:13:55

2

如果是從Java世界來了,你確實會發現用C該對象++都沒有處理好同辦法。在C++中,除非明確說明,數據是直接操縱的。在Java中,對象完全由虛擬機管理,因此,讓程序通過引用訪問它們是有意義的。因此,無論何時編寫Java程序,都必須通知虛擬機使用new分配對象,然後將null分配給類實例的變量。遵循同樣的原則,如果您將對象變量分配給另一個對象,則兩個都會引用同一個對象,並且調用任一方法都會在同一個基礎實例上調用該方法。

在C++中,有2個不同的機制來獲得相同的結果:使用指針

  • ,其語法爲類型T

    T *t; 
    

    使得std::string *word;將定義一個命名的變量word持有指向std::string的指針。使用

  • 的引用:

    T &t; 
    

在C++中,這兩種實際上類型,即。 std::stringstd::string *std::string &是三種不同的類型。第一個實際上表示結構化值本身,而另外兩個表示間接指向std::string類型的值。

這些類型indirections之間的差異由此SO entry解釋。

在你的代碼,你將不得不無論是空字符串字面"",或使用指針嘗試使用對象之前更換的NULL所有出現並分配使用new聲明的情況下 - 在該行cin >> word;等。