C++角色战斗代码问题
C++ Character battle code issue
所以我有这样的代码,它基本上应该只创建对象,然后将它们发送到一个通过cout输出字符串的"arena"。我遇到的问题主要是,当我试图发送创建的对象时,我遇到了一个错误,我可以使用一些解释来理解我做错了什么。我(在很大程度上)理解使用对象,但当我开始使用*时,我有点困惑。我遇到的问题是在myGame.cpp的引擎->竞技场上。
代码:
发动机.h
#ifndef ENGINE_CLASS
#define ENGINE_CLASS
#include <string>
using namespace std;
class Engine
{
public:
Engine();
~Engine();
void arena(Character*, Character*);
};
class Character
{
private:
string m_name;
public:
Character();
~Character();
virtual void fight();
virtual string getName();
virtual void setName(string);
};
class Gladiator : public Character
{
public:
Gladiator();
~Gladiator();
virtual void fight();
virtual string getName();
virtual void setName(string);
};
class Monster : public Character
{
public:
Monster();
~Monster();
virtual void fight();
virtual string getName();
virtual void setName(string);
};
#endif
Engine.cpp
#include <iostream>
#include "Engine.h"
using namespace std;
//Methods for Engine Class
Engine::Engine()
{
}
Engine::~Engine()
{
}
void Engine::arena(Character *oCharacter1, Character *oCharacter2)
{
//Logic
oCharacter1->fight();
oCharacter2->fight();
//More Logic
}
//Methods for Parent-Charachter Class
Character::Character()
{
m_name = "Unknown";
}
Character::~Character()
{
m_name = "";
}
void Character::fight()
{
cout << "Fight" << endl;
}
string Character::getName()
{
return m_name;
}
void Character::setName(string newName)
{
m_name = newName;
}
//Methods for Child-Gladiator Class
Gladiator::Gladiator()
{
Character::setName("Maximus");
}
Gladiator::~Gladiator()
{
Character::setName("");
}
void Gladiator::fight()
{
cout << "Maximus strikes monster..." << endl;
}
string Gladiator::getName()
{
return Character::getName();
}
void Gladiator::setName(string newName)
{
Character::setName(newName);
}
//Methods for Child-Monster Class
Monster::Monster()
{
Character::setName("Monster");
}
Monster::~Monster()
{
Character::setName("");
}
void Monster::fight()
{
cout << "Monster strikes Maximus..." << endl;
}
string Monster::getName()
{
return Character::getName();
}
void Monster::setName(string newName)
{
Character::setName(newName);
}
myGame.cpp
#include <iostream>
#include "Engine.h"
using namespace std;
int main()
{
//Instantiation
Engine engine;
Character *aCharacter1;
Character *aCharacter2;
//Association
aCharacter1 = new Gladiator;
aCharacter2 = new Monster;
//Fight
Engine->arena(*aCharacter1, *aCharacter2);
//Cleanup
delete aCharacter1;
delete aCharacter2;
}
更新
现在,考虑到更正,我得到以下4个错误
Error 1 error C2061: syntax error : identifier 'Character' c:userschristopherdesktoppaulschoolneitgame architectureweek 4 & 5christopher-midtermpart2christopher-midtermpart2engine.h 13 1 Christopher-MidtermPart2
Error 3 error C2061: syntax error : identifier 'Character' c:userschristopherdesktoppaulschoolneitgame architectureweek 4 & 5christopher-midtermpart2christopher-midtermpart2engine.h 13 1 Christopher-MidtermPart2
Error 4 error C2511: 'void Engine::arena(Character *,Character *)' : overloaded member function not found in 'Engine' c:userschristopherdesktoppaulschoolneitgame architectureweek 4 & 5christopher-midtermpart2christopher-midtermpart2engine.cpp 18 1 Christopher-MidtermPart2
Error 2 error C2660: 'Engine::arena' : function does not take 2 arguments c:userschristopherdesktoppaulschoolneitgame architectureweek 4 & 5christopher-midtermpart2christopher-midtermpart2mygame.cpp 19 1 Christopher-MidtermPart2
您的void arena(Character*, Character*);
方法将指针指向Characters,但您试图传递由指针指向的实际对象:Engine->arena(*aCharacter1, *aCharacter2);
将此行更改为Engine->arena(aCharacter1, aCharacter2);
或者更改方法,使其可以将对象作为参数而不是指针:void arena(Character, Character);
此外,正如Giulio Franco
所提到的:arena is an instance method. You cannot call it on a class. It's engine.arena, not Engine->arena
,如PaulMcKenzie
所述:Undefined behavior when you call delete on your objects. Your base class destructor is not declared as virtual
1)将Character
析构函数声明为virtual
。
原因是在main
中,通过基类指针删除指向派生对象的指针。一旦这样做,基类必须有一个声明为virtual
的析构函数,否则行为是未定义的。
所以你需要这个:
virtual ~Character();
然后在main
中,现在已经定义了行为:
//Cleanup
delete aCharacter1;
delete aCharacter2;
2) 您必须将指针传递给arena
函数,而不是对象。
engine.arena(aCharacter1, aCharacter2);
- 在黑客地球上没有获得以下C ++代码问题的输出
- VS 代码C++问题
- 插入操作的二叉搜索树代码问题
- 如何在代码问题中解决此问题 代码强制
- 发送和十六进制消息时套接字代码C++问题
- 代码问题将字符串转换为图表执行
- C 代码问题?编译器问题?代码块
- 代码问题.使用矢量删除相同的数字,除了它的最后一个入口
- 迭代列表以查找元素的出现.代码问题
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- XCode 4.5简单的OpenGL C 代码问题
- 在VS 2010上使用boost::interprocess生成代码问题
- 简单代码问题-未定义标识符
- 基本的c++代码问题
- 识别C++代码问题
- C++角色战斗代码问题
- OpenScenegraph 示例代码问题
- PortAudio示例代码问题
- 关于cout和cin的c++简单代码问题
- 关于歧义排列的代码问题