[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 06/02 12:18 / Filesize : 258 KB / Number-of Response : 992
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.64【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.63【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1231499251/

【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm

◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。


309 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 20:08:54 ]
>>308
pthread.h を覗いてみては?
pthread_cond_??? あたりでいけそう

310 名前:デフォルトの名無しさん mailto:sage [2009/03/08(日) 21:11:29 ]
>>309
サンクスです。チューw
  pthread_cond_wait(&cond,&mutex);
  pthread_cond_signal(&cond);
上記で実装しました。動作OKでした。
mutexの使い方は良く判りませんがこれから理解しておきます。
CPUもビジーウェイトにはなっていないのでOKです。ありがとうございました。
(DIONは書き込み規制はいってるの?)



311 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 03:45:12 ]
ATL/WTLを参考にwindowsの簡易クラスライブラリ作ってみてるのですが
(ただのパクリですが・・・もちろん勉強のためです)
CStatic : public CWindow {
public:
 CStatic(HWND hWnd) : CWindow(hWnd) {}
 CStatic& operator=(HWND hWnd) { m_hWnd = hWnd; return *this; }
 ...
};
CStatic text = GetDlgItem(IDC_STATIC); // CWindow型を返す
などのCStaticコンストラクタの初期化がコンパイル通りません。
>error C2679: 二項演算子 '=' : 型 'class CWindow' の右オペランドを扱う演算子は定義されていません。(または変換できません)
考えてみれば派生クラスに基底クラス代入しようとしてるので当然の結果だと思うのですが
ATL/WTLではこれが上手くいっているのは何故なんでしょうか?
ATL/WTL見たことある方で分かられる方があればご教示ください。

312 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 04:09:36 ]
CStatic& operator=(HWND hWnd)
それ以前にこれ間違ってね?

313 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 04:16:54 ]
>>312
レスありがとうございます。
WTLのをそのまま流用したつもりでしたが;
どこが間違ってるのでしょうか?戻り値の参照ですか?

314 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 04:27:45 ]
いや、それだけしかないなら
CStatic text = GetDlgItem(IDC_STATIC); // CWindow型を返す
これに当てはまるoperator=が無いじゃん

315 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 04:47:48 ]
>>314
すみません、そもそもoperator=は今回関係ないみたいです。
コンストラクタの初期化で
CStatic text(GetDlgItem(IDC_STATIC));
CStatic text = GetDlgItem(IDC_STATIC);
上の2つは同じという認識だったのですが上だけコンパイル通ります;
CWindowでは operator HWND() const { return m_hWnd; } を持ってるので初期化構文でこれが適用されるかと期待したのですが。

316 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 10:11:14 ]
IDC_STATICは実際にこう書いてるの?
IDC_STATICは-1でdefineされていて、こういう場面で使えないと思うけど。

317 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 19:02:57 ]
>>316
遅くなりすみません。実際は違う値(オリジナルの値)です。すみません。
例えばATL/WTL解説で有名な↓ここ
home.att.ne.jp/banana/akatsuki/doc/atlwtl2/stdctrl05/index.html
では CStatic view = GetDlgItem(IDC_STATIC_VIEW); としておられます。



318 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:03:55 ]
>>315
コンストラクタにexplicit付いてんじゃねぇの

319 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:49:52 ]
>>318
explicitは付けていません。変換コンストラクタについてもっと勉強が必要でしょうか;

試しに簡易コードで再現してみました。皆さんの環境ではコンパイル通りますでしょうか?
class A { // 基底クラス
public:
 DWORD_PTR a; // データメンバ
 operator DWORD_PTR() { return a; }
 A(DWORD_PTR x = 0) : a(x) {} // コンストラクタ
 A getData() { return A(a); } // 自クラスでキャスト
};
class B : public A { // 派生クラス
public:
 B(DWORD_PTR x = 0) : A(x) {} // コンストラクタ
 B& operator=(DWORD_PTR x) { a = x; return *this; }
};

A aaa;
B bbb = aaa.getData(); // NG
bbb = aaa.getData(); // OK
それともこの再現自体が間違ってるのでしょうか・・・?

