【发布时间】:2013-06-16 21:25:48
【问题描述】:
我已经创建了 2 个类。一个叫做 Shape,它是一个虚拟类。另一个叫做 Circle(我打算创建更多的类,例如:三角形、正方形 ....)。我想找到圆形区域对象,但这并不重要。这是我的问题。当我想创建这样的对象时:
vector<Shape *> mStack;
Shape *newShape = NULL;
newShape = new Circle(10.6);
mStack.push_back(newShape);
我可以毫无问题地在主文件中创建它。但是当我尝试在“Shape”类中创建它的函数时……像这样:
void Shape::Create()
{
Shape *newShape = NULL;
newShape = new Circle(10.6);
mStack.push_back(newShape);
}
我收到以下错误:语法错误:标识符 'Circle'
...这是我的课程。
#pragma once
#include <vector>
using namespace std;
class Shape
{
private:
vector<Shape *> mStack;
public:
Shape();
~Shape(void);
virtual double Circle_area() = 0;
};
*********************************************************
#pragma once
#include "Shape.h"
class Circle : public Shape
{
private:
double m_r;
public:
Circle();
Circle(double r);
~Circle(void);
double Create();
double Circle_area();
};
问题出在哪里?如何在父类中创建对象?我希望你明白我想说什么。感谢您的帮助。
【问题讨论】:
-
你的设计不是很好:基类不应该知道它的派生类型,所以
Shape应该不知道Circles。 -
@juanchopanza,除非它用于命中测试并且我猜每个形状都需要提供一个圆形的命中框。
-
您是否在“shape.cpp”中包含了“circle.h”(假设这是您放置
void Shape::create()函数的位置)? -
@chris 这可能通过
Shape接口的多态性来实现。 -
我认为你的意思是使用函数名 area() 而不是 circle_area() 因为这违背了多态性的全部目的。