我正在尝试将动态内存分配给一个对象数组,但我不断收到以下错误:
“错误: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) {
}
答案 0 :(得分:2)
在这一行:
figuri = new Figura[nr_elemente];
编译器不知道类Figura
存在。因此,它会产生错误,因为“Figura”在那一点上是一个未知的标记。你应该使用前瞻声明:
class Figura; // forward-declare class Figura
class Grup {
/* ... */
};
class Figura {
/* ... */
};
问题是编译器不知道类Figura
的大小,因此它不能分配这种类型的对象数组。因此,您可能需要使用指针或修改类设计。
答案 1 :(得分: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.hpp
和figura.cpp
文件。最好对所有课程使用相同的方法。
答案 2 :(得分: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 您在下面的评论中看到的问题与您的无花果类的赋值运算符有关。
操作员看起来像这样...... 图&安培; operator =(const Fig&amp;);
但是你的例子是你指定一个指针
void func(const Fig * fig)
{
// ...
figcontainer [index] = fig; //如果你做了* fig;你没事
// ...
}