320 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 20:53:33 ]
>>319
class A に A(a)のコンストラクタは付けないの?

321 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:06:28 ]
>>319
VC2008EEで通ったけど

322 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:42:54 ]
class Aの中でコピイコンストラクタ俺タイプが隠してあるんじゃ?

323 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 21:59:40 ]
[質問内容]
C++で、ヘッダに書いたクラスの宣言の中にあるstatic constなメンバ構造体、
メンバ配列についてお行儀のよい書き方を教えてください。
メンバ構造体の初期化値(たとえば、文字列 "hogehoge" や 10 や 20 といった値)は、cppで持つとして、
文字列や値は同様にメンバ変数として持つのか? それとも、
cppの上の方に無名空間で切った変数を新たに宣言するのか?

そもそも前提条件のstatic constな値を持つメンバ構造体や配列は、クラスに持たないで
cppの上の方に無名空間で値を作って、ポインタかなんかで受けるのが正しいのか?
ちょっと、わからないので教えてください。






324 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:34:42 ]
static constならクラス内で初期化しない?

325 名前:323 mailto:sage [2009/03/09(月) 22:42:56 ]
簡単に言うと、以下のようなクラスを考えてください。
<hoge.h>
class CHoge {
public:
CHoge(){}
~CHoge(){}
private:
enum { END = 10 };
static const int Array[END];
};
<hoge.cpp>
const int CHoge::Array[END] = {
0,1,2,3,4,5,6,7,8,9 //!< ←ここの値をどのように書くとお行儀がいいか?
};

>>324
レスありがとうございます。
その場合、マジックナンバなどはどこに宣言してありますか?


326 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 22:52:04 ]
>>325
そのまま数値書いてコメント付けとけばいいんじゃねぇの。
その値をどういう意味があって、どう使うかわからんから
ケースバイケースとしか言いようが無いと思うけど。

327 名前:323 mailto:sage [2009/03/09(月) 23:05:52 ]
>>326 レスありがとうございます。
ケースバイケースについて質問なんですが、ユーザーインターフェイスを作成するときにボタンがあったとします。
ボタンに表示する文字列とか,ボタンのサイズを持つ構造体配列を作ると
その構造体配列自体で、共通する値が出てきます。
<hoge.h>
class CHoge {
public:
CHoge(){}
~CHoge(){}
private:
enum { END = 3 };
struct BTN_TAG {
int X;
int Y;
int W;
int H;
char *Str;
};
static const BTN_TAG m_BTN[END];
};
<hoge.cpp>
const CHoge::BTN_TAG CHoge::m_BTN[END] = {
{ 100, 200, 200, 50, "ボタン1" }, //!< ここら辺の100とかの値
{ 100, 300, 200, 50, "ボタン2" },
{ 100, 400, 200, 50, "ボタン3" },
};
こういう場合は、どのようにするのがお行儀がいいでしょうか?




328 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:14:02 ]
文字リテラル : リージョン の比次第だけどリージョン固定のクラス作れば?

329 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:26:46 ]
>>327
そのまま100でいいんじゃないかなぁ。
200と50がデフォルトのボタン幅・高さとかだったり
頻繁に調整する必要があるなら、無名名前空間にでも定数作ればいいと思う。

でもまぁ俺だったら、UIの情報はプログラム中に書かず
リソースや外部ファイルに書いて実行時に読み込むけど。

330 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:27:48 ]
>>328 
返信ありがとうございます。
リージョン固定というのを不勉強で知らないのですが、
CHogeからのみ参照できる、statc constだらけのクラスと考えれば
いいでしょうか?


331 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:35:33 ]
template<TwidthX, TwidthY>class Btn{
static struct{int x, y; char *c;}m_BTN[3];
}
追い出すメリットが勝つるメンバは追い出す。

332 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:46:04 ]
>>329
返信ありがとうございます。
考え方として了解しました。



