C++ 为什么巫师是wiz0;不等同于向导wiz0();在我的代码里?C2228错误

C++ 为什么巫师是wiz0;不等同于向导wiz0();在我的代码里?C2228错误,c++,compiler-errors,visual-c++-2010-express,C++,Compiler Errors,Visual C++ 2010 Express,可能重复: 好的,我有一个泡菜。这是一个错误C2228问题,我已经看了其他问题和答案,并且给出的提示似乎都不适合我-这是我的第一个问题,我是一个新手,所以请温柔一点!注意:如果我使用 Wizard wiz0; 但如果我使用 Wizard wiz0(); 我正在使用的这本书告诉我这两个语句应该是等价的,所以我试图找出为什么我可以使用其中一个而不能使用另一个 首先,这里是我尝试使用向导wiz0()时出现的错误: 以下是(我认为)第5.cpp章中的相关代码: Wizard wiz0(); //

可能重复:

好的,我有一个泡菜。这是一个错误C2228问题,我已经看了其他问题和答案,并且给出的提示似乎都不适合我-这是我的第一个问题,我是一个新手,所以请温柔一点!注意:如果我使用

Wizard wiz0; 
但如果我使用

Wizard wiz0();
我正在使用的这本书告诉我这两个语句应该是等价的,所以我试图找出为什么我可以使用其中一个而不能使用另一个

首先,这里是我尝试使用向导wiz0()时出现的错误:

以下是(我认为)第5.cpp章中的相关代码:

Wizard wiz0(); //declares a variable (wiz0) of type Wizard.

wiz0.fight();
wiz0.talk();

wiz0.setArmor(10);

cout << "Player's Name: " << wiz0.getName() << endl;

wiz0.castSpell();
…最后是wiz.cpp文件中的信息

//Wiz.cpp implementation file

#include "stdAfx.h"
#include "wiz.h"
using namespace std;

//The Constructor call
Wizard::Wizard()
{
/*If the client calls a constructor without
specifying values, these will be the default
values that the program will use */
mName = "DefaultName";
mHitPoints = 1;
mMagicPoints = 1;
mArmor = 0;
}

Wizard::Wizard(std::string name, int hp, int mp, int armor)
{
//Client called constructor WITH values, so create an
//object with them.
mName = name;
mHitPoints = hp;
mMagicPoints = mp;
mArmor = armor;
}

void Wizard::fight()
{
    cout << "Fighting." << endl;
}

void Wizard::talk()
{
    cout << "Talking." << endl;
}

void Wizard::castSpell()
{
    if (mMagicPoints < 4)
        cout << "Casting spell." << endl;
    else
        cout << "Not enough MP!" << endl;
}

void Wizard::setArmor(int armor)
{
    if(armor >= 0)
        mArmor = armor;
} 

std::string Wizard::getName()
{
return mName;
}

Wizard::~Wizard()
{
//Not using dynamic memory- nothing to clean
}
//Wiz.cpp实现文件
#包括“stdAfx.h”
#包括“wiz.h”
使用名称空间std;
//构造函数调用
向导::向导()
{
/*如果客户端调用构造函数时没有
指定值时,这些值将是默认值
程序将使用的值*/
mName=“DefaultName”;
mHitPoints=1;
mMagicPoints=1;
马尔默=0;
}
向导::向导(std::字符串名称、int-hp、int-mp、int-armor)
{
//客户端使用值调用构造函数,因此创建
//反对他们。
mName=名称;
mHitPoints=hp;
mMagicPoints=mp;
马尔默=装甲;
}
无效向导::战斗()
{

CUT< P>这是C++解析的一个奇怪部分。括号中的一个被解释为函数原型。应该使用没有括号的那个。< /P>
Wizard wiz0;
实例化名为
wiz0

Wizard wiz0();

声明一个函数
wiz0
按值返回一个
Wizard
。这是向导wiz0()的简化版本;
是一个函数声明。要么你误读了这本书,要么是时候找一个更好的了。这两个语句(在该上下文中)不是等同的。不要干涉巫师的事情,因为他们很微妙,也很有趣。所以告诉我他们是等同的那本书是不正确的?是的。如果它是这样说的,那它是不正确的。@user1759305:你的书确切地说了什么?在某些上下文中,他们可能是相似的。在你使用他们的上下文中,他们是不同的。这本书是什么它说什么?找到了这本书,为了快速查看,它的质量似乎是合理的。那么可能只是一个一次性错误。谢谢你的输入。这本书告诉我这两个片段是相同的-我想这本书搞错了?@user1759305这看起来像是书中的一个错误。顺便问一下,这是哪本书?“C++编程,模块I”Gameinstitute.com,e-Institute Publishing。再次感谢您的帮助-当我有15名代表时,我会回来投票支持您的!:)
Wizard wiz0;
Wizard wiz0();