5

好的,请仔细检查下面的代码,它只是函数的一部分

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++ 中……这似乎是一种不同的情况。错误说..

错误:'word == 0' 中的 'operator==' 不匹配

好吧,我想知道我只是在与 a 进行比较NULL,我真的不知道为什么这是错误的。将值与 aNULL与 C++ 进行比较是否不同?请教我。谢谢

注意:我比 java 更了解 ruby

4

2 回答 2

9

您正在尝试将对象与 进行比较NULL,但您无法将对象与 进行比较NULL。您需要比较一个指针。这样做时,您检查指针是否指向不是有效对象的东西。

在您的情况下,您想检查是否std::string为空。您可以使用std::string,提供的成员函数std::string::empty()

考虑到您的问题,我强调需要一本好的学习书:

The Definitive C++ Book Guide and List

于 2013-03-28T06:07:29.700 回答
3

如果您来自 Java 世界,您确实会发现 C++ 中的对象处理方式不同。在 C++ 中,除非明确说明,否则直接操作数据。在 Java 中,对象完全由 VM 管理,因此,让程序仅通过引用访问它们是有意义的。因此,无论何时编写 Java 程序,都必须告诉 VM 使用 分配对象new,然后再分配null给类实例的变量。遵循相同的原则,如果您将一个对象变量分配给另一个对象变量,则两者都将引用同一个对象,并且在其中任何一个上调用方法都会在同一个底层实例上调用该方法。

在 C++ 中,有两种不同的机制可以获得相同的结果:

  • 使用指针,其类型的语法T

    T *t;
    

    因此这std::string *word;将定义一个名为的变量,该变量word包含一个指向std::string.

  • 使用参考:

    T &t;
    

在 C++ 中,这两个实际上都是类型,即。std::string, std::string *,std::string &是三种不同的类型。第一个实际上表示结构化值本身,而另外两个表示对 type 值的间接引用std::string

此 SO条目解释了这些类型间接之间的区别。

在您的代码中,您将不得不用NULL空字符串文字替换所有出现的 ,或者在尝试使用对象之前""使用指针并使用语句分配实例- 就像在 line 中一样。newcin >> word;

于 2013-03-28T06:56:58.930 回答