333 名前:デフォルトの名無しさん mailto:sage [2009/03/09(月) 23:59:08 ]
>>331
返信ありがとうございます。
Btnクラスを作って、CHogeで参照するということでいいでしょうか?
(CHogeがメンバクラス(Btn)をもつという解釈でいいでしょうか?)
templateにしている理由が理解できていないのですが、お時間があれば説明いただけないでしょうか?


334 名前:デフォルトの名無しさん [2009/03/10(火) 04:18:48 ]
class Game {
char **board;
public:
void init() {
board = reinterpret_cast<char**>(new char[9][9]);
}
};
こう書くとコンパイルは通るんですが、boardにはBadpointerの値が
入ってます。なにか間違ってますでしょうか?


335 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 04:36:16 ]
何もかもが間違っているような・・・

なんでキャストしてるのん?
そして何ゆえそんな危険なキャストしてるのん?
あと、配列の配列は配列のポインタで受けることはできても
ポインタのポインタで受けることはできないよ?

っていうか、僕も初心者だから意味わからん^^

336 名前:デフォルトの名無しさん [2009/03/10(火) 05:50:54 ]
>>335
ありがとうございます。
char *p[10] = new (char*)[10];
とか出来なくて、あんなコードになってしまいました。
どうすればいいですか?
char **p;
char *p[10];
とかをnewで初期化するにはどうすればいいですか?



337 名前:デフォルトの名無しさん [2009/03/10(火) 06:55:33 ]
p = new char[10];



338 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 10:30:43 ]
そもそもinit()を呼んでいるのだろうか。

339 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 13:26:15 ]
char** p;
p = new char*[10];

340 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 15:44:07 ]
void init(int sfx1,int sfx2){ // 素敵な cast をどうしても使いたい場合。
board = reinterpret_cast<char**>(new char[sfx1*(sizeof(char*)+sfx2)]);
for(int i = 0; i< sfx1; ++i)board[i] = new(reinterpret_cast<char*>(board)+sfx1*sizeof(char*)+(sfx2*i))char[sfx2];
}

341 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 16:09:07 ]
>>340
何がなにやらわけわからんw

342 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 17:33:37 ]
>>340 を理解した上で
char *p[10]; とは char* を 10個用意する事だよ と指摘されればポンと膝を打つ
って寸法だ。

343 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:27:00 ]
newってtry-catchするのとnothrowするのどっちがいいの?

344 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 18:52:35 ]
>>343
try-cathc も nothrowも付けずにほっとく

345 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 20:13:46 ]
膝を打った後どっちに進むかは読み書きしたコード量に因るかな


346 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 01:31:35 ]
ptr_arrayつかうか、吹っ切れてmallocに先祖返りするかってことかい?

347 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 01:48:32 ]
パッディングの罠に嵌りに逝くか[]演算子のくっ付き方を考えるか



348 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 07:51:57 ]
初心者が配列 new なんか使うんじゃねーよ。 std::vector にしとけ。

349 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:13:45 ]
vector 使うのが正解
下手に深く判ってるコード書いて、おまけに手が遅かったりしたら上司に認められて
他人のクソコードをメンテする係に抜擢されちまうよ

350 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 15:37:46 ]
C++ Coding Standradsでは
生の配列はクラス内部で小さなデータを持ちまわるような場合は使ってもいいって書いてたな、確か。
同じく、生ポインタも局所的な使い方なら可。スマポは便利だがやや使われすぎの嫌いがあるとも。

Googleコーディング標準ではスマポよりもまずスコポの使用を考えたら?って提案してた。

351 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:08:52 ]
スコティッシュポールド

352 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:10:08 ]
最近の若い子の省略はよくわからんのぉ

353 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:13:29 ]
シコスでは
生配はクラ内で小デを持ちまわるような場合は使ってもいいって書いてたな、確か。
同じく、生ポも局所的な使い方なら可。スマポは便利だがやや使われすぎの嫌いがあるとも。

グルコではスマポよりもまずスコポの使用を考えたら?って提案してた。

354 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 16:22:02 ]
スコポ の検索結果 約 495 件中 1 - 10 件目 (0.43 秒)
スマポ の検索結果 約 1,710 件中 1 - 10 件目 (0.09 秒)

