class Zombie
{
public:
Zombie();
Zombie(int howTall);
Zombie(int howTall, int howHeavy);
int getHeight();
private:
int height;
int weight;
};
Zombie::Zombie()
{
height = 6;
weight = 180;
}
int main()
{
Zombie army[4];
for(int i = 0; i < 4; i++)
army[i] = Zombie;
}
当我尝试设置军队[i] = Zombie时,为什么会出现错误? Army是僵尸阵列,我已经为Zombie类编写了一个默认构造函数。当我用Zombie()替换Zombie时,代码有效,但是不应该省略()调用默认的构造函数吗?
未显示:已实现其他构造函数和方法。
我知道如果我宣布军队是一个指向僵尸的指针并且做军队[i] =新的僵尸它会起作用,但我不知道为什么上面的代码没有。
由于
答案 0 :(得分:2)
当你这样做时:
Zombie army[4];
你已经构建了4个高度为6且重180的僵尸。默认构造函数被调用4次(尝试在其中添加对std::cout
的调用,你会看到!)。
因此,除非您想要(无论出于何种原因),否则您在循环中尝试做的事情,再次构建新的僵尸 。在这种情况下,正确的语法是:
army[i] = Zombie();
答案 1 :(得分:0)
因为您正在尝试分配类型而不是该类型的对象。
除了你已经拥有军队中的对象之外,当你想用'new Zombies'覆盖值时,你现在只需要分配一个新对象