2011-01-08 16 views
1

私は、ヘッダーファイル内で、2D配列を返す関数を宣言しようとしています。配列のサイズがわかっているので、どのようにこれを達成できますか?以下は私が現在やっていることです。ヘッダファイルに2D配列を返す関数を宣言していますか?

class Sample 
{ 
public: 
    char[x][y] getArr(); 
    void blah(int x, int y); 
private: 
    const static int x = 8; 
    const static int y = 2; 
    char arr[x][y]; 
}; 

答えて

-2

私の元の回答は全く間違っていましたが、I can't delete it since it's been acceptedです。ただ、返す

class Sample 
{ 
    const static int x = 8; 
    const static int y = 2; 
public: 
    typedef char SampleArray[x][y]; 

    SampleArray& getArr(); 
    void blah(int x, int y); 

private: 
    SampleArray arr; 
}; 

Sample::SampleArray& Sample::getArr() 
{ 
    return arr; 
} 

(私はOPの特定のクラス宣言ではなく、getArr()の定義と私の元のソリューションをコンパイルしていた。)

:以下two別のanswersから、私はこれをコンパイルすることができましたポインタへのポインタ。

char** getArr(); 

+2

私は間違った答えを与えるためにこれを-1'edしました。 –

+5

-1 'char [8] [2]'から 'char **'への変換はありません。 – fredoverflow

+0

@Fredと@Johannes Ugh、それを指摘してくれてありがとう。私は答えを修正し、それをコミュニティのwikiに変換しました。 – chrisaycock

-1

うん、ポインタへのポインタが移動するための方法です。考えることは本当に難しいです。このコンセプトを理解するために、紙の上にメモリマップを作成することをお勧めします。私がC++のクラスを取っていたとき、私は、あなたが多くの時間の後に私が必要としたすべてのメモリの地図を描き、それが私に飛び出したことを示唆しているように、ポインターへのポインタを見ていました。それは私を吹き飛ばした。

+2

-1 'char [8] [2]'から 'char **'への変換はありません。 – fredoverflow

+0

与えられた配列データメンバーを返すのが最も理にかなっているかもしれませんが、この質問は曖昧に言われています。これらのすべての下線は不当です。私は手動のメモリ管理に重点を置いていても、一般的には良いアドバイスです。 –

7

私はtypedefを使うべきだと思います。

typedef char TArray[2][2]; 
    TArray& getArr(); 
4

C++では、配列自身を関数から直接返すことはできません。 または、配列への参照または配列へのポインタを返すこともできます。 だから、あなたはのように書くことができます。

char (&getArr())[x][y] { return arr; } 

または

char (*getArr())[x][y] { return &arr; } 

・ホープ、このことができますし。

+1

[typedef](http://stackoverflow.com/questions/4636144/declaring-a-function-that-return-a-2d-array-in-a-header-file/4636331#4636331)を使用してください。 –

5

配列は、C++では一流の市民ではありません。代わりにboost::array(またはC++ 0xでstd::array)を使用してください。それはあなたが行動したいと思うように、はるかに行動します。

関連する問題