0

我创建了 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();
};

这里的问题在哪里?如何在父类中创建对象?我希望你明白我想说什么。谢谢您的帮助。

4

2 回答 2

3

您的设计现在不正确。通过适当的设计,您的形状可以充当真正的圆形abstract classbase class矩形。如果那么你的设计将是。

在此处输入图像描述

并且您可以维护一个不会产生问题main()的形状列表。但你绝不能在形状上创造。在我看来,这是一个错误的设计。vector<Shape *> mStack;circle or rectangle

于 2013-06-16T21:39:29.413 回答
0

你的基类很奇怪。

  • 基类应该有虚拟析构函数
  • 拥有一个自身的集合可能会超出范围(您可能在层次结构中有一个 CompositeShape ......)
  • 它有一个名为子类的函数。(可以是 shape_area() 或只是 area())

您的实现问题也来自此:如果集合不成形,则 create 不想填充它,问题就消失了。

从提供的信息来看,并不清楚 create 的内容应该去哪里,可能是应用程序,或者可能是一些特定的复杂形状——那些可能只包含所有必需的标题。

于 2013-06-16T22:31:08.770 回答