This question already has answers here:
Default constructor with empty brackets
                                
                                    (9个答案)
                                
                        
                                3年前关闭。
            
                    
你们有什么暗示我的代码有什么问题吗?我已使其尽可能简单,并尝试在整个Google上进行搜索,但仍然不知道。

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

class Animal {
public:
    Animal();
    Animal(string _sound) :
        sound(_sound) {}
    virtual ~Animal();
    void give_sound() {
        cout << sound << " ";
    }
protected:
    string sound;
};

class Dog : protected Animal {
public:
    Dog(): Animal("woof") {}
};

int main() {

    Dog doggy();
    doggy.give_sound(); // expression must have class type

    return 0;
}

最佳答案

信不信由你Dog doggy();声明一个函数名称doggy。它按值返回Dog,并且不接受任何参数。

要对其进行修改,在定义具有自动存储的对象时,请不要使用括号(如果您没有pas参数)。只需执行Dog doggy;。另外,您可以在c ++ 11及更高版本中以Dog doggy{};

关于c++ - 调用简单的继承方法时,“表达式必须具有类类型”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40620309/

10-08 21:33