Java互換ライブラリ(10)

id:melpon:051231#p2のやりかただと、メモリの解放に問題があるので不可。


結局ポインタにするしかないのかなぁとか思ってたんですが、どうやら

Graphics getGraphics();

このままでいけるみたいです。


今までは、

// Graphics.h
#include "Image.h"

class Graphics{
    void drawImage( Image img , int x , int y );
};
// Image.h
class Graphics;
Graphics g_getGraphics();

class Image{
    Graphics getGraphics(){ return g_getGraphics(); }
};
// Image.cpp
#include "Graphics.h"

Graphics g_getGraphics(){
    return Graphics( *this );
}

こんな感じでやってたんですが、これだとgetGraphics()の部分でGraphicsクラスなんて知らないと出ます。


自分はてっきり、戻り値にオブジェクトの実体を渡す場合は前方宣言ではダメなのかなぁと思っていたわけですが、ただ単にコピーコンストラクタが無いからダメってだけだったんですね。
Image.cpp内ではGraphics.hをインクルードしているので、Image.cppで全ての処理を完結すればOKってことですね。

// Image.h
class Graphics;
Graphics g_getGraphics();

class Image{
    Graphics getGraphics();
};
// Image.cpp
#include "Graphics.h"

Graphics g_getGraphics(){
    return Graphics( *this );
}

Graphics Image::getGraphics(){
    return g_getGraphics();
}

こうすれば、ヘッダでコピーが必要と言われることが無くなって、無事コンパイルが通ります。



てかもっと早く気付けよ自分(;´Д`)