C++ vector ファイル保存??? – 固定ページ 2 – プログラミング – Home

C++ vector ファイル保存??...
 
通知
すべてクリア

[解決済] C++ vector ファイル保存???

固定ページ 2 / 3

Blue
 Blue
(@Blue)
ゲスト
結合: 21年前
投稿: 1467
 

vector を含む構造体は、もう固定長配列をつかっていたころの構造体とはまったく
違うものになります。(PODな構造体でなくなる)

よって、何も考えず、Writeメソッドで書き出すことは不可能です。
Writeメソッドで書き出すことを前提にしているのであれば、vector を使用するのはあ
きらめましょう。
( http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03015.htmlのようなつくりにすると
か。C++限らず、C言語でもよくやるとおもうけど。)


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

ようやっと内実を晒してくれたね。

typedef struct Picture{ //(保存する)
int lFigure; //線か図形を判断する 0:線 1~:図形
int nPoints; //各線の点の数
vector<POINT> ptLines; //
//線:各点の座標データ 図:配列番号[0]
int lKinds; //ペンの種類を保存する
int pTns; //ペンの太さを保存
COLORREF pColors; //ペンの色を保存
}Picture;

ならば POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできます。


返信引用
anri
 anri
(@anri)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

・・・え~と
コード ってなんですか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

ソースコード。


返信引用
anri
 anri
(@anri)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

コード プログラム記述文?

最初にのせたのやつではだめですか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

だからー

ならば POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできます。

だってば。


返信引用
anri
 anri
(@anri)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

すみません 書き込みについていけてませんでした。

えーと
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();
}
}
}


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

…通じてねぇ orz

ならば POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできます。

だっちゅーに。


返信引用
anri
 anri
(@anri)
ゲスト
結合: 19年前
投稿: 33
Topic starter  


POINT って座標データの型じゃないんですか?

POINT p;

p.x = 3;
p.y = 2;

ってなかんじでつかってたんですけど・・・


返信引用
かか
 かか
(@かか)
ゲスト
結合: 19年前
投稿: 6
 

vector使うのを諦めた方がいいんでない?
C++がわかってないのにvector使う時点で無謀と言うか。

クラスとかの概念が無いから説明のしようがない気がする。


返信引用
かか
 かか
(@かか)
ゲスト
結合: 19年前
投稿: 6
 

じゃなくて

POINTの配列を書き込むときに1000点全部使っているわけじゃないでしょ。
2点しか使っていなくても1000点分書き込むの?
それってかなりの無駄じゃない?

普通なら使っている点数分だけ書き込むでしょ。
そうするにはどんなコードを書くのって言う事。


返信引用
anri
 anri
(@anri)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

たしかに・・・でも一度つくりはじめたので最後までやります。

本にのってました!!
Point構造体のメンバ
X  -x座標
Y  -y座標


返信引用
かか
 かか
(@かか)
ゲスト
結合: 19年前
投稿: 6
 

vectorを書き込む為の方法論に近い事やってるよって
επιστημηさんは言ってるんだけどなぁ。

クラスの概念を知らないとやっぱクラスを使っちゃ駄目だわ。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

> POINT って座標データの型じゃないんですか?

知らん(たぶんそうでしょう)。 いずれにせよ:

POINT をファイルに読み書きするコードを提示してください。
それがあれば Picture が読み書きできて、さらに vector<Picuture> が読み書きできま
す。

と問うております。


返信引用
anri
 anri
(@anri)
ゲスト
結合: 19年前
投稿: 33
Topic starter  

たぶん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;


返信引用
固定ページ 2 / 3

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました