使用:VS2010:新项目 - > Windows32控制台应用程序 - >空项目
语言:C ++
问题:我尝试使用通过1虚拟方法实现接口的两个类进行简单的接口测试。我还尝试在这两个类中使用构造函数来设置默认值。尝试创建任一类的对象时会出现主要问题; IDE会抱怨标识符" class"未定义。
我已经检查了数十个其他帖子但是有相同的错误,但大多数是实例化中的错误(正确的术语?),他们使用
Class obj();
而不是
Class obj;
其他线程中的另一个问题是头文件未包含在main.cpp和具体类中(正确的术语?)。还有其他问题包括include的排序(基类应该是第一个),或者甚至不正确地使用构造函数/解构器。
我已检查过这些问题,看看它们是否会对我有用,但却无法弄清问题是什么。
任何见解都将受到赞赏!
错误 :(所有在main.cpp中)
Error 1 error C2065: 'Human' : undeclared identifier 6 1 interfaceGameTest
Error 2 error C2146: syntax error : missing ';' before identifier 'hum1' 6 1 interfaceGameTest
Error 3 error C2065: 'hum1' : undeclared identifier 6 1 interfaceGameTest
Error 4 error C2065: 'Orc' : undeclared identifier 7 1 interfaceGameTest
Error 5 error C2146: syntax error : missing ';' before identifier 'orc1' 7 1 interfaceGameTest
Error 6 error C2065: 'orc1' : undeclared identifier 7 1 interfaceGameTest
Error 7 error C2065: 'hum1' : undeclared identifier 10 1 interfaceGameTest
Error 8 error C2227: left of '->getHP' must point to class/struct/union/generic type 10 1 interfaceGameTest
代码:
IPc.h
#ifndef IPC_H_HAS_BEEN_INCLUDED
#define IPC_H_HAS_BEEN_INCLUDED
class IPc {
private:
int hp;
int mana;
int endurance;
public:
void setHP(int h) { hp = h; }
void setMP(int m) { mana = m; }
void setEnd(int e) { endurance = e; }
int getHP() { return hp; }
int getMP() { return mana; }
int getEnd() { return endurance; }
virtual int Attack() = 0;
};
#endif
IPc.cpp
#include "IPc.h"
class Human: public IPc
{
public:
Human::Human()
{
this->setHP(10);
this->setMP(5);
this->setEnd(10);
}
Human::~Human(){}
int IPc::Attack() // I have tried just "int Attack()" as well
{
return 1;
}
};
class Orc: public IPc
{
public:
Orc::Orc()
{
this->setHP(20);
this->setMP(0);
this->setEnd(20);
}
Orc::~Orc() {}
int IPc::Attack()
{
return 5;
}
};
的main.cpp
#include <iostream>
#include "IPc.h"
int main()
{
Human hum1; // error Human undefined
Orc orc1; // error Orc undefined
int humHP = 0;
humHP = hum1->getHP();
std::cout << "Human HP is: " << humHP << std::endl;
return 0;
}
修改
我放了
class Human: public IPc { virtual int Attack() };
在IPc.h中(在基类之后)和#endif之前(也为Orc做了一次)。我也改变了
humHP = hum1->getHP();
到
humHP = hum1.getHP();
这似乎已经解决了以前的问题(感谢Mat和Rahul)。我现在正在上课#39;类型重新定义错误。我相信这与包括警卫有关。我是否需要在.h文件中使用自己的一组警卫包围每个单独的类,或者我是否可能不正确地实现它们?
EDIT2
我将两个类声明放在他们自己的头文件中,并带有自己的警卫。这似乎解决了&#34; &#39;类&#39;类型重新定义&#34;。虽然现在在两个派生类的虚拟攻击调用中都存在未解析的外部符号错误。
答案 0 :(得分:1)
不允许在类成员声明中使用限定名称。即在类Human
中声明类Human
的构造函数时,不允许将其称为Human::Human()
。它应该只是Human()
。这同样适用于所有其他方法。
尝试在其他类中声明方法int IPc::Attack()
毫无意义。它应该只是int Attack()
。
您在Human
内声明了类Orc
和IPc.cpp
。这些类仅在IPc.cpp
内可见,而在其他地方不可见。在C ++中,程序级类的语言类声明通常放在头文件中,就像你使用IPc
类一样。