我创建了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();
};
这里的问题在哪里?如何在父类中创建对象?我希望你明白我想说的话。谢谢你的帮助。
答案 0 :(得分:3)
您的设计现在不合适。通过适当的设计,您的形状可以作为真实圆圈或矩形的abstract class
或base class
。如果那时你的设计将是。,
在main()
中你可以维护一个不会产生问题的形状列表vector<Shape *> mStack;
。 但您不得创建circle or rectangle
形状。在我看来,这是一个错误的设计。
答案 1 :(得分:0)
你的基类不仅仅是奇怪的。
你的实现问题也来自于此:如果集合没有形状,那么create就不想填充它,问题也就消失了。
根据提供的信息,不清楚创意的内容应该去哪里,可能是应用,或者可能是某些特定的复杂形状 - 这些可能只包含所有必需的标题。