【发布时间】:2015-11-04 18:35:12
【问题描述】:
我正在学习多态性,这是一个小游戏。我这里有一个具有代表性的职业角色,我想编程以便人们可以从角色中选择战士或弓箭手继续游戏。
#pragma once
#include <iostream>
using namespace std;
#include <string>
class Warrior;
class Archer;
class Character {
public:
Character(void);
~Character(void);
Character* creatCharacter(int choice, string CharacterName) {
if (choice == 1)
return (Character*)new Warrior(CharacterName);
if (choice == 2)
return (Character*)new Archer(CharacterName);
return NULL;
}
virtual void Skill_Cast() {};
};
class Warrior :public Character {
private:
string name;
public:
Warrior(void);
~Warrior(void);
Warrior(string CharacterName) {
name = CharacterName;
}
void Skill_Cast() {
cout << "Punch!" << endl;
}
};
class Archer : public Character
{
private:
string name;
public:
Archer(void);
~Archer(void);
Archer(string CharacterName) {
name = CharacterName;
}
void Skill_Cast() {
cout << "Shoot!" << endl;
}
};
在主函数中:
int main() {
cout <<"Enter character's name: ";
string name;
getline(cin, name, '\n');
cout <<"Enter your character class by number (1),(2),(3): ";
int choice;
cin >> choice;
Character* YourChar;
YourChar = YourChar->creatCharacter(choice, name);
YourChar->Skill_Cast();
}
这是错误:
Error 1 error C2512: 'Warrior' : class has no constructors
Error 2 error C2514: 'Archer' : class has no constructors
你能解释一下错误并帮我解决这个问题吗,顺便问一下,这是一种“抽象工厂设计模式”吗?非常感谢。 (对不起我的英语不好)
【问题讨论】:
-
你在声明之前使用的是战士和弓箭手。
-
return (Character*)new Warrior(CharacterName);没必要,直接说return new Warrior(CharacterName);还有NhanVat是什么? -
在
YourChar->creatCharacter行上,您使用的是未初始化的指针。但这并不能解释错误信息。 -
@MohamadElghawi 好吧,
classes 已声明,但未定义,因此未声明构造函数。无论如何,这就是问题所在。 -
YourChar = YourChar->creatCharacter(choice, name);嗯??您要取消引用未初始化的指针变量?
标签: c++ design-patterns polymorphism