簡體   English   中英

對象數組動態內存分配

[英]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.hppfigura.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM