vector を含む構造体は、もう固定長配列をつかっていたころの構造体とはまったく
違うものになります。(PODな構造体でなくなる)
よって、何も考えず、Writeメソッドで書き出すことは不可能です。
Writeメソッドで書き出すことを前提にしているのであれば、vector を使用するのはあ
きらめましょう。
( http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03015.htmlのようなつくりにすると
か。C++限らず、C言語でもよくやるとおもうけど。)
ようやっと内実を晒してくれたね。
typedef struct Picture{ //(保存する)
int lFigure; //線か図形を判断する 0:線 1~:図形
int nPoints; //各線の点の数
vector<POINT> ptLines; //
//線:各点の座標データ 図:配列番号[0]
int lKinds; //ペンの種類を保存する
int pTns; //ペンの太さを保存
COLORREF pColors; //ペンの色を保存
}Picture;
ならば POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできます。
・・・え~と
コード ってなんですか?
ソースコード。
コード プログラム記述文?
最初にのせたのやつではだめですか?
だからー
ならば POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできます。
だってば。
すみません 書き込みについていけてませんでした。
えーと
vector にするまえのコード
typedef struct Picture{ //(保存する)
int lFigure; //線か図形を判断する 0:線 1~:図形
int nPoints; //各線の点の数
POINT ptLines[1000]; //1つの線を1000点で表す
int lKinds; //ペンの種類を保存する
int pTns; //ペンの太さを保存
COLORREF pColors; //ペンの色を保存
}Picture;
struct Picture mypic[1000];
void CoekakiView::OnDestroy()//終了時書き込み
{
CView::OnDestroy();
// TODO : ここにメッセージ ハンドラ コードを追加します。
CStdioFile fin;
if(nLines != 0){
if(AfxMessageBox(現在の線を保存して終了しますか?,MB_YESNO)
== IDYES ){
if(!fin.Open(Line.txt,CFile::modeCreate |
CFile::modeWrite | CFile::typeBinary)){
AfxMessageBox(読込みファイを開けません);
return;
}
fin.Write(&nLines,sizeof(nLines));
fin.Write(myPic,sizeof(myPic));
fin.Close();
}
}
}
…通じてねぇ orz
ならば POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできます。
だっちゅーに。
え
POINT って座標データの型じゃないんですか?
POINT p;
p.x = 3;
p.y = 2;
ってなかんじでつかってたんですけど・・・
vector使うのを諦めた方がいいんでない?
C++がわかってないのにvector使う時点で無謀と言うか。
クラスとかの概念が無いから説明のしようがない気がする。
じゃなくて
POINTの配列を書き込むときに1000点全部使っているわけじゃないでしょ。
2点しか使っていなくても1000点分書き込むの?
それってかなりの無駄じゃない?
普通なら使っている点数分だけ書き込むでしょ。
そうするにはどんなコードを書くのって言う事。
たしかに・・・でも一度つくりはじめたので最後までやります。
本にのってました!!
Point構造体のメンバ
X -x座標
Y -y座標
vectorを書き込む為の方法論に近い事やってるよって
επιστημηさんは言ってるんだけどなぁ。
クラスの概念を知らないとやっぱクラスを使っちゃ駄目だわ。
> POINT って座標データの型じゃないんですか?
知らん(たぶんそうでしょう)。 いずれにせよ:
POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできま
す。
と問うております。
たぶん1000点使ってなくてもすべて書き込んでたと思います。
void CoekakiView::OnMouseMove(UINT nFlags, CPoint point)
{
pDC->MoveTo(oldPos);
pDC->LineTo(point);
myPic[nLines].ptLines[myPic[nLines].nPoints] = point;
myPic[nLines].nPoints++;
oldPos = point;
}