355 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 17:25:01 ]
>>350
scoped_ptrもスマートポインタの一種だよ。

356 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:42:06 ]
局所的、たとえば小さな関数内とかじゃ、なまぽで良いだろ
出来れば、ぽんたを扱わないで良い言語を使い、でC++で無いといけないところだけ
達人がその部分をプログラムする。

357 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:47:38 ]
スマポってのも曖昧な言葉だな
auto_ptrなんか心情的にはそう呼びたくないけど一応スマポだし
*とかが使えるからってイテレータまでスマポ呼ばわりする奴もいるし
逆にshared_ptr以外はスマポじゃないって奴もいるし

スマポって何?



358 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 18:50:02 ]
アホコードを書くDQNを隔離しておくための足かせ

359 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:00:48 ]
ポインタのような動きをするものは全てスマートポインタ
具体的に言うと*とか->が使える生ポインタ以外の物

360 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:02:12 ]
そーなのかー

361 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:20:52 ]
>>358
お舞! それは絶対に正しい。

ポインタすら使えない、つまりC++を扱ってはいけないような奴に、
C++を使わせるのに必要なものだよな

362 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 19:27:16 ]
自己も相対的にDQNかも知れない場合に備え
自主的に足かせを装着する訳だが

363 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 20:32:27 ]
>>362
ですよね〜。

364 名前:デフォルトの名無しさん mailto:sage [2009/03/11(水) 21:43:09 ]
ほんとDQNですみません。

365 名前:デフォルトの名無しさん [2009/03/12(木) 02:06:14 ]
ここでC++の勉強法を質問するのはスレ違いでしょうか?
それらしいスレがなかったので、一度ここで聞いてみようかなと…
独学のため、先輩方の意見などをお聞きしたいと思っています。

366 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 02:54:55 ]
おれも知りたいかも
Cやったら、ビジネス的な意味とオブジェクト指向を学びたいので、次はJavaに行くべきか、C++もやったほうがいいのか、迷う
C++は、モノにするには、やる範囲が広そうだし、Javaなのかな

ビジネス的な意味でC++,C#,Javaの位置付けってどういうもんなんですか?

367 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 06:58:49 ]
スレ違い



368 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 12:20:28 ]
まずビジネス的な意味というのがわからん訳だが

369 名前:デフォルトの名無しさん [2009/03/12(木) 19:44:28 ]
Windows上のC++の質問なんですが、プロパティの中のコード生成のランタイムライブラリーには
/MT
/MTd
/MD
/MDd
の4つの選択肢がありますが、デフォルトは/MDdだと思いますが、本のサンプルを実行する際に、
/MTdに変更するように指示があり、実際変更しなければコンパイルできませんでした。
どういう場合に/MTdにしなければだめになるのでしょうか?


370 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:13:31 ]
>>369
ソリューションの構成をDebugからReleaseにする
ツールバーの下にDebugっていうドロップダウンリストがあるからそこで切り替えろ

371 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 20:22:34 ]
ネットワーク共有ファイルに対してFindFirstFileを行うにはどうすればよいのでしょうか?
例えば
\\Server\folder\test.txt
にあるファイルに対して
FindFirstFile( "\\\\Server\\folder\\test.txt",&data );
とやっても失敗になってしまいます。
ショートパスからロングパスにしたいのですが、、、、

372 名前:デフォルトの名無しさん mailto:sage [2009/03/12(木) 21:58:54 ]
ドライブにマウントしてから x:\test.txt とかでアクセスすればいいのでは?

373 名前:デフォルトの名無しさん [2009/03/13(金) 14:45:20 ]
2chトリップ生成プログラム教えてください。
ライブラリ作った人とかいますか?

374 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:17:00 ]
団子さんの出番ですね!!

375 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:21:22 ]
やばい、>>374と同じ事が頭に浮かんだ

376 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:37:46 ]
>>373
2chのトリップと互換のPHPやらPerlやらの掲示板ソースでも探したらあるよ

377 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:40:55 ]
[環境]C++ WindowsMobile向けアプリ(練習でデスクトップ版を作ります)
GoogleCalendarとの同期を取るアプリを作りたいんですが、
最初の認証(ユーザーアカウント&パスワード)をどうやって投げれば
いいのかご存知の方いらっしゃいましたら、ご教授願えないでしょうか?







378 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:44:06 ]
>>373
PHPのを探してきた
$trip = '';
if (preg_match("/([^\#]*)\#(.+)/", $_POST['FROM'], $match)) {
$salt = substr($match[2]."H.", 1, 2);
$salt = preg_replace("/[^\.-z]/", ".", $salt);
$salt = strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef");
$trip = substr(crypt($match[2], $salt),-10);
$_POST['FROM'] = $match[1].'</b>◆'.$trip.'<b>';
}
cryptがDESかMD5かで結果が変わる

379 名前:デフォルトの名無しさん mailto:sage [2009/03/13(金) 15:55:43 ]
>>373
Cのソースがあった
www.geocities.com/tk2001b/utripper/

380 名前:デフォルトの名無しさん [2009/03/14(土) 20:40:26 ]
using namespace std;
とソースの上に書くのと、
ソース全体を
namespace std {
...
}
というようにnamespaceの中に書くのとは、同じ意味ですか?


381 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 20:45:14 ]
違います

382 名前:デフォルトの名無しさん [2009/03/14(土) 21:00:19 ]
ありがとうございます。
どう違うか、教えてください。


383 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:04:06 ]
利用と宣言の違い棚。

384 名前:デフォルトの名無しさん [2009/03/14(土) 21:11:37 ]
わかりました。
後者の場合stdの中で宣言するというだけなので、Main関数を入れたりとかは
できないということですね。
ありがとうございました。

385 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 21:22:45 ]
std 名前空間内に自分で宣言を追加してはいけない。
規格上未定義動作になる。

386 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 00:23:57 ]
std::swapの特殊化は置いてもいいけどね。

387 名前:デフォルトの名無しさん mailto:sage [2009/03/15(日) 00:31:35 ]
std::swapの特殊化じゃなくて、テンプレートの完全特化が許されてるってことね



388 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 01:03:47 ]
stringのvectorにファイルを一行づつ読み込んで、まとめて別のファイルに書き込むというプログラムを作ってるんですけど
エラーチェックは↓見たいな感じで十分ですかね?

#include <iostream>
#include <fstream>
#include <vector>
#include <string>

using namespace std;

void read(char *file, vector<string> &lines);
void write(char *file, vector<string> &lines);

int main(void)
{

vector<string> lines;

read("C:/Work/from.txt", lines);
write("C:/Work/to.txt", lines);

cout << "正常終了" << endl;

return 0;
}

389 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 01:04:39 ]
void read(char *file, vector<string> &lines)
{
ifstream ifs(file);

if(!ifs.is_open()){
cout << "コピー元ファイルを開けない" << endl;
exit(EXIT_FAILURE);
}

while(ifs.good()){
string line;

getline(ifs, line);
lines.push_back(line);
}

if(!ifs.good() && !ifs.eof()){
cout << "読み込み途中でエラー" << endl;
ifs.close();
exit(EXIT_FAILURE);
}
}

390 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 01:05:31 ]
void write(char *file, vector<string> &lines)
{
ofstream ofs(file);

if(!ofs.is_open()){
cout << "コピー先ファイルを開けない" << endl;
exit(EXIT_FAILURE);
}

vector<string>::iterator i = lines.begin();

while(ofs.good())
{
ofs << *i;

if(++i == lines.end())
break;

ofs << endl;
}

if(!ofs.good() && !ofs.eof())
{
cout << "書き込み途中でエラー" << endl;
ofs.close();
exit(EXIT_FAILURE);
}
}

391 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 01:39:45 ]
while (!feof()) {}
と同じ匂いを感じる。

ところで、
while (...) {
 string str;
 ...
}
より
string str;
while (...) {
 ...
}
の方が、コンストラクタとデストラクタが毎回走らない分、コスト的には良いよね?
でも、スコープを限定した方が可読性等の面からは好ましいよね?
どっちが良いのかな。

392 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 01:44:22 ]
その辺を言い出したらvectorから見直しだけどな。

393 名前:デフォルトの名無しさん [2009/03/16(月) 02:11:37 ]
>>391

{string str; while(...){...}}

394 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:26:56 ]
for(string str; ifs.good();)

395 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:36:54 ]
初期化がループに依存しないならコンパイラが良きに計らってくれると思うよ。

396 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 02:40:10 ]
getline(,)後!ifs.good()でも1回push_backしちゃうのはマズくないか。

397 名前:デフォルトの名無しさん [2009/03/16(月) 07:38:25 ]
VC++9での質問です。

あるライブラリをインクルードする必要があるのですが、
ソース中に #pragma comment(lib, "ライブラリ名") と書くと、LNK2005のエラーが出ます。でも、
プロジェクト→プロパティ→リンカ→追加のライブラリ
のところに「ライブラリ名」を書くとLNK2005は出なくなりコンパイルできます。
リンクの順序が関係してるのかと思ったのですが、よくわかりません。
どういう基準で方法を選べばいいですか?




398 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 07:41:35 ]
>>397
ライブラリのパスを通せばいいと思う

399 名前:デフォルトの名無しさん [2009/03/16(月) 07:50:49 ]
>>398
ありがとうございます。
ライブラリは見えてます。LNK2005は、同じライブラリを複数回リンクしようとした、
というエラーみたいなのです。自分の場合、
unsigned int *a = new unsigned int(100);
みたいな行がエラーになります。でもLNK2005が出ないやり方でリンクすると
この行も問題なくコンパイルされます。

書いてて思ったのですが、追加のライブラリのところにライブラリ名を書くと、
Visual Studioがリンクの順序を勝手に調整してくれるんですかね?


400 名前:デフォルトの名無しさん [2009/03/16(月) 13:38:45 ]
あるテーブルより、KOJIN_ID(数値型8桁)を一旦ホスト変数H_KOJIN_IDに入れ
それを11桁の文字型として出力しなければいけないのですが(余った桁はスペースで埋める)
下記のようにsprintf関数を使ってH_KOJIN_IDから、ファイル書き出し用構造体outの項目KOJIN_IDに
セットするときに、現状のままだと余った桁に0が入ってしまいます。

データセット部
sprintf(out.KOJIN_ID,"%11.11ld",H_KOJIN_ID);

余った桁に半角スペースが入るようなsprintf指定方法はありませんか?


401 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 14:41:57 ]
>>399
もしかして複数ファイルに分けてる?
スタティックライブラリの関数名がダブってるような気がする

402 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 14:44:55 ]
>>400
いってる意味がよく分からないけど
%11ld または %-11ld でいいのかな?

403 名前:デフォルトの名無しさん [2009/03/16(月) 16:44:14 ]
400です。
おかげさまで解決です。

404 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 16:54:03 ]
おかげさまってマルチでよそで答えもらっただけだろ。

405 名前:デフォルトの名無しさん [2009/03/16(月) 20:22:15 ]
std::cinで矢印キーの入力を取得することはできますか?


406 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 20:29:07 ]
質問です
WM_NCHITTESTをフックしたいのですが
SetWindowsHookEXの中のどの項目ならフックできるでしょうか?

407 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 22:16:04 ]
>406
>The WM_NCHITTEST message is sent to a window when the cursor moves
より、このメッセージは Send される。
従って WH_CALLWNDPROC か WH_CALLWNDPROCRET だが、いずれもメッセージを調べるだけで変更することはできない。
別途処理したいならサブクラス化とかが必要。



408 名前:デフォルトの名無しさん mailto:sage [2009/03/16(月) 22:17:02 ]
っつーか、Win32API質問箱の管轄だな。

409 名前:406 mailto:sage [2009/03/16(月) 22:53:13 ]
>>407
ありがとうございます。
メッセージの変更ができなかった謎も解けました。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef