2012-04-23 9 views
0

私はオブジェクトの配列への動的メモリを割り当てることをしようとしているが、私は次のエラーを得続ける:アレイ

「エラー:C2143:構文エラー:見つかりません 『;』 「*」の前に「*」「 」エラー:C2501: 'Figura':ストレージクラスまたはタイプ指定子がありません。

ヘルプは歓迎されています。私は、Visual Basic C++ 2006を使用していますが、graphics.h作業を取得するためにDOSBoxをターボC++ 3.0に切り替えます:(

をここでは、コードです:。このラインで

#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

Turbo C++ 3.0は1991年からのものです。何も推奨されていません。 –

+0

先生に教えてください:) – BebliucGeorge

答えて

2

figuri = new Figura[nr_elemente]; 
は、 。

コンパイラは、クラスFigura。したがって、それは「FIGURA」以来、エラーを生成し、その時点では不明であるトークンが存在することを知らないあなたは前方宣言を使用する必要があります。

コンパイラがクラスFiguraのサイズを知らないため、このタイプのオブジェクトの配列を割り当てることができないという問題があります。したがって、おそらくポインタを使用するか、クラスデザインを変更する必要があります。

+0

私は今私がやっていることの代わりにポインタを使うことができますか? – BebliucGeorge

+1

新しく働くために完全なFiguraクラスは必要ありませんか? – juanchopanza

+1

いいえ、私はFiguraを前方宣言しましたが、現在は "適切なデフォルトコンストラクタが利用できません"となっています。 figuri = new Figura [nr_elemente]と並んでいます。 – BebliucGeorge

0

問題は、すべて1つのファイルで処理しようとしていることです。クラスの宣言と定義を移動して.hpp.cppファイルを分離すると、この種の問題は発生しません。 grup.hppファイルに

// file grup.hpp 

class Figura; // forward declaration 

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

を移動し 。またfigura.hppfigura.cppファイルを対応するFIGURAクラスの定義と宣言を移動

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


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

:次にgroup.cppファイルにGrupのコンストラクタを実装します。あなたが持っているすべてのクラスで同じアプローチを使う方がいいです。

0

宣言を先に進める必要がありますが、これでは十分ではありません。実装として使用するには、クラスのサイズを知る必要があります。彼らはあなたが他のクラスが実装(または宣言)された後に実装する必要が同じファイル内にあるので、そこで...授業の後

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

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

は、宣言されています。

@be あなたがあなたのコメントを見ている問題は、下記のおイチジクのクラスの代入演算子に関係しています。

オペレータは次のようになります。 図& operator =(const FIG &);

しかし、あなたの例であなたは、ポインタ ボイドFUNC(定数図*図) { // ... figcontainer [インデックス] =図を割り当てています。 //あなたがしたら*イチジク;あなたは大丈夫だろう // ...
}

+0

私は少しデザインを変更しましたが、ほとんどすべてが機能します。唯一の問題は、私は動的メモリ割り当て権を行使していないと思うことです。私は得る:エラーC2679:バイナリ '=':演算子は、 'FIGuraクラス'のタイプの右オペランドを取る定義されていません。行は次のとおりです:void adauga_element(Figura * fig){ \t \t \t figuri [nr_elemente ++] = fig; \t \t}。 – BebliucGeorge