2013-03-28 159 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;等。