2011-12-09 10 views
0

2つのオブジェクトの配列を作成するときに、次のエラーが発生します。エッジとボックス。コンパイルエラー:オブジェクトの代わりにポインタを使用する

error: conversion from 'const Edge*' to non-scalar type 'Edge' requested. 

私はエッジの配列を返すことを望んでいます。このヘッダファイルには

class Box 
{ 
private: 
    bool playerOwned; 
    bool computerOwned; 
    Edge boxEdges[4]; 
    int openEdges; 
    bool full; 

public: 
    Box(); 
    Box(int x, int y); 
    void setEdges(Edge boxTop, Edge boxBottom, Edge boxLeft, Edge boxRight); 
    void addEdgeToBox(Edge edge); //add edge to edgeArray. 
    void setPlayerOwned(bool point); 
    Edge getBoxEdges() const {return boxEdges;}    ****//Error**** 
    bool getPlayerOwned() const {return playerOwned;} 
    void setComputerOwned(bool point); 
    bool getComputerOwned()const {return computerOwned;} 
    int getOpenEdges() const {return openEdges;} 
    bool isFull()const {return full;} 

}; 
std::ostream& operator<< (std::ostream& out, Box box); 

私はボックスを作成しようとした非ヘッダファイルに次の行に「ボックス」と「エッジ」を置き換える以外は同じエラーを取得します。

Box box = new Box(x+i,y); 
+1

この声明は不可能と尋ねています。 "Box box = "はボックスの* value *に何かを設定します。しかし、「新しいボックス」は実際にはボックスの値ではなく「ボックス」を作成します。 'Box box = Box(x + i、y);'、あるいはもっと単純に 'Box box(x + i、y);'とすることができます。 –

答えて

4
Box box = new Box(x+i,y); //error 

一つのエラーはここです。そうboxポインタタイプである必要があり、メモリをあなたがnew使用するとき、あなたはメモリを割り当てているので、それがある

Box *box = new Box(x+i,y); //ok 

、およびポインタのみを保持することができます:あなたはこのよう記述する必要があります。 boxEdgesは、その最初の要素へのポインタ型に減衰することができる配列であるため、それはconstメンバであるので、それは

const Edge* getBoxEdges() const {return boxEdges;} //ok 

:同様に、

Edge getBoxEdges() const {return boxEdges;} //error 

のように書かなければならない

関数boxEdgesは、const Edge*に崩壊します。 operator<<のconstの2番目のパラメータを作るために

Box box(x+i, y); //ok 

私はあなたを示唆している:最初のケースではところで


、代わりの ポインタは、あなたは、自動オブジェクトを使用します参照番号:

//std::ostream& operator<< (std::ostream& out, Box box); //don't use this 
std::ostream& operator<< (std::ostream& out, Box const & box); //use this 

これにより、不要なcオピー!

+0

私はオブジェクトを使うのではなく、なぜポインタを使うべきなのか分かりません。 – mcudm001

+1

@ mcudm001、あなたはJava/C#に慣れているようですが、 "new"演算子はオブジェクトの作成方法です。 C++では、 "new"演算子はヒープ上にメモリを割り当て、メモリにアクセスする唯一の方法はメモリ位置へのポインタです。スタック上にオブジェクトを作成することは、異なる構文です。 – riwalk

+1

ありがとう、それはまさに私の問題だった。 C++の前にJavaを学んではいけません。 – mcudm001

関連する問題