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