0

我正在尝试将动态内存分配给对象数组,但我不断收到以下错误:

“错误:C2143:语法错误:缺少';' 在“*”之前”“错误:C2501:“Figura”:缺少存储类或类型说明符”

欢迎任何帮助。我正在使用 Visual Basic C++ 2006,但将切换到带有 Dosbox 的 Turbo C++ 3.0 以使 graphics.h 工作:(。

这是代码:

#include<iostream.h>

class Grup {
    private:
        int nr_elemente;
        Figura *figuri;
    public:
        Grup() {
            figuri = new Figura[nr_elemente];
        }
};


class Figura {

public:
    Figura();
    ~Figura();
    Figura(const Figura&);

    friend Figura operator+(const Figura& fig1, const Figura& fig2) {};
    friend Figura operator+(const Grup& gr1, const Grup& gr2) {}

    friend Figura operator*(const Figura& fig) {}
    friend Figura operator*(const Figura& fig) {}

};

Figura operator+(const Figura& fig, const Grup& gr) {
    return fig;
}

class Punct : Figura
{
public:
    int x, y;

    Punct(int x, int y) {
        Punct::x = x;
        Punct::y = y;
    }
};

class Segment : Figura
{
public:
    int x, y, poz;
};

class Dreptunghi : Figura
{
public:
    int x, y, poz;
};

void main(void) {



}
4

3 回答 3

2

在这一行:

figuri = new Figura[nr_elemente];

编译器不知道类的Figura存在。因此,它会产生一个错误,因为“Figura”在那个时候是一个未知的标记。您应该使用前向声明:

class Figura; // forward-declare class Figura

class Grup {
/* ... */
};


class Figura {
/* ... */
};

问题是编译器不知道类的大小Figura,因此它不能分配这种类型的对象数组。因此,您可能需要使用指针或修改您的类设计。

于 2012-04-23T18:14:12.040 回答
0

您的问题是您试图在一个文件中完成所有操作。.hpp如果您将类的声明和定义移动到单独的.cpp文件中,您将不会遇到此类问题。移动

// file grup.hpp

class Figura; // forward declaration

class Grup {
private:
    int nr_elemente;
    Figura *figuri;
public:
    Grup();
};

grup.hpp归档。然后实现文件中的构造Grup函数group.cpp

// file grup.cpp
#include "grup.hpp"
#include "figura.hpp"


Grup::Grup()
{
    figuri = new Figura[nr_elemente];
}

还将 Figura 类的定义和声明移动到相应figura.hppfigura.cpp文件中。最好对您拥有的所有课程使用相同的方法。

于 2012-04-23T18:34:52.447 回答
0

您需要转发声明,已经提到过,但这还不够,您需要知道类的大小才能将其用作实现。所以...

class Figura;
class Grup{
  Figura * figuri;
  //.. other stuff, but ONLY declarations no implementations.
};

class Figura
{
  //Same as you already have...
};

在声明类之后,由于它们在同一个文件中,因此您需要在其他类已经实现(或声明)之后实现。

//Still same file but below the Figura class definition..
Grup::Grup() {
   //Now you can use Figura...
   figuri = new Figura[nr_elemente];
}  

@be 您在下面的评论中看到的问题与您的 fig 类的赋值运算符有关。

运算符看起来像这样... Fig& operator=(const Fig& );

但是在您的示例中,您正在分配一个指针 void func(const Fig * fig) { //... figcontainer[index] = fig; // 如果你做了 *fig; 你会没事的 //...
}

于 2012-04-23T19:00:30.453 回答