[英]Array of objects dynamic memory allocation
我正在嘗試將動態內存分配給一個對象數組,但我不斷收到以下錯誤:
“錯誤: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) {
}
在這一行:
figuri = new Figura[nr_elemente];
編譯器不知道Figura
類存在。 因此,它會產生錯誤,因為“Figura”在那一點上是一個未知的標記。 你應該使用前瞻聲明:
class Figura; // forward-declare class Figura
class Grup {
/* ... */
};
class Figura {
/* ... */
};
問題是編譯器不知道類Figura
的大小,因此它不能分配這種類型的對象數組。 因此,您可能需要使用指針或修改類設計。
您的問題是您嘗試在一個文件中執行所有操作。 如果將類的聲明和定義移動到單獨的.hpp
和.cpp
文件中,則不會出現此類問題。 移動
// file grup.hpp
class Figura; // forward declaration
class Grup {
private:
int nr_elemente;
Figura *figuri;
public:
Grup();
};
到grup.hpp
文件。 然后在group.cpp
文件中實現Grup
的構造函數:
// file grup.cpp
#include "grup.hpp"
#include "figura.hpp"
Grup::Grup()
{
figuri = new Figura[nr_elemente];
}
同時將Figura類的定義和聲明移動到相應的figura.hpp
和figura.cpp
文件中。 最好對所有類使用相同的方法。
您需要轉發聲明,已經提到過,但這還不夠,您需要知道類的大小才能將其用作實現。 因此...
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&operator =(const Fig&);
但是你的例子是你指定一個指針void func(const Fig * fig){// ... figcontainer [index] = fig; //如果你做了* fig; 你會好的// ...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.