【初心者歓迎】C/C++室 Ver.75【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2011/03/04(金) 15:00:26.99ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.74【環境依存OK】
http://hibari.2ch.net/test/read.cgi/tech/1289292155/
◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)
0002デフォルトの名無しさん
2011/03/04(金) 16:55:06.860004デフォルトの名無しさん
2011/03/04(金) 18:30:23.82/ `\
// _,. . -―-. . _ ヽ\
/ /イ´: : : : : : : : : : : `:.、 \
∠_ / : : ,イ:人: : : : :人 : : : : \ \
∠: : : :/斗ト-\/ 弋ト、: : : : ;ゝ-´
V: /! __ __ ト、: :./ ここは烏賊娘の部屋でゲソ〜
|V_:ハ、'⌒゙ , ⌒ヽ ,ハ、�Y
|: {〈〈} 、 , {リ〉リ:{
/: ∧ \  ̄ / ∧:ヘ
. /: / : \ )ー--‐ '( ,.イ:ハハ
/: ∧: :(´⌒ Y《ー ‐》Y ⌒゙): : } ハ
. /: / :∧:/` チ ゙《 》 乂 ´\:∧: :.|
. //l :// ./ V ヽ \V: \
. /: / .|/´ /!______.∧ `ヽ: : \
 ̄ ̄ ̄ ̄ { /: し) (⌒ヽソ人 } ̄ ̄ ̄ ̄
`ー' `ー' `ー' `ー '
0005デフォルトの名無しさん
2011/03/04(金) 22:42:00.01http://en.w3support.net/index.php?db=so&id=335369
0006デフォルトの名無しさん
2011/03/05(土) 02:12:29.280007デフォルトの名無しさん
2011/03/05(土) 05:52:54.540008デフォルトの名無しさん
2011/03/05(土) 05:56:19.13静的なテーブルを使うようなものはいくらでもある。
各種構文解析機、文字コードを扱うもの等。
0009デフォルトの名無しさん
2011/03/05(土) 09:06:25.77言語の問題というよりマルチタスク寄りの問題だろう
その手の本を読んだ方が良い
0010デフォルトの名無しさん
2011/03/05(土) 09:09:47.47読めば理解できる
0011デフォルトの名無しさん
2011/03/05(土) 10:18:48.680012デフォルトの名無しさん
2011/03/05(土) 12:51:00.270013デフォルトの名無しさん
2011/03/05(土) 13:24:14.79template<typename T> struct static_mutex { static mutex unko_lock; };
template<typename T> mutex static_mutex<T>::unko_lock;
template struct static_mutex<void>;
→static_mutex<void>::unko_lockで同期する。
0014デフォルトの名無しさん
2011/03/05(土) 14:01:24.55cppに
Singleton
_declspec(selectany)
前スレで答えで出てるじゃん
0015デフォルトの名無しさん
2011/03/05(土) 14:04:32.130016デフォルトの名無しさん
2011/03/05(土) 14:18:46.370017デフォルトの名無しさん
2011/03/05(土) 14:28:05.69どういうこと?初期化さえされてしまえば大丈夫な気がするけど
0018デフォルトの名無しさん
2011/03/05(土) 15:19:10.41Singletonはそれだけじゃマルチスレッドの初期化ができない。
ファイルスコープに定義することでmain前にシングルスレッドで初期化し、
selectanyでDLL間/DLL内の多重定義を抑制する。
0019デフォルトの名無しさん
2011/03/05(土) 15:39:14.340020デフォルトの名無しさん
2011/03/05(土) 19:58:51.12http://www.boost.org/doc/libs/1_46_0/doc/html/thread/synchronization.html#thread.synchronization.once
0021デフォルトの名無しさん
2011/03/06(日) 04:55:23.06それに必要なonce_flagがDLLとアプリで両方定義されたら元の>>976は解決
できないんじゃ?
>>19
CPPとSingletonと>>13のtemplateは言語内の話だよね。>>976はモジュール間
の話だから、言語内にもDLL間にも働くdeclspecでいい気がするが
0022デフォルトの名無しさん
2011/03/06(日) 14:30:00.310023デフォルトの名無しさん
2011/03/07(月) 12:04:49.32ポインタ関係なのですが、int*やdouble*やvoid*型はサイズなのに、どこにその型の情報を保存しているのですか?
それとも、コンパイル時にエラーを出すだけで、プログラム実行時には区別されていないんでしょうか?
002423
2011/03/07(月) 12:10:07.71サイズは一緒なのに、どこにその型の〜
です
0025デフォルトの名無しさん
2011/03/07(月) 12:24:20.440026デフォルトの名無しさん
2011/03/07(月) 12:38:24.570027デフォルトの名無しさん
2011/03/07(月) 12:57:48.75無いものと思ったほうがいいですが
C++でRTTIを有効にすると、ある程度の実行時型情報は利用できます
ただし、以下のようなコードで取れる型名は完全に実装依存です
VC++では char *, int *, struct _iobuf *... のようになりますが
g++では Pc, Pi, P9_sFILE64... のようになります
#include <cstdio>
#include <iostream>
#include <typeinfo>
using namespace std;
int main()
{
char *s = "hi";
int *n = 0;
cout << typeid(s).name() << endl;
cout << typeid(n).name() << endl;
cout << typeid(stdin).name() << endl;
cout << typeid(fopen).name() << endl;
}
002823
2011/03/07(月) 12:58:33.41すっきりしました
0029デフォルトの名無しさん
2011/03/07(月) 13:02:15.08サイズが一緒なのは、ポインタの実体は32ビット(64ビットOSなら64ビット)の
メモリ領域でしかないから。
そこに実データが存在するメモリアドレスが格納されてるわけだ。
で、コンパイル時は型がわかるから、言語仕様として出来ない暗黙キャストは怒られる。
試しに値を代入したfloat型変数のポインタを、無理矢理int型ポインタにreinterpret_castして
int型として値を取り出すと、floatとして代入された値の32ビット浮動小数点フォーマットのビット表現を、32ビット整数として得ることができる。
0030デフォルトの名無しさん
2011/03/08(火) 00:57:38.010031デフォルトの名無しさん
2011/03/08(火) 03:02:40.28あるのですが、計算結果をファイルに書き込みたいのですが、char型の配列
に変換できずに困っています。I[i]=salt%256;salt=(salt>>8);とやっても
出来ませんでした。ZZ型をそのまま書きこむ方法があればいいのですが、
内部でどのような処理をしているのかが解りません。どなたか解る人が
いたら教えてください。よろしくお願いします。
0032デフォルトの名無しさん
2011/03/08(火) 03:30:14.77文字列にしたいならstd::ostreamにぶち込めばいいでないの
0033デフォルトの名無しさん
2011/03/08(火) 06:55:49.220034デフォルトの名無しさん
2011/03/10(木) 22:54:38.27debugout( .... ); とかして
....部はprintfの()の中の書式
ソース名(debugoutソース行番号) xxxx
xxxは書式展開部
ってなふうに出力するC/C++両方で使えるコード作ってください
0035デフォルトの名無しさん
2011/03/10(木) 23:06:55.650036デフォルトの名無しさん
2011/03/10(木) 23:30:04.39http://codepad.org/f0Czgp8j
003734
2011/03/11(金) 00:03:35.81#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <tchar.h>
#include <stdarg.h>
#undef OutputDebugString
#define OutputDebugString printf
struct Debugout
{
Debugout(const _TCHAR* filename, int line);
void operator()(const _TCHAR* fmt, ...);
_TCHAR buf[512];
};
003834
2011/03/11(金) 00:04:24.19{
_sntprintf( buf, 255, TEXT("%s(%d): "), filename, line);
}
void Debugout::operator()( const _TCHAR * fmt, ... )
{
_TCHAR msg[256];
va_list ap;
va_start( ap, fmt);
_vsntprintf( msg, 255, fmt, ap);
va_end(ap);
_tcscat( buf, msg );
OutputDebugString(buf);
}
#define debugout Debugout(__FILE__, __LINE__)
003934
2011/03/11(金) 00:05:45.99{
TCHAR* neko = TEXT("nyan");
int i = 10;
debugout( TEXT("neko %s, %d\n"), neko, i );
return 0;
}
だれかCバージョン作って
0040デフォルトの名無しさん
2011/03/11(金) 01:49:38.66void Debugout( const _TCHAR * fmt, ... )
{
_TCHAR msg[256];
va_list ap;
va_start( ap, fmt);
_vsntprintf( msg, 255, fmt, ap);
va_end(ap);
OutputDebugString(msg);
}
#define debugout Debugout( TEXT("%s(%d): "), __FILE__, __LINE__), Debugout
004134
2011/03/11(金) 02:14:05.28どうも。でも、それ最初考えたんです
それOutputDebugStringが二回になるから
表示が
PID/xxx.exe FILE(LINE):
PID/xxx.exe msg
や
PID/xxx.exe FILE(LINE) PID/xxx.exe msg
とかの表示になるんです. 見にくい
こう表示して欲しい
PID/xxx.exe FILE(LINE) msg
0042デフォルトの名無しさん
2011/03/11(金) 02:20:14.77静的変数として buf を用意すれば楽にいけるんじゃね?
0044デフォルトの名無しさん
2011/03/11(金) 08:03:58.11void Debugout( const _TCHAR* filename, const int line, const _TCHAR * fmt, ... )
{
_TCHAR msg[256];
_TCHAR buf[512];
va_list ap;
va_start( ap, fmt);
_vsntprintf( msg, 255, fmt, ap);
va_end(ap);
_sntprintf( buf, 255, TEXT("%s(%d): "), filename, line);
_tcscat( buf, msg );
OutputDebugString(buf);
}
#define debugout( ... ) Debugout( __FILE__, __LINE__, __VA_ARGS__ )
0045デフォルトの名無しさん
2011/03/11(金) 17:18:08.18inline int hoge(){
#ifdef HOGE
return 0;
#else
return 1;
#endif
}
こんな感じになっている場合、これをインクルードして
class fuga{
public:
int fuga1(); //このメソッド内で呼ぶhoge()から0を返してもらって
int fuga2(); //このメソッド内で呼ぶhoge()から1を返してもらう
}
という事は出来るでしょうか?
0046デフォルトの名無しさん
2011/03/11(金) 19:00:48.34fuga::fuga1()とfuga::fuga2()の定義を別のコンパイル単位にして
HOGEのdefineを変えてincludeすればいい
0047デフォルトの名無しさん
2011/03/11(金) 19:30:44.35template<int RET> inline int hoge(){
return RET;
}
hoge<0>();
hoge<1>();
とかでいいんじゃない?
004834
2011/03/11(金) 19:53:32.08>>42をもとに作ったC用
void Debugout( const _TCHAR * fmt, ... )
{
static _TCHAR msg[512];
size_t len;
va_list ap;
len = _tcslen(msg);
va_start( ap, fmt);
_vsntprintf( msg + len, sizeof(msg)/sizeof(msg[0]) - len -1, fmt, ap);
va_end(ap);
if( len ){
OutputDebugString(msg);
msg[0] = TEXT('\0');
}
}
#define debugout Debugout( TEXT("%s(%d): "), TEXT(__FILE__), __LINE__), Debugout
004945
2011/03/11(金) 22:06:39.04>>47
すみません、ライブラリには手を加えられないという前提が抜けていました。
説明不足になってしまい、申し訳ないです。
>>46
下記のような感じでやってみたんですが、私が何か思い違いをしているようで、上手くいきませんでした。
すみませんが、もう少し詳細をお聞かせいただけないでしょうか。
===Fuga.h===
#ifndef FUGA_H_INCLUDE_
#define FUGA_H_INCLUDE_
#include "Hoge.h"
class fuga
{
public:
Int fuga1();
Int fuga2();
};
#endif
===Fuga1.cpp===
#define HOGE
#include "Fuga.h"
int fuga::fuga1() {return hoge();}
===Fuga2.cpp===
#include "Fuga.h"
int fuga::fuga2() {return hoge();}
0050デフォルトの名無しさん
2011/03/11(金) 22:31:57.70template<int RET> inline int hoge_wrap(){
hoge();
return RET;
}
hoge_wrap<0>();
hoge_wrap<1>();
0051デフォルトの名無しさん
2011/03/12(土) 00:54:24.560052デフォルトの名無しさん
2011/03/12(土) 11:40:59.64単純にやると ODR 違反で未定義動作だと思われます。
0053デフォルトの名無しさん
2011/03/16(水) 00:51:16.72このコードでstrに格納される文字列データってリークしますか?
リークしません。プログラム内にかかれた文字列はコンパイル時に実行ファイル内に組み込まれるからです。
0055デフォルトの名無しさん
2011/03/16(水) 01:11:41.77嘘付いちゃいけないね
0056デフォルトの名無しさん
2011/03/16(水) 01:24:27.11ほう、どこが嘘なんですか?
文字リテラルは静的に確保されると思いますがね。
0058デフォルトの名無しさん
2011/03/16(水) 01:27:54.97質問内容を読んでないでしょ
リークしないか、という質問ですから、リークしない、と答えたまでですが、その過程のどこで「質問を読んでいない」と判断したのですか?
0060デフォルトの名無しさん
2011/03/16(水) 01:58:32.19strに格納される文字列データ≠プログラム内にかかれた文字列
いや、この場合、
str が指すポイント先のasciiz文字列=静的領域に確保された asciiz 文字列
でしょう。
0062デフォルトの名無しさん
2011/03/16(水) 02:46:51.16何で質問内容を自分に都合の良いように書き換えちゃうの?
え?リークするかしないかでしょう?
じゃあ、リークしないんじゃないですか?
「リークする」という言葉の定義があなたと私で違うのかもしれませんが。
0064デフォルトの名無しさん
2011/03/16(水) 03:14:19.61何で質問内容を自分に都合の良いように書き換えちゃうの?
0065デフォルトの名無しさん
2011/03/16(水) 03:14:44.970066デフォルトの名無しさん
2011/03/16(水) 03:16:02.49>自分のミスを指摘されても覚えてませんっていうアホが何言ってんだw
どっかで言われてますね
0067デフォルトの名無しさん
2011/03/16(水) 03:17:07.81>まともな反論とやらが今までにありましたか?例を示してください。
これは誰の発言?
0068デフォルトの名無しさん
2011/03/16(水) 03:23:03.880069デフォルトの名無しさん
2011/03/16(水) 04:28:23.53リークしません。プログラム内にかかれた文字列はコンパイル時に実行ファイル内に組み込まれるからです。
↓
リークしません。strに文字列が格納されるのではなく、strは文字列リテラルをポイントするだけだからです。
勿論、文字列リテラルはリークしません。
「そして、文字列リテラルは、実行ファイル内に組み込まれる存在です。」を追加してください。
0072デフォルトの名無しさん
2011/03/16(水) 07:46:53.60従って、態々説明することではない。尤も、変数の初期値が実行ファイルに組み込まれることを知らない人もいるようだがw
0073デフォルトの名無しさん
2011/03/16(水) 09:39:45.05>「そして、文字列リテラルは、実行ファイル内に組み込まれる存在です。」を追加してください。
こんな当たり前のこと、追加する必要ないだろう
0075デフォルトの名無しさん
2011/03/16(水) 13:24:13.3074 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
0076VBプログラマ
2011/03/16(水) 18:24:06.02RS232Cでマルチタスクで各ポートにアクセスするプログラムで、スレッド1はRS232CのCOM1、スレッド2はCOM2、スレッド3はCOM3のみをアクセスし、1つのポートに複数のスレッドからはアクセスしない。
Thread1Func,Thread2Func,Thread3Funcを同時にスレッドで実行させて、うまく通信できるものでしょうか?
誰かやったことある方いましたら教えていただけますよう、お願いします。 自分で試したいのですが、RS232Cが会社のPCにはありません。
---
Thread1Func()
{
CreateFile("COM1"..
SetCommState
WriteFile
ReadFile
:
}
---
Thread2Func()
{
CreateFile("COM2"..
SetCommState
WriteFile
ReadFile
:
}
---
Thread3Func()
{
CreateFile("COM3"..
SetCommState
WriteFile
ReadFile
:
}
0077デフォルトの名無しさん
2011/03/16(水) 18:48:25.630078デフォルトの名無しさん
2011/03/16(水) 18:50:10.22そうであれば結構重い気がするし、そうでないならメイン側とのI/Fを設計するのが厄介だと思う。
0079デフォルトの名無しさん
2011/03/16(水) 19:03:09.75何をしようとしているのかさっぱり分らんが大丈夫だ
008076
2011/03/16(水) 19:06:28.59>>77
>ハンドル破棄してないのが気になるけど通信自体はそれでできるんじゃね。
すみません。ハンドル破棄のCloseHandleを忘れました。
>>78
>でも、非同期に通信するスレッド作るのはいいけどそのスレッドは一通信毎に終了するのか?
>そうであれば結構重い気がするし、そうでないならメイン側とのI/Fを設計するのが厄介だと思う。
一通信毎に終了するのか、各スレッド内でループで回して、アプリケーション終了時に一斉クローズするのか悩んでます。
0081デフォルトの名無しさん
2011/03/16(水) 19:11:22.07以前にもいい加減なこと言う奴いたよな
0082デフォルトの名無しさん
2011/03/16(水) 19:32:26.02奴は、いい加減な上に、売名だから
0083デフォルトの名無しさん
2011/03/16(水) 19:46:27.27お前がコテハン付けとけ
0084デフォルトの名無しさん
2011/03/16(水) 20:11:40.64そういうときは自分からつけろ
0085デフォルトの名無しさん
2011/03/16(水) 21:16:08.49終
0086デフォルトの名無しさん
2011/03/16(水) 22:58:53.88void(^block)(int i)=^(int i){printf("%d\n",i);};
というソースをみたんだが,どういう書式?呼称とかある?
0087デフォルトの名無しさん
2011/03/16(水) 23:29:11.08積まれます。C で static な関数というのは、単に関数名をリンカに公開するかしないかだけの違いです。
0089デフォルトの名無しさん
2011/03/16(水) 23:47:13.35出てくるなカス
0090デフォルトの名無しさん
2011/03/16(水) 23:49:57.82必ず 「積まれます」 か?嘘つき
0091デフォルトの名無しさん
2011/03/16(水) 23:58:18.840092デフォルトの名無しさん
2011/03/16(水) 23:59:27.89荒らしだから、嫌われてる
そだった、そだった、賢いコンパイラのことを忘れていた。たとえば lsi-c なんかは積まれるとは限りませんね。
つhttp://hibari.2ch.net/test/read.cgi/tech/1295273862/
ふつー自分で紹介するか‥‥。
0095デフォルトの名無しさん
2011/03/17(木) 00:07:58.12そんなスレあったの知らんかったわw
0096デフォルトの名無しさん
2011/03/17(木) 00:09:38.02自分自身で荒らしと決め付けた相手をスルーできないなんて
自分は狂ってますと自己紹介してるようなもんだなw
0097デフォルトの名無しさん
2011/03/17(木) 00:23:07.620098デフォルトの名無しさん
2011/03/17(木) 01:05:35.57なんかウザコテがマシに見えて逆効果
0099デフォルトの名無しさん
2011/03/17(木) 01:12:25.03自演乙
0100デフォルトの名無しさん
2011/03/17(木) 01:38:19.72Objective C の Blocks では?
010176
2011/03/17(木) 03:05:27.450102デフォルトの名無しさん
2011/03/17(木) 19:13:47.67それをしたいためだけに>>53からのくだらないやり取りを自演してたのかと思って
>>98を書いてるのを見つけたときにはどうしようかと思った。
簡単に言うと>>99
0103デフォルトの名無しさん
2011/03/18(金) 14:18:36.12メソッドがオーバーライドされているかを比較するにはどうすればいいですか?
例えば以下のようなコードで
http://ideone.com/qpNgh
0104デフォルトの名無しさん
2011/03/18(金) 20:00:35.31if( typeid(*this) == typeid(A) )
0105デフォルトの名無しさん
2011/03/18(金) 20:34:12.23http://kitahei.cocolog-nifty.com/youyou/2007/08/foobar2000_9e74.html
をみながら*.vcprojを*.vcxprojに置き換えてやってみました
しかし
1>main.obj : error LNK2019: 未解決の外部シンボル "void __cdecl pfc::myassert(wchar_t const *,wchar_t const *,unsigned int)" (?myassert@pfc@@YAXPB_W0I@Z) が
関数 "protected: __thiscall service_factory_base::~service_factory_base(void)" (??1service_factory_base@@IAE@XZ) で参照されました。
1>main.obj : error LNK2019: 未解決の外部シンボル "bool __cdecl core_api::are_services_available(void)" (?are_services_available@core_api@@YA_NXZ) が
関数 "protected: __thiscall service_factory_base::~service_factory_base(void)" (??1service_factory_base@@IAE@XZ) で参照されました。
1>main.obj : error LNK2001: 外部シンボル ""public: static struct _GUID const componentversion::class_guid" (?class_guid@componentversion@@2U_GUID@@B)" は未解決です。
1>main.obj : error LNK2019: 未解決の外部シンボル "char const * __cdecl core_api::get_my_file_name(void)" (?get_my_file_name@core_api@@YAPBDXZ) が
関数 "public: virtual void __thiscall `anonymous namespace'::componentversion_myimpl::get_file_name(class pfc::string_base &)" (?get_file_name@componentversion_myimpl@?A0xbaa797a4@@UAEXAAVstring_base@pfc@@@Z) で参照されました。
1>main.obj : error LNK2001: 外部シンボル ""public: static class service_factory_base * service_factory_base::__internal__list" (?__internal__list@service_factory_base@@2PAV1@A)" は未解決です。
のようなエラーが出て躓きました
何がおかしいのでしょうか
0106デフォルトの名無しさん
2011/03/18(金) 20:35:11.56それを知ってどうしようというのかね。何か歪んだことをしてそうな気がする。
0107デフォルトの名無しさん
2011/03/18(金) 20:49:19.17ttp://www.hydrogenaudio.org/forums/lofiversion/index.php/t80853.html
0108デフォルトの名無しさん
2011/03/18(金) 21:25:30.33そうしたくなる時点で設計としてなにか問題があると思うけど
それはともかく、標準の範囲では無理じゃねーの
移植性とかそういうの全部捨ててコンパイラの内部実装ベッタリの
アセンブラで書けば、書けるだろう
0109デフォルトの名無しさん
2011/03/20(日) 00:50:24.26ありがとうございます
とりあえずできました
0110デフォルトの名無しさん
2011/03/22(火) 21:54:06.04template<typename T> T::a_type aaaaaa(T t){return t.a(); }
0111デフォルトの名無しさん
2011/03/22(火) 22:02:48.09正: typename T::a_type
0112デフォルトの名無しさん
2011/03/22(火) 23:02:30.78int a_;
typedef int a_type;
int a(){return a_;}
};
>>110
struct Hoge {
int a_;
typedef int a_type;
int a(){return a_;}
};
template<typename T> typename T::a_type aaaaaa(T t){return t.a(); }
int main(){
Hoge h;
h.a_ = 100;
cout << aaaaaa<Hoge>(h) << endl;
return 0;
}
いけるけど?
0114デフォルトの名無しさん
2011/03/24(木) 01:40:24.08当時そんなもんあったわけないし、msvcr71.dllは32bit版だけだったと思うけど……
64bit版のJavaのbinディレクトリにあるし、よくみたらSxSの下にあったわ
もしかしてすでにVC6ランタイムの皮かぶってるだけの別物?
64bit版のmsvcrt.dllにリンクするプログラムってどうやって作ってるんだろう
0115デフォルトの名無しさん
2011/03/24(木) 02:21:20.730116デフォルトの名無しさん
2011/03/24(木) 02:52:38.79ごめんちょっと意味が分からない……
VC6には64bitターゲットのコンパイラは無かったし
最近のVCではMSVCRT.DLLとは別のCランタイムとリンクするので
どうやっているのだろう?という素朴な疑問です
VC6のヘッダも多分x86ベッタリでそのまま使えないだろうし
0117デフォルトの名無しさん
2011/03/24(木) 08:40:20.62リンクする。
Windows SDK 7.1についてるヘッダをインクルードしてSDK 7.1の
64ビット版インポートヘッダ(.lib)でビルドしておけばよいだけ。
0118デフォルトの名無しさん
2011/03/24(木) 09:51:57.710119デフォルトの名無しさん
2011/03/24(木) 10:07:22.80あーWindowsSDKにはついてるのか、サンクス
>>118
VS2003はmsvcr71.dll
VS2005はmsvcr8.dll
VC6の頃とはABI互換性が無いので名前も変わってる
0120デフォルトの名無しさん
2011/03/24(木) 12:15:43.25環境はUbuntu10.10、gcc4.4.5です。
0121デフォルトの名無しさん
2011/03/24(木) 12:47:25.750122117
2011/03/24(木) 19:28:30.70Visual Studio 2010 Proならプラットフォームに「x64」を指定する。
ExpressならWindows SDK 7.1を入れて、プロジェクトのプロパティー
の「プラットフォームツールセット」にSDKを指定する必要あり。
コマンドラインからビルドしない限り.libを指定する必要は無い。
0123デフォルトの名無しさん
2011/03/24(木) 20:05:23.14いやVS2010で普通にx64でビルドすると、AMD64版のmsvcr100.dllにリンクされない?
0124117
2011/03/24(木) 23:11:37.40細かいことを言うな。Platform SDKのmsvcrt.lib(64ビット版)とリンクすんだよ。
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5
dumpbin /imports msvcrt.lib
cl.exe /MD test.cpp msvcrt.lib
0125デフォルトの名無しさん
2011/03/25(金) 19:12:09.18認証する機能をつけたいのですがうまくいきません。秘密鍵の計算方法が
正しいかどうかもわからないので公開します。lkbを呼び出すとループの
値が0にリセットされて無限ループになります。機能は動いたはずなのに
今朝動かしたら動かなくなっていました。下にソースのアドレスを書きます。
わかる人がいたらよろしくお願いします。
http://codepad.org/55oSSY2H
0126デフォルトの名無しさん
2011/03/25(金) 21:47:06.370127デフォルトの名無しさん
2011/03/25(金) 21:49:10.47まず秘密鍵、といいますが、暗号はなにか方式教えてください。
ハッシュ、といいますが、ハッシュの方式を教えてください。
話はそれからだと思います。
0128デフォルトの名無しさん
2011/03/25(金) 22:22:34.08bool sex = false;
for (〜;〜;〜) {
for (〜;〜;〜) {
sex = true;
}
if ( sex ) break;
}
とするべきか、
for (〜;〜;〜) {
for (〜;〜;〜) {
goto SEX;
}
}
SEX:
とするべきか。
手続き型言語にgotoは不要だが、この場合はgotoを使った方が良い希ガスる。
別に可読性がそこまで下がっているようにも見えないし。
私ならば可読性を重視して後者をとります。
0130デフォルトの名無しさん
2011/03/25(金) 22:29:21.26thx
0131デフォルトの名無しさん
2011/03/25(金) 22:38:00.02おれなら
C++ではthrow
Cなら関数
だな
0132デフォルトの名無しさん
2011/03/25(金) 22:45:31.72オリジナルのストリーム暗号です。
オリジナルのハッシュ関数です。
0133デフォルトの名無しさん
2011/03/25(金) 22:48:10.67入れ子の片方のforがbreakしてないから等価じゃないな
0134デフォルトの名無しさん
2011/03/25(金) 22:53:25.20同時に、例外を使ってはいけないとされるケースだ。
0135デフォルトの名無しさん
2011/03/25(金) 23:08:30.720136デフォルトの名無しさん
2011/03/25(金) 23:54:04.13俺は当然 多重ループからの脱出はgotoを使う。
多重ループがまずいってのは耳タコです。
0137デフォルトの名無しさん
2011/03/26(土) 08:19:59.51スレッドセーフについて調べていると目についたのですが、ググってもなかなかでてきません。
わずかな情報から察するに、例外によって本来される処理が行われない=例外セーフでない、でしょうか?
例外セーフでないコード:
int func() {
int *p = new int(1);
try {
throw exception();
} catch(exception &e) {
return -1;
}
delete p;
return 0;
}
0138デフォルトの名無しさん
2011/03/26(土) 09:21:19.360139デフォルトの名無しさん
2011/03/26(土) 09:31:38.69ありがとうございます。
0141デフォルトの名無しさん
2011/03/26(土) 17:36:45.59今更だが、俺はエンドフラグ(主にintと型数値にしている)派だ。
どんな理由で終了したかデバッグ時に一目で分かるのと。
終了する意味が2通り以上ある場合がありので。
エンドコードで統一している。
いっとくが、goto先2ヶ所は、邪道だ!
0142デフォルトの名無しさん
2011/03/26(土) 17:57:30.83ループごとにメソッドにしてやればgoto使わなくてすむんじゃないのかな?
0143デフォルトの名無しさん
2011/03/26(土) 17:57:50.76UI含めたマルチスレッドプログラミングを始めてやって、
考え方に躓いています。
(Win32bit VS2010 C++ SDK ATL/WTL 使いです。)
作ってるのは、メインウィンドウで特定のオペレーションがあった場合、
キャンセル可能な処理中ウィンドウを表示するという一般的なものですが、
どのように考えるのが一般的ですか??
とりあえず現在、
<メインウィンドウ>
・処理中ダイアログを生成
・スレッド生成
・時間のかかる処理
・ダイアログクローズメソッド呼び出し(その後スレッドが自動的に終了)
・ダイアログを破棄
<スレッド>
・ダイアログをモーダルで表示
・WM_TIMER で処理中アニメーションしながらキャンセル待ち
・メインウィンドウから進捗メソッドが呼ばれたらプログレスバーを更新
みたいにやっているのですが、オブジェクト指向的にどうもスッキリせず、またインスタンスをスレッドに
渡していることがOS上タブーなようで。。。また、親ウィンドウの HWND も正しく取れません。(スレッドが違うから?)
皆さんは普段どのように設計していますか?
・・・メインウィンドウでダイアログを生成/モードレス表示して、
スレッドで時間のかかる処理をして、そのスレッドの完了をメインウィンドウで待つのかな・・・
そうすると、ダイアログのメッセージループは誰が処理するの・・・??もう1つスレッドが要る??
教えてエロい人!!!
0144デフォルトの名無しさん
2011/03/26(土) 18:16:15.48ここもスレ違い。
http://msdn.microsoft.com/ja-jp/library/cc410690.aspx
http://msdn.microsoft.com/ja-jp/library/cc364825.aspx
http://support.microsoft.com/kb/71450/ja
これ読んでも分からないようなら
Win32スレに行ったほうがいい
0145デフォルトの名無しさん
2011/03/26(土) 18:29:18.89・メイン画面とダイアログはメインスレッドにする
処理のみサブスレッド化
・ダイアログでタイマー回して処理サブスレッドの状況を表示
・とりあえずメイン画面はサブスレッドに直接アクセスしないよう
作ってみる
画面がいくつあろうとできる限りUIスレッドは一つにした方がよい。
ただエクスプローラーの様に一つの画面が処理待ちで固まると
他の画面も固まるため、どうしてもという場合だけUIスレッドを複数にする
0146143
2011/03/26(土) 19:04:46.11すれ違いスマソ。
モードレスダイアログとウィンドウ関連の操作はできるんだけど、どこでやるべきとか、
そういう過去の経験からのノウハウを教えて頂けると嬉しいです。
一応 >>143 のでも動くは動くんですが、やってはいけない設計方法らしいので・・・。
>>145
成程、基本的にUIスレッドは1つにするものなんですね。
確かに、SendMessage() 関連のデッドロック話は聞いたことがあります。
基本処理をスレッド(ワーカースレッド)として、そのスレッドとの
やりとりを WM_TIMER 起因でやればよさそうですね。
とりあえずその設計でもう一度組みなおしてみます。
0147デフォルトの名無しさん
2011/03/26(土) 21:30:10.76わかっている2つのバグが解決できません。
1.同じ値をハッシュにかけているのに繰り返すたびに値が変わる
2.呼び出しを1回限定にすると無限ループになる
何が悪いのか原因がわかりません。
ソースをアップするのでよろしくお願いします。
http://codepad.org/15hfT9HS
0148デフォルトの名無しさん
2011/03/26(土) 23:36:09.62上の方でも書いてた人だろうけど悪い事言わないから独自ハッシュと暗号なんて窓から投げ捨てるべきだと思う。
それはそれとして詳細追っかける気はないけど挙動からするとグローバル変数とか何らかの初期化ミスっぽいからその辺調べてみたら?
0149デフォルトの名無しさん
2011/03/27(日) 01:40:11.69独自の暗号は思うほど強くないから危険だって
私もなんかの本で読んだ。
0150デフォルトの名無しさん
2011/03/27(日) 03:09:35.11vector<char> data;//データは入っています
std::ostringstream oStrStream;
boost::iostreams::filtering_streambuf<boost::iostreams::output> filter;
filter.push( boost::iostreams::gzip_decompressor() );
filter.push( oStrStream );//☆
std::ostream oStream( &filter );
oStream.write( &data[0], data.size() );
std::cout << oStrStream.str();
とすると複合化はされるのですが最後のほうが切れてしまいます
しかし☆マークの行をfilter.push( std::cout );のようにして直接出力するとすべて表示されます
ostringstreamはサイズに限界でもあるのでしょうか
ストリームを使ったことがあまりないのでもっと他に間違いがあるのでしょうか
0151デフォルトの名無しさん
2011/03/27(日) 10:25:33.39oStream.flush() してみればどうかな。
0152デフォルトの名無しさん
2011/03/27(日) 11:34:31.87しかしそれも実装次第。うまくいけばお慰みです。
0153デフォルトの名無しさん
2011/03/27(日) 13:06:11.90ありがとうございました
すべて出るようになりました
0154デフォルトの名無しさん
2011/03/27(日) 15:34:29.59おまえおめでたい奴だな
自分のコードのバグも解析できないくせに何が安全だ
お前が数学者ならプロの技術者に依頼しろよ
お前が技術者ならさっさと辞めてそのたいそうな理論を外注しろ
そうすればみんな幸せ
車輪のオナニー再発明なら頑張ってデバッグしな坊や
0155デフォルトの名無しさん
2011/03/27(日) 15:49:48.50核心を突きすぎ
だいたいこんなところで聞いてる奴の言っていることだからな
0156デフォルトの名無しさん
2011/03/27(日) 15:51:32.150157デフォルトの名無しさん
2011/03/27(日) 17:04:51.06const std::string &s = "foo";
0158デフォルトの名無しさん
2011/03/27(日) 17:19:52.18const参照はなんか特殊だってばっちゃが言ってた
0159デフォルトの名無しさん
2011/03/27(日) 20:29:07.01"こういう内容のは怪しいと思え"とかがあれば、本を選ぶ時の参考にしたい
0160デフォルトの名無しさん
2011/03/27(日) 20:36:06.460161デフォルトの名無しさん
2011/03/27(日) 20:36:39.800162デフォルトの名無しさん
2011/03/28(月) 03:03:42.58いや、確か以前それをした外人がいるはずだ。
しかし再発明出来たとしても同じ結末を迎えるのならやめたほうがいいものだったはずだ
0163デフォルトの名無しさん
2011/03/28(月) 16:52:18.00VSが欲しいなあとおもっていたんですが、StandardEditionは2010からなくなったとの事でProfessionalEditionを買うしかないのですが、
そこまで高いものは買いたくないんです。で、VSStandardEditionはというと、オークションなどでも高値で売られています。
でも、近くのPCショップでVS2005を売ってるところを発見したのです。
今はVC6.0を使っているのですが、VS2005を買うと大きなメリットとかありますか?
使用目的は、Win32APIとMFCです。
自分にとっては、2万というのはけっこうな大金なので、買おうか迷っています。
良いメリットがあるなら、教えてください。
0164デフォルトの名無しさん
2011/03/28(月) 17:18:50.73まずはVS2010Express入れてみたら
0165デフォルトの名無しさん
2011/03/28(月) 17:26:50.62Express Editionはもう入れているんですが、
Standard Editionで、良い機能とかあるなら買いたいです。
あと、Express Editionには、MFCがないので・・
0166デフォルトの名無しさん
2011/03/28(月) 17:55:16.35俺もEEだから実際に使ったことはないけど紹介見る限り結構開発に便利そうなのもあった
0167デフォルトの名無しさん
2011/03/28(月) 18:04:37.76.rc をテキストエディタで作成/編集するのは泣ける
0168デフォルトの名無しさん
2011/03/28(月) 18:10:13.89あーそういうことか
.NETに関してはVS2005(.NET2.0)じゃお話にならないけど
VC++ならそれほどでもないかな
どうしてもC++0x系の機能が欲しいんなら駄目だけど
ただVS2005, VS2008はCランタイムがサイドバイサイド(SxS)化されてて
扱いがちょっと面倒くさい
VS2010でCランタイムに関してSxSが廃止されて元に戻った
(manifestも要らなくなった)んで、VS2010のが楽
この二世代は、この点で、ある意味黒歴史って感じだ
0169デフォルトの名無しさん
2011/03/28(月) 18:11:35.44リソースエディタはフリーでもあるでしょう
勿論UI要素をクリックしてMFCのイベントハンドラを記述するみたいな
連携は望むべくもないけど
0170デフォルトの名無しさん
2011/03/28(月) 18:15:42.330171デフォルトの名無しさん
2011/03/28(月) 18:16:01.68そういう連携は期待していないんで…
フリーであるのか。 探してみよう
0172デフォルトの名無しさん
2011/03/28(月) 18:33:13.120173デフォルトの名無しさん
2011/03/28(月) 18:39:38.02ただ、MFCは2010のSP1ではDirect2Dサポートが加わったりしてるようだし
一応進化し続けてると言えるのでは
WTLはもうとまっちゃったからなー
0174デフォルトの名無しさん
2011/03/28(月) 19:31:57.42あるのはVSのスレだろ
VC(MFC)しか必要ないからVSは目に入らなかったんじゃないか?
0175デフォルトの名無しさん
2011/03/28(月) 20:29:47.480176デフォルトの名無しさん
2011/03/28(月) 20:32:13.45MFCメインみたいだけど、VC6からVS2005だとあまり変わらないかもね
VS2008SP1でのリボンUIサポート、VS2010SP1でのD2Dサポート位しか大きい変化って記憶にないな
0177デフォルトの名無しさん
2011/03/28(月) 21:41:47.21あと安定性という点で、可能なら2008以降の方がいいと思う。
0178デフォルトの名無しさん
2011/03/29(火) 17:26:55.770179デフォルトの名無しさん
2011/03/29(火) 17:32:33.871200個のものを、70個の箱(配列)に分けつつ、
・1箱目が一番多く、徐々に減って、70個目は1個しかない
・1箱目が一番多く、徐々に減って、70個目は1箱目の半分しかない
等という事を実現したいのですが、こうしたプログラムの解説サイトをどなたかご存知でないでしょうか?
0180デフォルトの名無しさん
2011/03/29(火) 18:04:26.24台形の面積を求めるのと買わんない>>179
(上底+下底)×高さ÷2
これが分かればいけるでしょ
面積は1200平方、高さは70、上底は1、下底は1より大きい
面積は1200平方、高さは70、上底はx、下底は2x
0181179
2011/03/29(火) 18:39:59.90ありがとうございます。最初解りませんでしたが
理想に近い結果を得る方法がわかりました。スレ違い失礼しました&ありがとうございました。
0182デフォルトの名無しさん
2011/03/29(火) 22:48:02.82ロードアベレージが1超えてなければ100%じゃないんじゃないのかな
0183デフォルトの名無しさん
2011/03/29(火) 23:45:35.31vmstatコマンドで、idleの値を見るのは?
0184デフォルトの名無しさん
2011/03/30(水) 04:12:55.31プログラムが落ちるのですが、これを回避するすべはないでしょうか?
走査するくらいしか思いつきません
0185デフォルトの名無しさん
2011/03/30(水) 04:34:14.880186デフォルトの名無しさん
2011/03/30(水) 04:44:19.26iterator を持ってる間は erase() しない。
erase() した iterator はすぐ捨てる。
0187デフォルトの名無しさん
2011/03/30(水) 05:32:12.44ありがとうございます
無効なイテレータを持ち続けないようにします
0188デフォルトの名無しさん
2011/03/30(水) 07:03:21.250189188
2011/03/30(水) 07:56:32.96送るための日付をHttpQueryInfoから文字列で取り出す方法が分かりません
またこのヘッダを送るというのは"If-Modified-Since:日付"をInternetOpenUrlの引数で渡せばいいのでしょうか
質問が変わりましたがよろしくお願いします
0190デフォルトの名無しさん
2011/04/02(土) 22:26:44.47Cをそこそこやっています。C++は少しかじった程度です。
VC++を使っています。
今までコンソールベースのプログラムしか書いてこなかったのですが、
ボタンやテキストボックス等があるグラフィカルなものを作りたいと思っています。
「win32アプリケーション」というのを勉強するのが良いのでしょうか?
それとも、Javaが良いでしょうか?
それと、もし良い本があれば教えてください。
0191デフォルトの名無しさん
2011/04/02(土) 22:27:37.380192デフォルトの名無しさん
2011/04/02(土) 22:28:38.99マルチしてんじゃねえ、このグズやろう。
0193デフォルトの名無しさん
2011/04/02(土) 22:31:59.67bind系じゃないと実装できねぇよ、的な事って何かある?
0194デフォルトの名無しさん
2011/04/02(土) 22:43:51.02|: / : : : / : : : : :.i: : : : |: : : :|: : : |: : : i '
: :|: : : : |: : i: : : :|: : : /i|: : :|:| : : :|: : : | |
: :|: : : : |: :.|:斗 十‐/ i|: :∧-‐ト|: : : | |
: :|: : : : |イ|: :|:/ |:/ |:/ |ハ: : |: : : | \_,ノ
: :|: : : : | レヤ示ト rテv|:./|: : : :|
ヽ|: : : : |/{:::::::i } トイ レ: :|/|/ 関東地方
( |: : : : 代c::ノソ レリ |: : : : | 東北地方 北海道地方
.〈.|: : : : |x`¨ 、¨x.|: : : i:| にいる
\|i: : : :| , /|: : : i:| すべての 愛すべき 国民へ 告ぐ
∨リ\: :iト 、 `´ ィ |: : /|リ
‐┴―\|- 〈 >rァ 爪|V |/
:::::::::::::::::::::::ヽ \ リ
::::::::::::::::::::::::__\
:::::::::::::::/ ::r――‐へ rっr‐-、_
:::::::::/ ::// ∧. | ̄ ̄ ̄| | | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄|..
:::/ ::/ / ヽ|. L|_|_ト' |
/ ::::/ / \ ただちに 逃げろ |
. :::/ |/ | |.
0196デフォルトの名無しさん
2011/04/03(日) 10:09:09.66忍法帖は名前欄に
!ninja
とすれば出てくる。
って最近知った。どれどれ
●だか買うと最終書き込みから5分経過すればレベルが一つ上がるらしい。
そうじゃない人は24時間経過すればレベルが一つ上がるらしい。
あと、cookieの設定がうまくいってないとレベルが上がらないらしいから、
何日たってもレベル0,1の場合はHap cookieの設定をチェックだ。
レベル10以上になると
Lv=NN,xxxP『T』
ってなってスレ立てできるようになるらしい。
0204デフォルトの名無しさん
2011/04/03(日) 18:28:18.74これが民度の違いか
0206デフォルトの名無しさん
2011/04/05(火) 15:37:41.75|や&で演算する方法をよく見ますが、32個とかしか表現できませんよね?
極端な例で128個の組み合わせを管理しようとすると、
どのような方法になるのでしょうか?
0207デフォルトの名無しさん
2011/04/05(火) 15:51:56.060208デフォルトの名無しさん
2011/04/05(火) 18:57:22.40何でそんなにビットフラグが好きなんだ
0209デフォルトの名無しさん
2011/04/05(火) 19:01:13.710210デフォルトの名無しさん
2011/04/05(火) 19:50:43.884/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
0211デフォルトの名無しさん
2011/04/05(火) 21:15:49.69++しつつ!= iterator.end()をチェックする方法以外にありますでしょうか?
よろしくお願いします。
0212デフォルトの名無しさん
2011/04/05(火) 21:42:09.53std::vector なら size() で先に分かるじゃないか
0213デフォルトの名無しさん
2011/04/05(火) 23:26:40.96vector<char>::iteratorの位置が不定なので、size()の情報を元に算出する方法がわからないのですorz
0214デフォルトの名無しさん
2011/04/05(火) 23:27:54.500215デフォルトの名無しさん
2011/04/06(水) 00:18:26.18std::bitsetも簡単にそういうことできるんだっけ
0216デフォルトの名無しさん
2011/04/06(水) 00:34:49.45不定なら、どこ指しているのか分らんのだから、!= iterator.end()したらだめだろ
不定ならiteratorなんて使えない
0217デフォルトの名無しさん
2011/04/06(水) 01:06:49.14std::searchとかで戻ってきたiteratorなのでどこかは指してます
0218デフォルトの名無しさん
2011/04/06(水) 01:20:42.140219デフォルトの名無しさん
2011/04/06(水) 01:22:22.16int( it - vect.begin() )
で何番目を指してるか分かるんじゃねーの?
0220デフォルトの名無しさん
2011/04/06(水) 02:08:00.030221デフォルトの名無しさん
2011/04/06(水) 02:21:17.25でもいったんキャストするとなると結局long longの64bitで最大64個の組み合わせまでしかインクリメントで全表示できない?
まあそんなに多くの状態数が計算に必要だとしたら、そもそも計算時間的に問題有りなのかもしれないけど
0222デフォルトの名無しさん
2011/04/06(水) 02:30:14.57組み合わせひとつごとの処理が仮に1ナノ秒で済んだとしても、
65ビット目がインクリメントされるまでに500年以上かかるぞ。
0223デフォルトの名無しさん
2011/04/06(水) 05:40:30.86std::distanceで解決しました。ありがとうございました
0224デフォルトの名無しさん
2011/04/06(水) 13:43:18.64よりdistanceのほうがよさげだった
0225デフォルトの名無しさん
2011/04/06(水) 21:47:28.54だよな
まあ実際に計算するわけじゃなくて、なんとなく気になったから聞いてみた
0226デフォルトの名無しさん
2011/04/07(木) 16:32:25.15どっち使っても一緒。ランダムアクセクイテレータに対しては-演算子を使うように特殊化されてるから。
0227デフォルトの名無しさん
2011/04/07(木) 16:37:38.37する共有ライブ ラリを作成していて、
その共有ライブラリが複数プロセスから
ファイ ル名を指定されて呼ばれます。
共有ライブラリ内でファイルアクセス毎に
semget()して排他制御をしているんですが、
プロセスからこき使われると、
セマフォ集合を削除する 暇がなくて、
semop()時に指定しているSEM_ UNDOの
累積がSEMVMXに達してしまいどうしようか考えています。
そもそも、ライブラリ内で排他をかけてるのが 間違ってるのでしょうか?
0228デフォルトの名無しさん
2011/04/07(木) 17:52:44.92(暇があってもする必要がないことはしない方がいい)
SEM_UNDO必要あるの?
0229デフォルトの名無しさん
2011/04/07(木) 18:31:40.92ロックをした状態の時に、プロセスが
強制終了されると、手動でセマフォを
削除するか、システムを再起動しないと
動かなくなってしまいませんかね?
0230デフォルトの名無しさん
2011/04/07(木) 18:59:56.680231デフォルトの名無しさん
2011/04/07(木) 19:13:40.88問題があった場合に対象できない
ということですか?
0232デフォルトの名無しさん
2011/04/07(木) 21:20:59.490233227
2011/04/08(金) 16:36:57.82プロセスでセマフォを制御してもらえる
様に調整してみますね。
0235デフォルトの名無しさん
2011/04/08(金) 18:34:42.230236デフォルトの名無しさん
2011/04/09(土) 04:40:12.310237デフォルトの名無しさん
2011/04/10(日) 04:43:10.932重のfor文の処理中に、その2重のfor文全域を抜けてしまいたい場合、continueでは思い通りに行かない為
gotoとラベルで抜けているのですが、他にもっとマトモなやり方が有ったりするのでしょうか?
0238デフォルトの名無しさん
2011/04/10(日) 05:50:45.010239デフォルトの名無しさん
2011/04/10(日) 05:58:25.29continue代わりならgotoでもいいんじゃないかな
0240デフォルトの名無しさん
2011/04/10(日) 08:58:00.69continueでは思い通りでなくgotoで抜けているコードの実例を頼む。
抜けているのはループじゃなくて頭じゃないかって気がするんだ。
0242デフォルトの名無しさん
2011/04/10(日) 12:57:04.24速度がどうなるかはシラネ
0243デフォルトの名無しさん
2011/04/10(日) 14:01:59.950244デフォルトの名無しさん
2011/04/10(日) 21:50:07.740245237
2011/04/10(日) 23:38:17.04頭が抜けておりますた。 continueじゃなくてbreak2回ですね。
gotoは使うべきではないとあちこちに書いてたから
その外に抜け出そうと使って良い物かと考えていましたが、なんとか大丈夫そうですね。
ありがとうございました、そして勘違いすみませんでした;
0247デフォルトの名無しさん
2011/04/11(月) 15:33:07.38外側のループを抜けるかどうか判断するのが妥当なきがするけどな。
まあステータス変数をもってあげても良いと思うよ。
まあ何はともあれループ内にだらだら処理を書かないなら適当にさばいときゃ良いと思う。
一キャラクタずつ書き込むのは、SSDにはよくないのでしょうか?
0249デフォルトの名無しさん
2011/04/11(月) 17:18:08.34ブロックデバイスってのはセクタ単位で読み書きするものだ
プログラムから、ディスクなどのブロックデバイスに対して
セクタの整数倍になってない適当なサイズでのwriteが可能に見えるのは
背後でランタイムやOSがバッファリングしてまとめ書きするから
0250デフォルトの名無しさん
2011/04/11(月) 18:13:37.28ドメコンのシステムドライブとか
0251デフォルトの名無しさん
2011/04/11(月) 19:27:32.39セクタサイズにアラインさせるための最低のバッファリングは常にされるよ
もっともWindowsの話で言うと、FILE_FLAG_NO_BUFFERINGでファイル開いた場合は
OSレベルのバッファリングが切れるが、その場合、WriteFile()に渡すバッファを
セクタ長にアラインさせ、きっかりセクタサイズの倍数で書き込むのがユーザの
責任になる(つまり、いずれにせよ1バイト単位では書き込めない)
0252デフォルトの名無しさん
2011/04/11(月) 19:55:13.49try (...) {...} catch (...) {...}
0253デフォルトの名無しさん
2011/04/11(月) 20:13:07.800254デフォルトの名無しさん
2011/04/11(月) 21:28:35.74最新版では直っている。
細かいファイルの書き出しは速くはならないから、
バッファつきでまとめて書き出すと良い。
0255デフォルトの名無しさん
2011/04/11(月) 21:29:49.430257デフォルトの名無しさん
2011/04/11(月) 22:48:34.70サーバ1台、クライアント5台以上
Serv:selectでcliからの受信待ち
Cli:TCPパケットをservに送信、パケットのやり取りを複数回
Ser:"end"という文字を含むパケットを受信したら通信終了
fd = socket();
FD_SET(fd, &fds);
上の処理を、接続してきたクライアント毎(例えば10回)に行いselectで待つと思いますが、
FD_ISSET(fd, &fds);←このように書いた場合、10台のクライアントのうちどのクライアントから
受信したかどうかわかるんでしょうか?
0258デフォルトの名無しさん
2011/04/11(月) 22:54:42.31ドキュメントに書いてあるだろ
ttp://www.jp.freebsd.org/cgi/mroff.cgi?sect=3&subdir=man&lc=1&cmd=&dir=jpman-7.2.2/man&man=FD_ISSET
>FD_ISSET(fd, &fdset) は fd が fdset のメンバである場合は非 0 の値
>を、そうでない場合は 0 を返します。
N個のクライアントと通信してるのなら、listenソケット以外に、
N個のソケットを使ってて、それらをfdsetに入れてselect()で監視してるはずだ
その一つ一つについて、(普通はループを回して)FD_ISSETでトリガかかかったか
チェックするんだよ
効率がわるいと思うか?
その通り、だから今はselect()より移植性においては劣るが、改善された関数が
いくつか作られている
0259デフォルトの名無しさん
2011/04/11(月) 23:05:22.090260デフォルトの名無しさん
2011/04/11(月) 23:17:25.19勉強になったありがとう
0261デフォルトの名無しさん
2011/04/11(月) 23:20:58.15ありがとうございます。
fd_issetは一つのfdしかチェックできないということは、
クライアントの台数分だけfd_issetでチェックしなければならないってことですよね?
今回のように接続してくる台数が変わるときは、どのようにfd_issetでチェックするのが効率がいいんでしょうか?
ttp://x68000.q-e-d.net/~68user/net/c-echo-2.html
この例だと1024個のfdをselectの中のfor文で全部チェックしてますが、あまり効率がいいとは思えません。。。
0262デフォルトの名無しさん
2011/04/11(月) 23:24:55.98いやだから、select()を使う以上はそうしなければならないのであって
本質的に効率が悪いんだよ
もっと効率がいい云々と書いたのは、FD_ISSETマクロの話じゃなくて
select()自体の話
Unix系ならepoll(), kqueue()
WinsockならIOCPについて調べるといい
0263デフォルトの名無しさん
2011/04/11(月) 23:28:23.951024個を同時にselectするのはアホだと思うが、
FD_ISSETの1000回ループごとき、測定限界以下の時間しか
かからんだろ。
0264デフォルトの名無しさん
2011/04/11(月) 23:28:28.78案の定というか。わかってくれなかったな。。
0265デフォルトの名無しさん
2011/04/11(月) 23:29:30.28なるほど。。。
ありがとうございました。
selectを使うのが条件なので、接続してきた台数をカウントして
その分だけチェックするのが一番効率いいですかね。
0266デフォルトの名無しさん
2011/04/11(月) 23:33:41.86ダメ
「台数」とかアバウトな話じゃなくて、ちゃんと使ってるfd管理しろ
たとえば
std::vector<int> clients
のようなベクタにクライアントのfd入ってるとしたら、
fdsetにセットするのも
FD_ISSETでテストするのも、単にベクタの要素をループするだけだろ?
0267デフォルトの名無しさん
2011/04/11(月) 23:35:56.16std::list<SOCKET>
0268デフォルトの名無しさん
2011/04/11(月) 23:39:20.15大事なのは台数じゃなくてfdの最大値でしたね。
失礼しました。。。
0269デフォルトの名無しさん
2011/04/11(月) 23:43:57.21殊勝な心がけだが、やるんならStevensのUnix Network Programmingが
必読書だから読んどけ
ちゃんと読んだらこのレベルの質問をする必要はなくなる
0270デフォルトの名無しさん
2011/04/12(火) 00:00:23.57今時ソケットプログラミングにC/C++を持ち出すのは
時代錯誤としか言いようがない
0271デフォルトの名無しさん
2011/04/12(火) 00:06:53.720272デフォルトの名無しさん
2011/04/12(火) 00:10:07.400273デフォルトの名無しさん
2011/04/12(火) 00:15:57.15っていうか何でム板のC/C++スレとかにいるの君達
0274デフォルトの名無しさん
2011/04/12(火) 01:16:53.18くれるのですが、C++の場合も同じですか?
例えば、オブジェクトの生成や破棄をランダムに繰り返した場合など。
0275デフォルトの名無しさん
2011/04/12(火) 01:20:39.38ガベージコレクタは標準ではありません。
対象環境を限定したライブラリとしてならガベージコレクタを組み込むこともできますが。→ BoehmGC
0276デフォルトの名無しさん
2011/04/12(火) 01:22:35.15コンパクションが無いのはJavaもC++も同じ
0277デフォルトの名無しさん
2011/04/12(火) 01:29:03.52× コンパクションが無いのは
○ コンパクションされるかどうか決まってないのは
だよね?
0278デフォルトの名無しさん
2011/04/12(火) 01:33:55.13実装依存なのかな。にわか知識でスマソ。
0279デフォルトの名無しさん
2011/04/12(火) 01:54:18.69ありがとうございます
0280デフォルトの名無しさん
2011/04/12(火) 01:55:03.10アンカー抜けてました、ありがとうございます><;
0281デフォルトの名無しさん
2011/04/15(金) 14:15:56.11C++のクラスにおいて「自分自身の名前」「親クラスの名前」を扱う予約語はないでしょうか?
class Child : public Parent
{
Child(const Hoge &hoge):Parent(hoge){}
}
このようにコンストラクタを作るのですが
・自身の名前を変更した時
・親クラスを変えた時
に書き換え忘れが怖いのです(この手のクラスを大量に作っていると思ってください)
環境はVisualStudio2008です。
__superという予約語は発見できたのですが、これは親クラスのメソッドを呼び出す場合
Parent::draw(); を __super::draw()のようにすることしかできず、コンストラクタを呼ぶことはできませんでした。
理想としては
class Child : public Parent
{
__constructor(const Hoge &hoge):__super(hoge){}
}
こんな感じに書けないものかと考えています。
方法はありますでしょうか?
よろしくお願いいたします。
0282デフォルトの名無しさん
2011/04/15(金) 14:21:48.18同一単語で区別する術が無いよね
0283デフォルトの名無しさん
2011/04/15(金) 14:30:37.44はい。C++の標準化委員会(というのでしょうか?)の方々も同一見解で、superの予約語化は見送ったらしいです。
一応「多重継承で、呼び出し先が曖昧な時はエラーにする」というのが最初の案だったそうですが。
VSは独自に__superを作ってくれていたので、こちらを使いました(がコンストラクタには使えませんでした)
0285デフォルトの名無しさん
2011/04/15(金) 20:12:33.13予約語じゃなくてもよければtypedefを使ったらどう?
各クラスの中で書く必要があるけど。
(質問の趣旨を誤解してたらスルーしてくれ)
class Child : public Parent
{
typedef Child thisClass;
typedef Parent baseClass;
thisClass(const Hoge &hoge):baseClass(hoge){}
}
このthisClassやbaseClassというのはATL/WTLで使われてる表記方法
0286デフォルトの名無しさん
2011/04/15(金) 20:48:43.75横からだが、ナイスだと思ったw
むしろなぜ今までこれを思いつけなかったか、
ちょっと自分を責めたい。
0287デフォルトの名無しさん
2011/04/15(金) 23:25:01.55ください。標準入力のリダイレクトのような感じです。
よろしくお願いします。
0288デフォルトの名無しさん
2011/04/15(金) 23:28:51.880289デフォルトの名無しさん
2011/04/18(月) 10:25:38.95アドバイスありがとうございます。
最初その手法ですと、typedefの書き換え忘れが怖いなと思いました。
しかし実際にやってみますと
(NewParentはParentをpublic継承している)
class Child : public NewParent
{
typedef Child thisClass;
typedef Parent baseClass; //NewParentにするのを忘れている!
thisClass(const Hoge &hoge):baseClass(hoge){}
};
これは「NewParentのデフォルトコンストラクタを呼び出そうとしてるけど、そんなの無いよ」というコンパイルエラーになりました。
たしかに、NewParentへのコンストラクタ指定が無い状態になるので、
「指定が無ければデフォルトコンストラクタを呼ぶという法則」に従うはずですね。
また、間違えてNewParentにデフォルトコンストラクタを書いてしまった場合でも
「Parent(hoge)を呼び出してるけど、ParentはChildの基本クラスでもメンバでもありません」
というエラーになりました。
十二分に今件の要件を満たせます。
ありがとうございました。
0290デフォルトの名無しさん
2011/04/20(水) 22:58:15.90キーにstd::string
値をchar型の配列の先頭ポインタ
としたいのですが、可能でしょうか?
0291デフォルトの名無しさん
2011/04/20(水) 23:02:21.720292デフォルトの名無しさん
2011/04/20(水) 23:02:51.23strdup(c_str())とかして確保しなおしてたらまぁそれは平気か。
0293デフォルトの名無しさん
2011/04/21(木) 00:37:33.05stringはoperator<が定義されているから出来るよ
0294デフォルトの名無しさん
2011/04/21(木) 01:18:38.42可能であるのが明らかなので何を疑問に思っているのかわからない。
0295デフォルトの名無しさん
2011/04/21(木) 16:27:02.78{
if (wyear >= 1868 && wyear <= 1911) {
strcpy_s(nengo, "明治");
*jyear=wyear-1868+1;
return 0;
} else if (wyear >= 1912 && wyear <= 1925) {
strcpy_s(nengo, "大正");
*jyear=wyear-1912+1;
return 0;
} else if (wyear >= 1926 && wyear <= 1988) {
strcpy_s(nengo, "昭和");
*jyear=wyear-1926+1;
return 0;
} else if (wyear >= 1989 && wyear <= 2050) {
strcpy_s(nengo, "平成");
*jyear=wyear-1989+1;
return 0;
}
return 1;
}
上記をコンパイルするとerror C2660: 'strcpy_s' : 関数に 2 個の引数を指定できません。がでます。
MSDNのヘルプ見たんですがよくわからないのでここで解決できればと思い書きました。
宜しくお願いします。
0296デフォルトの名無しさん
2011/04/21(木) 16:35:31.850297デフォルトの名無しさん
2011/04/21(木) 17:36:02.61char *nengoのサイズがわからないから、
strcpy_s()を使うのをやめるか、
int wtoj(int wyear,char *nengo, int nengoSize, int *jyear)
{
if (wyear >= 1868 && wyear <= 1911) {
strcpy_s(nengo, nengoSize, "明治");
みたいに引数を増やしてサイズを渡すとか。
0298デフォルトの名無しさん
2011/04/21(木) 20:11:36.440299デフォルトの名無しさん
2011/04/21(木) 23:07:16.050300デフォルトの名無しさん
2011/04/21(木) 23:47:08.65int num = GetNum();
std::vector<??????> hoge;
hoge[0][0]
hoge[0][1]
・
・
hoge[0][num]
hoge[1][0]
・
・
みたいなデータ構造にしたいです。
0301デフォルトの名無しさん
2011/04/21(木) 23:53:41.06よろしくお願いします
0302デフォルトの名無しさん
2011/04/21(木) 23:58:32.12std::vector<std::vector<int> > hoge(n, std::vector<int>(num));
あとでresizeすればいかようにも変更可能
0303デフォルトの名無しさん
2011/04/21(木) 23:59:43.60ちなみにpush_backして要素を入れていくつもりです
0304デフォルトの名無しさん
2011/04/22(金) 00:03:37.720305デフォルトの名無しさん
2011/04/22(金) 00:13:22.43だって二次元配列でしょ?
取りあえず0を入れておいてresize()すればいいし
>ちなみにpush_backして要素を入れていくつもりです
もちろんOK
0306デフォルトの名無しさん
2011/04/22(金) 00:28:36.18気を付けるべき点は、resize()は第二パラメータに何も指定しないと要素がゼロになるので
必ず行方向のvectorを指定する
もしくはforで回してhoge[i]をnumでresize()してもよい
int main()
{
int num, raw;
std::cout << "num : ";
std::cin >> num;
std::vector<std::vector<int> > hoge(0, std::vector<int>(num));
std::cout << "行の数 : ";
std::cin >> raw;
hoge.resize(raw, std::vector<int>(num));
hoge[0][1] = 123;
hoge[1][0] = 456;
std::cout << hoge[0][1] << ' ' << hoge[1][0] << std::endl;
}
0307デフォルトの名無しさん
2011/04/22(金) 00:56:37.03>>300 の要件で boost つかっていいなら std::vector<boost::array<...> > だろう。
multi_array は std::vector みたいに効率的で例外を投げない swap() を持ってないとか、
いろいろ問題が放置されたままになってる。
https://svn.boost.org/trac/boost/query?status=!closed&component=multi_array
0308デフォルトの名無しさん
2011/04/22(金) 01:23:04.84こうすればpush_backを使うし、またnumを指定する必要もない
int main()
{
std::vector<std::vector<int> > hoge(0, std::vector<int>());
std::vector<int> tmp;
int i = 0, j = 0, k;
while (true) {
std::cout << i << " 行目 " << j << "列目 = (マイナスの数を入れると次の行に移り、9999で終わります) ";
std::cin >> k;
if (k < 0) {
i++;
hoge.push_back(tmp);
std::vector<int>().swap(tmp); // tmpを空にする
j = 0;
} else if (k == 9999) {
if (tmp.size())
hoge.push_back(tmp);
break;
} else {
tmp.push_back(k);
j++;
}
}
for (i = 0; i < hoge.size(); i++) {
for (j = 0; j < hoge[i].size(); j++)
std::cout << hoge[i][j] << ' ';
std::cout << std::endl;
}
}
0309デフォルトの名無しさん
2011/04/22(金) 09:42:00.400310デフォルトの名無しさん
2011/04/22(金) 10:29:00.530311デフォルトの名無しさん
2011/04/22(金) 15:38:13.89--+--------------------------
1 |1
2 |2 4
3 |3 6 9
4 |4 8 12 16
5 |5 10 15 20 25
6 |6 12 18 24 30 36
7 |7 14 21 28 35 42 49
8 |8 16 24 32 40 48 56 64
9 |9 18 27 36 45 54 63 72 81
1 2 3 4 5 6 7 8 9
--+--------------------------
1 |1 2 3 4 5 6 7 8 9
2 | 4 6 8 10 12 14 16 18
3 | 9 12 15 18 21 24 27
4 | 16 20 24 28 32 36
5 | 25 30 35 40 45
6 | 36 42 48 54
7 | 49 56 63
8 | 64 72
9 | 81
上記を実現するには同プログラム書けばいいんでしょうか?
普通の九九はできました。
0312デフォルトの名無しさん
2011/04/22(金) 15:53:00.39そのできたプログラムを貼ってご覧。
0313デフォルトの名無しさん
2011/04/22(金) 16:10:18.060314デフォルトの名無しさん
2011/04/22(金) 16:18:27.420315デフォルトの名無しさん
2011/04/22(金) 16:20:08.09int i, x, y;
printf(" |");
for (i=1; i<=9; i++) { /* 上部の数字表示 */
printf("%3d",i);
}
printf("\n---+----------------------------\n");
for (x=1; x<=9; x++) {
printf("%d |",x); /* 左の数字表示 */
for (y=1; y<=9; y++) {
printf("%3d",x*y); /* 九九の表示 */
}
printf("\n");
}
return 0;
}
これです。
0316デフォルトの名無しさん
2011/04/22(金) 16:28:06.75--
printf("%3d",x*y); /* 九九の表示 */
--
これを
--
printf(x < y ? " " : "%3d", x * y); // 空白は3個
--
にすればOK。もう一方は、不等号を逆にすればいい。
0317デフォルトの名無しさん
2011/04/22(金) 16:29:42.17上三角形 i行目は i*1 〜 i*i の羅列
下三角形 i行目は i*i 〜 i*9 の羅列
出力形が >>311 通りにあわせようとすると、フォーマットの仕方が厄介か?
(下三角形の 1 の行だけ先頭空白無し: 例外的に出し方を変える?)
0318317
2011/04/22(金) 16:33:05.680319デフォルトの名無しさん
2011/04/22(金) 16:33:45.55ttp://codepad.org/KfVhWFSm
0320319
2011/04/22(金) 16:35:12.840321デフォルトの名無しさん
2011/04/22(金) 16:43:13.99>>319
ありがとうございました。
思っていた物が出来ました。
色々勉強不足な点もありますが、これから頑張ってやります。
0322デフォルトの名無しさん
2011/04/22(金) 20:13:12.72class Hoge
{
typedef Hoge<T> Fuga;
};
この時Fugaの変わりにどんな名前をつけるのが一般的ですか?
0323デフォルトの名無しさん
2011/04/22(金) 21:06:15.21this_type とか多そう。
0324デフォルトの名無しさん
2011/04/22(金) 21:17:25.99なるほど
ありがとうございます
0325デフォルトの名無しさん
2011/04/22(金) 22:21:46.320326デフォルトの名無しさん
2011/04/22(金) 23:52:52.56a = 1
b = 1
が出力されますが、どうも納得いきません。
親クラスのコンストラクタが先に呼ばれているのに、
親クラスのコンストラクタ引数に値を渡しているのが子クラスのコンストラクタなんですか?
class Parent{
public:
unsigned int a;
Parent(unsigned int i){
a = i;
cout << "a = " << a << endl;
}
~Parent(){};
};
class Child : public Parent{
public:
unsigned int b;
Child(unsigned int i): Parent(i){
b = i;
cout << "b = " << b << endl;
}
~Child(){};
};
int main(){
unsigned int i = 1;
Child c(i);
return 0;
}
0327デフォルトの名無しさん
2011/04/23(土) 00:08:21.43当たり前過ぎて何が判らないのか判らない。
親クラスのコンストラクタなら、子クラスの初期化リストで明示的に呼び出しているじゃないか。
0328デフォルトの名無しさん
2011/04/23(土) 00:10:18.42よく分からんが順番のこと?
http://codepad.org/Uvndpy7r
0329328
2011/04/23(土) 00:11:28.66ttp://codepad.org/9gl39jOn
0330デフォルトの名無しさん
2011/04/23(土) 00:25:33.15>>328
どうもありがとうございます。
確かに呼び出してますねw
それでは以下の場合は、
子クラスの初期化リストに明示的に書かなくても
自動でデフォルトの親クラスコンストラクタを呼んでるってことですか。
ttp://codepad.org/aYLzcqXg
0331デフォルトの名無しさん
2011/04/23(土) 00:28:34.47>どうも納得いきません
に納得いきません
0332デフォルトの名無しさん
2011/04/23(土) 00:31:34.91そう、もちろん引数なしコンストラクタの場合だけど
親のコンストラクタに引数を入れないとダメなら明示的に呼び出す必要がある
0333デフォルトの名無しさん
2011/04/23(土) 00:36:17.56よくわかりました。
ありがとうございます。
なんでこんなのことで悩んでたんだろう。
0334デフォルトの名無しさん
2011/04/23(土) 00:51:07.670335デフォルトの名無しさん
2011/04/23(土) 00:51:43.740336デフォルトの名無しさん
2011/04/23(土) 01:02:04.08すでに vector 使うんなら配列 new なんかせずに vector 使っとけばいいのに、と思う。
0337デフォルトの名無しさん
2011/04/23(土) 06:40:53.91ってどういう風に見てるの?
0338デフォルトの名無しさん
2011/04/23(土) 06:45:38.77エディタやIDEが色付けしてくれる
0339デフォルトの名無しさん
2011/04/23(土) 08:05:04.23>よく""で括ったりするけど、"が複数ある場合どれが括るものでどれが実際の文字としての"か
>ってどういう風に見てるの?
ダブルクォーツ自体を文字列リテラルに入れたいなら、バックスラッシュでエスケープ。
言語によっては違うが、それはスレ違いなので割愛。
0340デフォルトの名無しさん
2011/04/23(土) 08:41:17.46例えばスペースやドット、コンマで各文字列を区切ってるテキストファイルで""で括ってる
部分は区切り文字があっても、文字列の一部ですよって判断したいんだけど、後ろの方まで
見に行く効率の悪い方法しか思い浮かばない
0341デフォルトの名無しさん
2011/04/23(土) 08:51:20.99C言語の文字列は"を扱えて区切り文字では無いが。
エスケープシーケンスつかえ。
0342デフォルトの名無しさん
2011/04/23(土) 11:11:56.75最後まで見ないとどっちかわからんしょそれ
0343デフォルトの名無しさん
2011/04/23(土) 12:29:13.26モードを切り替えるようにして詰んでるのかも。
rubyのヒアドキュメントの実装はそういうふうになってたような希ガス。
0344デフォルトの名無しさん
2011/04/23(土) 16:40:00.070345デフォルトの名無しさん
2011/04/23(土) 16:44:56.38普通はその効率の悪い方法でパースする。
0346デフォルトの名無しさん
2011/04/23(土) 16:59:16.91まぁ、\"の出現をケアしたほうがいいだろうね。
0347デフォルトの名無しさん
2011/04/23(土) 21:55:59.08開発環境と異なるOSでも動くと聞いたのですが、
Win7で作ったexeをVistaで動かそうとすると「ヒープが壊れている」
といわれて強制終了されてしまいます。(稀に強制終了しないこともあり)
(Win7だと強制終了しません)
デバッグできないので何が原因なのかわかりません。
こういった場合、どのように原因を特定したらよいのでしょうか?
csvファイルのデータを変数に格納しているところがあやしいような気がします。
0348デフォルトの名無しさん
2011/04/23(土) 22:07:59.72動的確保のメモリ確保、解放まわりのバグが無いか
(多重解放、アクセス違反等)
しっかりチェックしてみては?
開発PCではバグが顕在化しなかっただけかもしれない
またVC++2005 再頒布可能パッケージ関連とは違うのかな?
0349347
2011/04/23(土) 22:14:23.25>動的確保のメモリ確保、解放まわりのバグが無いか
>(多重解放、アクセス違反等)
>しっかりチェックしてみては?
コードを見直してみます。アクセス違反とはNULLポインタのことですか?
>またVC++2005 再頒布可能パッケージ関連とは違うのかな?
違うと思います。そもそも無知で何のことかわかりません・・・。
0350デフォルトの名無しさん
2011/04/23(土) 22:23:51.86このモードの違いでエラーが出たり解消したりする場合、メモリ確保開放や
アクセス違反辺りのバグの可能性が高いとどこかで聞いたことがある
0351デフォルトの名無しさん
2011/04/23(土) 22:26:15.17まずメインが開始される前に落ちているのかどうかを
ログやメッセージボックスで確認。
少しでも自分の書いたプログラムが実行されているなら
どこで落ちているかをログで確認できるはず。
0352デフォルトの名無しさん
2011/04/23(土) 22:50:52.767だとFault Tolerant Heapのおかげで動いてるだけだろ
ページヒープとかCRTデバッグヒープとか活用してデバッグしようず
0353デフォルトの名無しさん
2011/04/23(土) 23:09:34.75そんな機能あったのかw
ttp://msdn.microsoft.com/ja-jp/library/dd744764(v=vs.85).aspx
これで無効にして7でも落ちるか?
0354デフォルトの名無しさん
2011/04/23(土) 23:13:11.970355347
2011/04/23(土) 23:22:20.64>>351
VistaPCは手元にないので、月曜日までに特定できなかったら試してみます。
>>352
CRTデバッグヒープってのをやってみたいんですが、ググってもよくわかりません。
コードにどのように記述したらいいかヒントを教えていただけませんか?
>>353
ページ内の、システムでフォールト トレラント ヒープを完全に無効にするには、
REG_DWORD 値 HKLM\Software\Microsoft\FTH\Enabled を 0 に設定します。
これのやり方がよくわかりません・・・
0356347
2011/04/23(土) 23:38:08.83>>353
HKLM\Software\Microsoft\FTH\Enabled がレジストリエディタに見つかりません。
という意味です。
0357デフォルトの名無しさん
2011/04/23(土) 23:39:13.35ttp://up3.viploader.net/ippan/src/vlippan202628.jpg
0358デフォルトの名無しさん
2011/04/23(土) 23:40:35.51どうするのが一般的ですか?if文をたくさん書く?
0359デフォルトの名無しさん
2011/04/23(土) 23:49:38.73用途が判らんからなんとも言えんが、テーブルを作る。
0361デフォルトの名無しさん
2011/04/23(土) 23:51:16.21あんましいい方法見当たらないな
ttp://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4067
ここに妥協案レベルのものがあったが正直微妙じゃないか
0362デフォルトの名無しさん
2011/04/23(土) 23:57:22.15テーブルを元にfor文まわすみたいな感じですかね?
0363デフォルトの名無しさん
2011/04/23(土) 23:58:23.98そうかぁ
でもまあメモリの多重解放あたりがやはり可能性高いんじゃないだろうか
怪しいと思うコード晒してみては?
0364デフォルトの名無しさん
2011/04/24(日) 00:11:54.57ありがとうやっぱ後ろまで見て決めるしかないのね
0366デフォルトの名無しさん
2011/04/24(日) 01:57:08.450367デフォルトの名無しさん
2011/04/24(日) 02:21:37.590368デフォルトの名無しさん
2011/04/24(日) 02:24:19.06ありがとうございます
ifなどの条件文です、さっき試したら中カッコでした
しつれいしました
0369デフォルトの名無しさん
2011/04/24(日) 19:28:26.15文字列を逆順にするプログラムを書こうとした場合、自分で考えると以下のようになりました。
---------------------------
#include <string>
string str = "abcde"
string new_str;
int i;
int length = str.size();
for (i=0; i<length; ++i) {
new_str[i] = str[length-i-1];
}
---------------------------
なにかかカッコ悪い感じがするのですが、
一番スマートな書き方はどのような感じになりますでしょうか?
PHPのarray_popみたいのがあったらwhileで回して綺麗にかけると思うのですが、
C++のstringライブラリにありましたでしょうか?
あと、C++では i++は++iの方がよいと誰かに教わったのですが、理由を忘れてしまいました。
何故でしたでしょうか・・?
ご教示いただけますと幸いです。
0370デフォルトの名無しさん
2011/04/24(日) 19:41:45.38stringをvectorにコピーしてreverse()とか。
インクリメントが前置の方がいい理由は、自前のクラスのインクリメント関数を作ってみれば判る。
要は、後置インクリメントはコストが嵩むこともあるだろうから普段から前置にしておいた方が無難ということ。
0371デフォルトの名無しさん
2011/04/24(日) 19:49:02.30#include <string>
#include <iostream>
int main(void)
{
std::string str = "abcde";
char tmp;
int i, j;
std::cout << "before: " << str << std::endl;
for (i = 0, j = str.size() - 1; i < j; ++i, --j) {
tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
std::cout << "after: " << str << std::endl;
return 0;
}
0372デフォルトの名無しさん
2011/04/24(日) 19:50:29.39vectorにコピーしなくてもつかえるんじゃね?
std::string s = "12345";
std::reverse(s.begin(), s.end());
0373369
2011/04/24(日) 19:59:16.17>>371
>>372
ありがとうございます。勉強になります。
>>369のやり方でも、間違いではない、のでしょうか。
>>371 のやり方ですと、コードは増えますが、効率はよくなる、のでしょうか。
ループの回数が少なくて済むように見えますが、トータルではどのやり方がいちばんよいのでしょう。
場合にもよるとは思うのですが・・。
0374デフォルトの名無しさん
2011/04/24(日) 21:21:08.51逆反復子を使えばどうだい?
rbegin(), rend(), reverse_iterator
コンテナの中身はそのままでアルゴリズムに掛ける事が出来る
0375デフォルトの名無しさん
2011/04/24(日) 21:43:22.84これ面白いな
0376デフォルトの名無しさん
2011/04/24(日) 22:37:50.39とりあえず誰も指摘してないみたいなので。
new_str の領域が確保されてないからメモリ破壊してる。
push_back するか、string new_str(str.size(), ' '); とか。
全体としては、rbegin(), rend() で済むならそれで。駄目なら std::reverse でいいんじゃね。
0377デフォルトの名無しさん
2011/04/25(月) 03:18:39.96なんか見たことあるコードですね
0378デフォルトの名無しさん
2011/04/25(月) 21:03:34.890379デフォルトの名無しさん
2011/04/25(月) 21:10:16.77sizeof()やってみて決めればいいじゃない
0380デフォルトの名無しさん
2011/04/25(月) 21:14:28.89ありがとうございました 少ないほうを選べばいいんですね
0381デフォルトの名無しさん
2011/04/25(月) 21:31:03.73参照って
void Func(shared_ptr<hoge>& p)
って意味?
当然参照の方が早いがこのオーバーヘッド気にするならスマポ使うなという
考えになるが
0382347
2011/04/25(月) 21:41:05.36Vistaで落ちてしまうという相談をした者です。
今日Vistaのリリースモードでデバッグしてみたのですが、
途中の変数をウォッチすると見れなかったり値がおかしかったりするのですが、
これはリリースモードだと普通なのでしょうか?
0383デフォルトの名無しさん
2011/04/25(月) 21:50:03.39素朴な疑問なんだけど、スマポを値渡しするとその関数がスマポを返してくる
場合を除いて、関数の終了時に保持しているリソースを解放してしまうよね
危なくね?
0384デフォルトの名無しさん
2011/04/25(月) 21:52:31.00なんでだよ
コピーされたら参照カウント増えるだろうが
0385デフォルトの名無しさん
2011/04/25(月) 21:55:00.93ごめん
auto_ptrと勘違いしてた
0386デフォルトの名無しさん
2011/04/25(月) 21:56:53.47ああそっちか確かにauto_ptrを渡すのは危険だな
0387デフォルトの名無しさん
2011/04/25(月) 22:06:52.73はい
より速く実行できるように命令の順番を入れ替えたり使い終わった変数は早々に消去してしまったり
もっと後の方まで計算を遅らせたり計算方法を組み替えたり不要な計算を省略したり
色んな最適化でソース通りのコードの流れではなくなってるので
ソース通りの変数の値がその場に存在しなくなっていることはあります
もちろんそういう最適化は最終的に得られる結果が変わらないように行なわれるわけですが
それはプログラムが完全に正しくてC++の規格に反したことは一切行っていないという前提でですね
C++の規格に沿った動作を保証できる範囲内で、可能な限り速く動くように、コードを改良するわけです
C++の規格で動作が保証されてないようなプログラムは、もちろん、動作が保証されません
0388デフォルトの名無しさん
2011/04/26(火) 21:36:13.260389デフォルトの名無しさん
2011/04/26(火) 21:48:49.970390デフォルトの名無しさん
2011/04/26(火) 22:02:50.500391デフォルトの名無しさん
2011/04/26(火) 22:10:08.720392デフォルトの名無しさん
2011/04/27(水) 15:39:46.96cの基本が終わったら、c++をやろうと思います。
こちらもよいサイトとか教えてください。
0393デフォルトの名無しさん
2011/04/27(水) 15:57:44.69Cの基本はともかく、中級以上になったらこれお勧め。
C/C++の宿題片付けます 147代目
http://hibari.2ch.net/test/read.cgi/tech/1301553333/l50
ここで、宿題を回答しているうちに力がつく。
0394デフォルトの名無しさん
2011/04/27(水) 17:17:50.95boost::dynamic_bitsetの方が便利じゃね?
0395デフォルトの名無しさん
2011/04/27(水) 18:35:35.14ここがいいと思う
ttp://www7b.biglobe.ne.jp/robe/cpphtml/index.html
さらっと見て、
何か作りながら必要になったら詳しく見ていく、
というやり方だと長続きしやすいと俺は思う
0396デフォルトの名無しさん
2011/04/27(水) 18:40:04.05>>395
ありがとうございます。
参考にやってみます。
あと、宿題も>>395さんの所で勉強しつつわかればやってみますねー
感謝です。
0397デフォルトの名無しさん
2011/04/29(金) 09:32:07.60楽しく上達できると思うよ。
こんな機能を作りたい→どうすれば出来るんだろう→試行錯誤とアルゴリズムの勉強
って感じで、こっちの方が意欲的に取り掛かれると思う。少なくともおれはそうだった
正直CUIだと作っても相当凄いの作れないと実用的じゃないしつまらないよね
0398デフォルトの名無しさん
2011/04/29(金) 16:06:39.890399デフォルトの名無しさん
2011/04/29(金) 16:09:51.48例えばどんなのが変な癖だと思いますか?
0400デフォルトの名無しさん
2011/04/29(金) 16:13:33.300401デフォルトの名無しさん
2011/04/29(金) 16:55:02.25気にすることはないんじゃないかな
Xlibよりは情報は多いし学びやすいんじゃないかな
0402デフォルトの名無しさん
2011/04/29(金) 17:36:00.020403デフォルトの名無しさん
2011/04/29(金) 17:38:46.18提供側が示している作法に従わないといけないという制限が付くからなぁ…
0404369
2011/04/29(金) 17:50:02.64色々やり方がありますね・・
とても勉強になりました。
0405デフォルトの名無しさん
2011/04/29(金) 19:41:48.26よくそういうクセが付くっていうけど、別にクセじゃないよね。
ハンガリアンが有効でないって思ったらその瞬間に辞められるし。
0407デフォルトの名無しさん
2011/04/29(金) 21:18:29.68それ以降ハンガリアンで書くべきだって信じて考えを改められない
レベルの人は、最初たまたまいい環境で覚えられたとしても、それ以降
変な知識(クセ)にそまってしまったらどのみちダメになるでしょ。
スポーツのフォームじゃないんだから、クセが抜けないってのは
ただの勉強不足。
0408デフォルトの名無しさん
2011/04/29(金) 21:31:43.19文章は適度な長さに分けないと誰にも理解されないよ。
プログラミングもまたしかり。
気をつけなよ。
0409デフォルトの名無しさん
2011/04/29(金) 21:34:06.160410デフォルトの名無しさん
2011/04/29(金) 21:35:14.05使うと開発効率が極端に悪くなるなんて事があるのかな?
0411デフォルトの名無しさん
2011/04/29(金) 21:38:27.33おかしな話だよな。
たしかに「おまえ10年前に入門書読んでそれで知識が止まってるだろ」みたいな
ヤツがいるけど、それはクセが抜けないんじゃなくてヘボいだけだ。
0412デフォルトの名無しさん
2011/04/29(金) 21:48:17.56>>407は1文が4行続いてる
どう考えても長すぎ。改行の位置も悪いし。
0413デフォルトの名無しさん
2011/04/29(金) 21:52:32.99たしかに「改められないレベルの人は」の途中で切ると読みにくいな。
でも手で改行するから位置とか考えるの面倒。
0414デフォルトの名無しさん
2011/04/29(金) 21:57:43.36リファクタリングしてやんよ。
最初覚えた知識だけを信じ込んでしまう人は、
ハンガリアンに関わらずどのみちダメでしょ。
クセというよりただの勉強不足が問題。
0415デフォルトの名無しさん
2011/04/29(金) 21:57:58.650416デフォルトの名無しさん
2011/04/29(金) 22:11:26.85言い出す連中か。
0417デフォルトの名無しさん
2011/04/29(金) 22:15:43.600418デフォルトの名無しさん
2011/04/29(金) 22:35:22.360419デフォルトの名無しさん
2011/04/30(土) 06:12:50.87方針をかたくなに変えないんでしょ。
0420デフォルトの名無しさん
2011/04/30(土) 10:30:21.77CからJavaにやってきて、あいかわらずCライクなコードを書いてる
ベテランとか、そんな感じになるな。
まあ、そういうのは基本勉強不足だからCでもヘタクソだけど。
0421デフォルトの名無しさん
2011/05/01(日) 00:15:27.83こういうことって仕様的におkなの?
定数(右辺値?)のアドレスとっていいのかな
0422デフォルトの名無しさん
2011/05/01(日) 00:20:55.83一時オブジェクトが作られてそのアドレスが取られる
0423デフォルトの名無しさん
2011/05/01(日) 11:52:14.310424デフォルトの名無しさん
2011/05/01(日) 13:25:51.28やってることは
const char* str="hoge";
と同じだと気付けば何の疑問も無いだろ?
0425デフォルトの名無しさん
2011/05/01(日) 14:33:55.09一時オブジェクトもアドレスが取れるのか試してみたかったんだろ
0426デフォルトの名無しさん
2011/05/04(水) 17:26:58.93コンストラクタで関数名と時間を記録
デストラクタでまた時間を記録
データを保存
関数の最初にマクロでカウンターオブジェクトを宣言
みたいな感じでやってるんだけど
これだと再帰関数のデータが重複して計算されてしまう
なるべく少ないてまで再帰関数をうまくルート呼び出しだけ調べる方法はある?
0427デフォルトの名無しさん
2011/05/04(水) 18:20:49.390428デフォルトの名無しさん
2011/05/04(水) 20:26:40.16邪道といわれるかもしれないが、
グローバル変数使えばいいんじゃないの
関数名をキーにして
タイマが動いているかのフラグを立てる
0429デフォルトの名無しさん
2011/05/04(水) 22:23:32.74再帰関数外で計測しないと計測クラスの生成廃棄コストで誤差だらけにならないか?
0430デフォルトの名無しさん
2011/05/04(水) 22:28:31.670431デフォルトの名無しさん
2011/05/05(木) 10:59:59.06再起1
再起2
・・・
再起2終わり
再起1終わり
終了
となるから開始時刻と終了時刻が入れ子になってる分をデータから無視すればいい
0432デフォルトの名無しさん
2011/05/08(日) 00:37:16.21教えてくださいTopLeft以外でお願いします
0433デフォルトの名無しさん
2011/05/08(日) 00:50:26.460434デフォルトの名無しさん
2011/05/08(日) 01:07:52.00これで問題ないと思うが。
0435デフォルトの名無しさん
2011/05/08(日) 01:19:18.36Flashの共有オブジェクトを読み書きできる
C++のライブラリはありませんか
OSはWindows環境を想定しています。
(マイクロソフトの他の言語のライブラリでもよいです。)
よろしくお願いします。
0436デフォルトの名無しさん
2011/05/08(日) 01:31:47.71C++で読もうとするシステム設計を見直した方がいい
0437デフォルトの名無しさん
2011/05/08(日) 01:38:19.87ありがとうございます
0438デフォルトの名無しさん
2011/05/08(日) 01:38:49.960439デフォルトの名無しさん
2011/05/08(日) 01:48:18.300440デフォルトの名無しさん
2011/05/08(日) 01:49:28.81コピー関数か代入演算子を実装して使ったほうがいい。
0441デフォルトの名無しさん
2011/05/08(日) 01:59:10.880442438
2011/05/08(日) 02:10:33.760443デフォルトの名無しさん
2011/05/08(日) 12:04:44.41stlやboostのソースを見てみるとどうもa1=a2;直後にa1!=a2が真になる可能性を全く考慮していないみたいなんですが・・・どうなんでしょう?
0444デフォルトの名無しさん
2011/05/08(日) 12:44:51.30直後ってマルチスレッド環境の話か?
0445デフォルトの名無しさん
2011/05/08(日) 23:03:27.66C++標準では
コンテナ作成者は全てのアロケータは交換可能かつ等しいと仮定してよい
ただし等しくないインスタンスもサポートすることが推奨される
0446デフォルトの名無しさん
2011/05/08(日) 23:22:25.05知りたいことをズバリ言ってくれました。どうもです
0447デフォルトの名無しさん
2011/05/09(月) 00:19:17.6820.1.5 の Allocator requirements にコピー代入は載ってないね。
でも rebind された型を含めたコピーコンストラクト相当の操作が載ってて、
その事後条件として == (が真になること)が要求されてる。
0448デフォルトの名無しさん
2011/05/09(月) 00:51:35.88A a1
A a2(a1);
assert(a1 == a2); // 要求通りならアサートは絶対出ない
A a3;
a3 = a1; assert(a1 == a3); // 要求通りでもアサートがでるかも・・・
ってことかな?混乱してきた
0449デフォルトの名無しさん
2011/05/09(月) 01:59:39.39要求に載ってないコピー代入の意味づけは厳密には(常識は別にして)
ユーザー定義なので、結果はなんとも言えないだろうね。
ってことはコンパイル通らない可能性だってあるみたいなんだけど、
ほんとにアロケータのコピー代入なんてしてるライブラリ実装あるの?
バグとして報告しといたほうがいいかもよ。
0450デフォルトの名無しさん
2011/05/09(月) 02:06:04.50assert は「出る」とか「出ない」とか言わない。
「失敗する」「成功する」が正しい。
「assert 失敗が出る」なら許せる。
0451デフォルトの名無しさん
2011/05/09(月) 02:23:31.99寿命管理権を譲渡する場合だけだよな
allocate_shared以外にはちょっと思いつかん
stlに存在するのか・・・?
0452デフォルトの名無しさん
2011/05/10(火) 19:15:08.28ノートン先生に削除されたんですが、
これはどんなことが原因として考えられますか?
実行環境はwinXP
ビルド環境はwin7 VS2010
アプリケーションは Win32アプリケーションで、
OpenGL,ファイル出力(ログファイル),などの類です。
簡単にいうとゲームです。
0453デフォルトの名無しさん
2011/05/10(火) 19:25:32.85諦めるしかないね
俺もNorton先生に引っかかったことがあるよ
そのときは MinGW gcc でコンパイルした文章整形ツールだったけどな
0454デフォルトの名無しさん
2011/05/10(火) 21:15:11.05そうですかーありがとうございます。
あきらめます。
0455デフォルトの名無しさん
2011/05/10(火) 21:22:06.98ノートンっていきなり削除すんのか?
0456デフォルトの名無しさん
2011/05/10(火) 22:12:50.75当たり前に考えて実際にウィルスに感染してるんじゃないの。
他に感染されていないかPC総チェックした方がいいよ。
もっともウィルスに感染したPC上のアンチウィルスソフトを信用していいか、
っていうのが問題だが、、、。
ソースレベルで、バックドアでも仕込まれてたりするのかな。
0457デフォルトの名無しさん
2011/05/10(火) 22:54:51.97「ゲーム」っていうのが引っかかるので、念のためですが、、、。
もしオンラインゲームのチートパッチの類なら、かなり悪質である可能性があります。
おそらく悪さする前に、ノートンに削除されているはずですが、万が一の場合の
ダメージがでかすぎるので用心しましょう。
自分ならWindowsをクリーンインストールしなおさないと、怖くてPC触れないですが。
0458デフォルトの名無しさん
2011/05/11(水) 01:59:27.260459デフォルトの名無しさん
2011/05/11(水) 05:28:13.85aiueo(const char* const filename)
こんな感じで型と引数名の両方にconstが付いてるソースを初めて見たんですが
これは特別な意味があるんでしょうか?
0460デフォルトの名無しさん
2011/05/11(水) 05:31:33.16char const * const filename
この二つは同義
値とポインタの先をconstにするという意味がある
0461デフォルトの名無しさん
2011/05/11(水) 05:45:56.96自分で書く時は
aiueo(const std::string& filenameref)
としてますが自信なくなってきました。
0462デフォルトの名無しさん
2011/05/11(水) 07:54:46.44参照は付け替えができないから事実上const修飾されているも同義。
しかも、定義の場合は意味があるが宣言の場合は意味がない。
つまり、void aiueo(const char * filename);と宣言して、void aiueo(const char * const filename) {}と定義できる。
要は、関数内でfilenameを変更しないと言う戒めとして働くが、利用者には縁のない話。
試しに、
void aiueo(const char * const filename) {
++filename;
* filename = 0;
}
としてconstを付けたり外したりして、どこの行でどんなエラーが出るか較べるといい。
0463デフォルトの名無しさん
2011/05/11(水) 09:20:22.640464デフォルトの名無しさん
2011/05/11(水) 09:33:24.80それ参照じゃねーから
0465デフォルトの名無しさん
2011/05/11(水) 12:21:40.49template <class X>class RefLikePtr
{
public:
RefLikePtr(X & men) : japan(&men) { }
operator X& (void)const {return *japan;}
X*operator ->(void)const {return japan;}
private:
X * japan;
};
これでドット演算が再定義できたら見た目もセクシーになるんだけど何故かできない
ハゲは反省するべき
0466デフォルトの名無しさん
2011/05/11(水) 19:29:37.42ドット演算子がオーバーロード出来ない理由はD&Eを読めハゲ
0467デフォルトの名無しさん
2011/05/11(水) 20:07:00.79無ければドット演算の返り値の型からfooメソッドを探す
あるならその型のfooを返り値に対して呼び出す
見つからなければ再帰する
これでいいじゃん
問題が起こるなんて考えられない
0468デフォルトの名無しさん
2011/05/11(水) 20:11:23.81class T;
class U { T operator . ( void ); };
class T { U operator . ( void ); };
コンパイラが永久ループ しますね
0469デフォルトの名無しさん
2011/05/11(水) 21:13:34.14ttp://codepad.org/HhzRgDlu
このように継承関係がある場合、operator delete(void* p)
に渡されるポインタは、
仮に基底クラスにキャストした時のアドレスと
派生クラスにキャストした時のアドレスが異なる場合、
どちらのアドレスが渡されますか?
それぞれアドレスを出力してみたのですが、
上記のアドレスが異なる状況がどうも作れなかったので質問です。
0470デフォルトの名無しさん
2011/05/11(水) 22:20:53.37ttp://ideone.com/dQXFS
0471469
2011/05/11(水) 22:43:59.19ありがとうございます!!
ということは継承関係があっても
newで渡したアドレスがちゃんとdeleteで帰ってくるんですね!
まじで感謝です!
0472デフォルトの名無しさん
2011/05/11(水) 22:58:19.98…ちゃんと読んだ?
ttp://ideone.com/qEkMz
こっちの方があからさまかな
0474デフォルトの名無しさん
2011/05/11(水) 23:31:53.74> 派生クラスにキャストした時のアドレスが異なる場合、
> どちらのアドレスが渡されますか?
この話の解決になってるの?
0476デフォルトの名無しさん
2011/05/12(木) 00:18:49.85規格を精査するのはめんどくさいので適宜自分でテストコードでも書いて調べて
0478デフォルトの名無しさん
2011/05/12(木) 01:08:23.790479デフォルトの名無しさん
2011/05/14(土) 19:20:15.09クラスのメンバ変数に巨大な配列をnew(malloc)をせずに確保したいのですが
segmentation faultが出てしまいます。
class Hoge
{
private:
double array[1000][1000];
};
解決方法はどういったものがありますか?
環境は gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4) です。
0480デフォルトの名無しさん
2011/05/14(土) 19:56:13.510482デフォルトの名無しさん
2011/05/14(土) 23:42:50.65「Stack Overflow」が出てしまいます。どうすればよいでしょうか
Visual c++ 2010でビルド構成をx64にしています。
0484482
2011/05/15(日) 00:05:36.77ワークステーションで物理メモリが110GBほど乗ってます。
人工衛星の画像解析とかします。
0485デフォルトの名無しさん
2011/05/15(日) 00:08:06.600486482
2011/05/15(日) 00:14:13.79Hause Keeping運用は管制受信系メーカーが別にいるので大丈夫なんです(^^)
0487デフォルトの名無しさん
2011/05/15(日) 00:16:03.570488デフォルトの名無しさん
2011/05/15(日) 00:22:14.34参考情報ありがとうございます。でも今度はこんなエラーが出てしまいました。
>error C2148: total size of array must not exceed 0x7fffffff bytes
ヘルプを見ても解決策が見つからずです・・・
0489デフォルトの名無しさん
2011/05/15(日) 00:29:53.51>An array exceeds the limit. Reduce the size of the array.
http://msdn.microsoft.com/en-us/library/s0z0bbfe%28v=vs.80%29.aspx
・スタックの型を最適化してサイズ圧縮
・スタックを分割
0490デフォルトの名無しさん
2011/05/15(日) 00:32:44.440491デフォルトの名無しさん
2011/05/15(日) 01:31:22.330492デフォルトの名無しさん
2011/05/15(日) 09:15:28.53ツール使ってリークが検出されたら背筋を凍らせながらコードをみる
0493デフォルトの名無しさん
2011/05/15(日) 09:20:33.24他にも悩みが出てくるだろうからインシデント使うかコンサル雇うのが楽だと思うけど。
0494デフォルトの名無しさん
2011/05/15(日) 14:25:10.49boost使えんの?
vectorにshared_ptrかunique_ptr突っ込んでnewしながらヒープも使えよ
それかboost::ptr_vectorなら普通のポインタでもいい
どちらもメモリリークしない(ptrが削除されようとするとデストラクタが自動的に
呼び出されてnewした領域もdeleteされる)
0495482
2011/05/15(日) 14:46:30.35>>489
連続した領域が必要みたいで、ちょっと駄目です。
>>494
boostはたぶん許されると思います。確かにスマポ無しだと危険ですね。
ところでふと思ったのですが、
std::vector<unsigned char> l0_s5_720nm_org(std::size_t(1024) * 1024 * 1024 * 10);
これってスタックに確保されているんじゃないんでしょうか?
エラー無く通過します。一瞬で動作するので本当に動いているか不安ですけど
0496デフォルトの名無しさん
2011/05/15(日) 15:25:32.06スタックに多次元配列の画像でも置いてるのだろうか
>>495
vectorはヒープだと思うよ
ふつうスタックには巨大なデータは置かない置けない
0497デフォルトの名無しさん
2011/05/15(日) 15:32:29.89で、なんでスタックじゃないとだめなん?
聞き方を変えると、スタックに対してヒープの何の違いが問題なの?
0498デフォルトの名無しさん
2011/05/15(日) 15:41:30.400499デフォルトの名無しさん
2011/05/15(日) 15:48:44.280500デフォルトの名無しさん
2011/05/15(日) 16:38:22.24実装簡単だし、速度速いし。先頭覚えておくこと、アラインメントを考慮すること、
くらい分かっていれば簡単だし
0501デフォルトの名無しさん
2011/05/15(日) 17:01:53.08俺もVSはスタックに0x7fffffffという制限があるのを始めて知ったけど
まあ要するに巨大なデータはヒープに置けって事なんだろうな
0502デフォルトの名無しさん
2011/05/15(日) 17:24:50.97scoped_arrayか?
コピー不能だからsort出来ないし
shared_arrayならいいのか
ptr_vectorを使ってもdeleteしてくれるのは1レベルだけだから、ポインタのポインタ
などを入れると一番先のポインタが指している部分がdeleteされないという問題がある
だから生のポインタのポインタなどをptr_vectorに入れるのは危険だ
shared_ptrならカスタムデリータを指定出来るから、ポインタのポインタをクラスで
包んでカスタムデリータにそのクラスのデストラクタを指定すればいいな
0503デフォルトの名無しさん
2011/05/15(日) 17:56:20.670504デフォルトの名無しさん
2011/05/15(日) 18:16:34.40まあな
その方が列ごとあるいは行もresize()出来るし何かと便利だ
0505デフォルトの名無しさん
2011/05/15(日) 18:18:42.78何かバグったらしくてエラー出まくるので入れ直す
MinGWにはこれが一番相性いいしな
0506デフォルトの名無しさん
2011/05/15(日) 18:27:26.31もしかしてこの人
new T[0x7fffffff以上になる"定数"]
ってやってたのかなあ
64ビットクロスコンパイラに配列じゃなくてもC2148が発生する仕様があるんだよね
0507デフォルトの名無しさん
2011/05/15(日) 20:20:20.940508デフォルトの名無しさん
2011/05/15(日) 23:35:53.20スタックは、スタックポインタを上げ下げするだけ。
ヒープ/malloc() はそれに比べるとコストがかかると思う。
ああ、static ならコスト 0 かな。
0509デフォルトの名無しさん
2011/05/15(日) 23:39:35.720510デフォルトの名無しさん
2011/05/16(月) 13:52:25.45<スタック>
確保時に物理メモリを割り当てる=確保は遅いが、その後の処理はフルスピードで実行可能。最適化も崩れない。
<ヒープ>
確保時は仮想メモリアドレスを予約=確保は一瞬だが、その後の処理が最適化されていても、OSが割り込みを使って物理メモリを
適宜割り当てる為、意味無し。前処理としてページ単位に一回ずつアクセス(0以外を書き込み?)しておくのが吉。
かと思ってた。
0511デフォルトの名無しさん
2011/05/16(月) 14:00:00.91>、OSが割り込みを使って物理メモリを適宜割り当てる為
割り込みなんて使う必要があるか?周辺機器じゃないぞ
0512デフォルトの名無しさん
2011/05/16(月) 14:02:55.58あらかじめ確保しておいて使い回すのがスタック。
自動変数などはC言語が確保しているスタック内で動作する。
ヒープは管理外のメモリを毎回OSの命令を呼び出して確保。その分オーバーヘッドあり。
0513デフォルトの名無しさん
2011/05/16(月) 14:04:01.71確保されている領域の使い回し=スタック。
毎回確保しにいく=ヒープ。
0514デフォルトの名無しさん
2011/05/16(月) 14:05:33.76>ヒープは管理外のメモリを毎回OSの命令を呼び出して確保。
毎回じゃないだろ
OSのメモリ要求APIはかなり重いのが慣例で、そのためにいつも余分に確保し、
ヒープ領域はその中かから切り出して使う
malloc()やnewする度にOS呼び出してたら遅くて使い物にならないぞ
0515デフォルトの名無しさん
2011/05/16(月) 14:18:49.94Windowsに関して言えば、APIは必ずしもシステムコールではないので
API呼んだら常にコンテキストスイッチが発生してカーネルモードの
コードが走るとは限らない
いちいちカーネルモードに遷移しないAPIの典型例は
CriticalSectionやInterlocked系のAPI
現に今のMSVCのmalloc()はHeapAlloc()を使うような実装になっていたと思うよ
HeapAlloc()は内部的にVirtualAlloc()呼ぶときだけカーネルに頼ってる
んじゃないのかな、たぶん
0516デフォルトの名無しさん
2011/05/16(月) 14:24:58.05ヒープ⇒毎回確保しにいく
っつーのも間違いだな
0517デフォルトの名無しさん
2011/05/16(月) 14:28:17.930518デフォルトの名無しさん
2011/05/16(月) 14:30:13.75話を逸らすなよ
今メモリ要求の話してるんだろ
0519デフォルトの名無しさん
2011/05/16(月) 14:31:33.82逸らすなといわれても、俺は上でレスをしていた人間じゃないので……
そういう意図は無いとしかいいようがない
0520デフォルトの名無しさん
2011/05/16(月) 14:32:31.79sbrk()はメモリが確保出来なくても成功するからな
実行してみて「やっぱり足りませんでした」となってようやくコア
http://archive.linux.or.jp/JM/html/LDP_man-pages/man2/sbrk.2.html
0521デフォルトの名無しさん
2011/05/16(月) 14:40:57.09内部で使ってるんだからsbrkの問題、とかいわないでくれるといいんだけど。
0522デフォルトの名無しさん
2011/05/16(月) 18:15:51.380523デフォルトの名無しさん
2011/05/16(月) 18:18:06.230524デフォルトの名無しさん
2011/05/16(月) 18:28:00.38int value = 999;
std::string str;
str = "value = " + value;
0525デフォルトの名無しさん
2011/05/16(月) 18:33:23.34std::ostringstream str;
str << "value" << 999;
で str.str() を参照
Cのsprintf()に相当する
0526デフォルトの名無しさん
2011/05/16(月) 19:05:27.710527デフォルトの名無しさん
2011/05/16(月) 19:06:57.010528デフォルトの名無しさん
2011/05/16(月) 19:17:35.80ありがとう。
なんか不細工だけど自分でStringクラス作るのはやめとくよ。
0529デフォルトの名無しさん
2011/05/16(月) 19:21:31.66itoa()は非標準だし
0530デフォルトの名無しさん
2011/05/16(月) 19:24:49.66え?
0531デフォルトの名無しさん
2011/05/16(月) 19:41:00.310532デフォルトの名無しさん
2011/05/16(月) 20:34:32.510x の to_string に御期待下さい。
0533デフォルトの名無しさん
2011/05/20(金) 15:23:51.330534533
2011/05/20(金) 15:25:01.940535デフォルトの名無しさん
2011/05/22(日) 11:01:11.080536デフォルトの名無しさん
2011/05/22(日) 11:40:14.54たぶんウィンドウズで使用されているコンパイル済みのライブラリを
利用するための技術。
ttp://e-words.jp/w/COM.html
何言語かは関係ない。
0537デフォルトの名無しさん
2011/05/24(火) 22:26:07.22おすすめの本ありませんか?
0538デフォルトの名無しさん
2011/05/24(火) 23:45:41.94旧スタイルも残しておきたいとき、
#if _MSC_VER >=1400
で分けようと思っていますけど、これで大丈夫でしょうか?
ほかにも何か判定しなければいけないでしょうか。
よろしくお願いします。
0539デフォルトの名無しさん
2011/05/26(木) 00:33:48.70判定とは違うけど、_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMESで
済む箇所はできる限りそれで済ませて分岐を減らすくらいかな。
0540デフォルトの名無しさん
2011/05/27(金) 19:33:27.08半角全角で1:2バイトのようにサイズが違ってしまい、面倒です。(現在:SJIS)
どういった文字コードを使えば固定長=1文字のような形式になりますか?
例:a:1byte あ:2byte => a:3byte あ:3byte にしたい
0541デフォルトの名無しさん
2011/05/27(金) 19:35:53.030542デフォルトの名無しさん
2011/05/27(金) 19:52:06.03無知ってすごいな
0543デフォルトの名無しさん
2011/05/27(金) 19:53:15.800544デフォルトの名無しさん
2011/05/27(金) 22:39:53.540545デフォルトの名無しさん
2011/05/28(土) 02:19:50.71無理。固定長の文字コードなんてない。
まずはバイナリと文字との変換ライブラリを作る
0546デフォルトの名無しさん
2011/05/28(土) 02:29:44.570547デフォルトの名無しさん
2011/05/28(土) 02:44:36.74どうせ可変長になるんだから
ハングル大暴走するし
0548デフォルトの名無しさん
2011/05/28(土) 03:28:33.31中国の漢字も増えてた気がするけど、増やさずにはいられないのかな
0550デフォルトの名無しさん
2011/05/28(土) 10:44:47.630551デフォルトの名無しさん
2011/05/29(日) 00:41:37.07考えられる全部の組み合わせを出したんだって
そのうち今使われているハングルは全体の1/3程度
しかしこれから使うようになるかもしれないから全部出しておけば
大丈夫だと思ったんだろう
Batang.ttfのサイズの大きさを見ても分かるようにハングルの文字数は
世界最大
原因はそれだけじゃないがWikipediaを見てもらうと分かるけど大移動
が起きて結局サロゲートペアを使わざるを得なくなったしそんな複雑な
状況ならUTF-32に統一してしまえばいいと思う
0552デフォルトの名無しさん
2011/05/29(日) 23:14:48.070553デフォルトの名無しさん
2011/05/30(月) 01:52:05.880554デフォルトの名無しさん
2011/05/30(月) 19:03:54.690555デフォルトの名無しさん
2011/05/30(月) 23:37:13.53Box2D 2.1.2を落としてサンプルをコンパイルしていじってみたいと思っているのですが、
Testbedのコンパイルの手順を教えてくれませんか。
ちなみにEclipseを使用しています
0556デフォルトの名無しさん
2011/05/31(火) 01:21:04.39そこで疑問に思ったのですが2DDフロッピーのような現代から見て比較的小容量な記憶媒体が使われていた時代はどの様に小容量化していたのでしょう?
0557デフォルトの名無しさん
2011/05/31(火) 01:24:06.79あまり使われてなかったけど
0558デフォルトの名無しさん
2011/05/31(火) 02:14:35.520559デフォルトの名無しさん
2011/05/31(火) 10:12:08.270560デフォルトの名無しさん
2011/05/31(火) 10:14:42.620561デフォルトの名無しさん
2011/06/01(水) 00:16:16.60cout.fill("*");
VC++ 2010にて引数が一致しないと表示されるのですが、原因が全くわかりません。
同様に、
char c = "c";
もエラーです。
文字に対する誤解があるようなら、そこも指摘していただけるとありがたいです。
0562デフォルトの名無しさん
2011/06/01(水) 00:22:59.23char c = 'c';
もしくは
char *c = "c";
シングルクォートとダブルクォートで囲んだときに
どう扱われるかの違いだね
0563デフォルトの名無しさん
2011/06/01(水) 00:32:35.52独学はこういう所が怖いです
0564デフォルトの名無しさん
2011/06/01(水) 02:25:07.95言語の本を買うのが手っ取り早いよ。C++なら、せめて「プログラミング言語C++」を。
0565デフォルトの名無しさん
2011/06/01(水) 03:07:22.670566デフォルトの名無しさん
2011/06/01(水) 03:14:33.72習得した後から考えるとスゲーあほなことで長時間はまる的な
0568デフォルトの名無しさん
2011/06/01(水) 04:18:48.040569デフォルトの名無しさん
2011/06/01(水) 09:45:52.86エラーハンドラをセットして、それがNULLならexit(EXIT_FAILURE)してるんだけど
exitで終了するのはC++的には安全なの?
0570デフォルトの名無しさん
2011/06/01(水) 11:12:30.03ローカルオブジェクトのデストラクタは呼ばれないけど、
プログラムが終了するという動作はちゃんと定義されている。
それが安全と言えるかどうかはアプリケーションによるところ。
0571デフォルトの名無しさん
2011/06/01(水) 23:20:16.35WriteFileを使って3ケタの整数(値は変動します)をファイルに書き込みたいのですがどのようにすればいいのでしょうか?
またjpgの縦と横の解像度を取得するにはどうすればいいでしょうか?
0574デフォルトの名無しさん
2011/06/01(水) 23:45:33.10呼び出し元がリソース解放しない状態でプログラム終了していいわけないだろ。
>>573
atoi。
EXIFならともかくJPEGに解像度なんて無いだろ
0575デフォルトの名無しさん
2011/06/01(水) 23:48:36.20前者。一旦sprintf()かなにかで文字列にしてから書けばいいのでは?
後者。それをサポートしているライブラリを探すのが手っ取り早いかと。
0576デフォルトの名無しさん
2011/06/01(水) 23:50:54.34解放すべきリソースがないか、atexit()で解放関数が登録済みならexit()してもいいじゃん。
それが乱用しないってことだろ。
0577デフォルトの名無しさん
2011/06/01(水) 23:52:14.24>>572は>>571だけにレスしてて>>569は関係ないんじゃない?
0578デフォルトの名無しさん
2011/06/01(水) 23:54:57.70lpBufferに突っ込むだけだろ
jfifということならSOIのunits
0579デフォルトの名無しさん
2011/06/02(木) 00:03:13.96ただの一関数が「解放すべきリソースが無い」かどうかの
判断なんて無理でしょ。
使い捨てプログラムならexitしても構わないけど
0580デフォルトの名無しさん
2011/06/02(木) 01:30:07.86ありがとうございます。
前者についてはatoiを使用し解決しました。
後者についてはIndependent JPEG Groupなどを使ってみようと思います
0581デフォルトの名無しさん
2011/06/02(木) 02:48:47.93んな馬鹿な(´Д` )
0582デフォルトの名無しさん
2011/06/02(木) 08:00:14.44なんでそう思ったの?君がアホだから?
0583デフォルトの名無しさん
2011/06/02(木) 09:20:44.210584デフォルトの名無しさん
2011/06/02(木) 10:59:29.840585デフォルトの名無しさん
2011/06/02(木) 11:44:44.760586デフォルトの名無しさん
2011/06/02(木) 12:30:45.600587デフォルトの名無しさん
2011/06/02(木) 13:05:21.18デストラクタの中だとこれは困る
0588デフォルトの名無しさん
2011/06/02(木) 13:09:26.05リソース解放でエラーが出ないってのは別の次元の話
デストラクタでエラーが出たら握りつぶすしか無いだけ
0589デフォルトの名無しさん
2011/06/02(木) 15:12:54.41データが多く、配列・変数が混在したパラメータがあり、
どうDllに渡すか迷っています。
良い手ありますか?
引数を大量にもつ。構造体を使う。データファイルへ埋め込みパス渡し。
a,b,c,d,e,f[][],g[]とか、いっぱい。
返値もいっぱい。
よく使う手があれば、教えてください。
0590デフォルトの名無しさん
2011/06/02(木) 15:22:19.85メモリマップドファイル
0591デフォルトの名無しさん
2011/06/02(木) 17:57:12.360592デフォルトの名無しさん
2011/06/02(木) 20:55:02.49buffer[0]=0x00;
buffer[1]=0x00;
buffer[2]=0x00;
buffer[3]=0x14;
20byte読み込みたい
DWORD dwSize = (DWORD)&buffer;
dwSizeが0x14000000になってしまう
0x00000014にはならないのですか?
0593デフォルトの名無しさん
2011/06/02(木) 20:57:31.020594デフォルトの名無しさん
2011/06/02(木) 21:03:18.390595デフォルトの名無しさん
2011/06/02(木) 21:20:21.05検索したら変換方法見つけたのでそれ使ったら期待通りになりました
ども
0596デフォルトの名無しさん
2011/06/02(木) 21:35:22.830597デフォルトの名無しさん
2011/06/02(木) 23:27:18.77だれうま
0598デフォルトの名無しさん
2011/06/03(金) 01:24:30.26仮にDWORD dwSize = *(DWORD *)buffer; の間違いだとしても
x86以外で即バスエラー起こす糞コード。
0599デフォルトの名無しさん
2011/06/03(金) 02:06:52.850600デフォルトの名無しさん
2011/06/03(金) 02:12:48.110601デフォルトの名無しさん
2011/06/03(金) 07:19:08.52すくなくともビッグエンディアンは全部アウチだろう
0602デフォルトの名無しさん
2011/06/03(金) 12:40:17.37バスエラーは出ないだろう
0603デフォルトの名無しさん
2011/06/03(金) 15:49:32.220604デフォルトの名無しさん
2011/06/03(金) 17:13:24.660605デフォルトの名無しさん
2011/06/03(金) 17:44:22.79というエラーが大量に出ますどういう意味ですか?初級者ではなく完全な初心者です。
XInputをC#から使いたくてC++/CLIにDirectXC++のサンプルをコピーしてみてるんですが手がつけられないほどエラーが出るので
試しにC++のプロジェクトにコピーしてるんですが、
#pragma comment(lib,"xinput.lib ")
#include <XInput.h>
#include <windows.h>
を空のプロジェクトに追加して、
#define MAX_CONTROLLERS 4
struct CONTROLER_STATE
{
XINPUT_STATE lastState;
XINPUT_STATE state;
DWORD dwResult;
bool bLockVibration;
XINPUT_VIBRATION vibration;
};
HRESULT UpdateControllerState();
CONTROLER_STATE g_Controllers[MAX_CONTROLLERS];
これを書いたらエラーがでました。他に何をすればいいんですか?
0606デフォルトの名無しさん
2011/06/03(金) 18:20:49.600607デフォルトの名無しさん
2011/06/03(金) 19:04:36.05> #include <XInput.h>
> #include <windows.h>
#include <windows.h>
#include <XInput.h>
0608デフォルトの名無しさん
2011/06/03(金) 19:23:30.80もう大丈夫ですC++CLIに突撃します
0609デフォルトの名無しさん
2011/06/03(金) 19:30:37.180610デフォルトの名無しさん
2011/06/03(金) 22:44:06.500611デフォルトの名無しさん
2011/06/03(金) 22:49:02.15ログ出力とか
クラッシュレポートとか?
あとはboost/static_assertくらいじゃね?高度って意味とは違うけど
0612573
2011/06/05(日) 16:29:50.21上のプログラムをVC++2010でビルドすると
1>c:\program files\microsoft visual studio 10.0\vc\include\jpeglib.h(954): error C2061: 構文エラー : 識別子 'FILE'
1>c:\program files\microsoft visual studio 10.0\vc\include\jpeglib.h(955): error C2061: 構文エラー : 識別子 'FILE'
main.cpp(30): error C2660: 'jpeg_stdio_src' : 関数に 2 個の引数を指定できません。
とエラーが出るのですがどう対処すればいいのでしょうか?
またmemory.hは必要でしょうか?
0613デフォルトの名無しさん
2011/06/05(日) 16:32:36.50jpeglibをインクルードの最後に移動してみたら?
0614612
2011/06/05(日) 16:40:32.04#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define XMD_H
#undef FAR
extern "C" {
#include <jpeglib.h>
}
こうした場合は下のようにlibjpegの関数がすべてエラーとなります。
1>main.obj : error LNK2019: 未解決の外部シンボル _jpeg_destroy_decompress が関数 _main で参照されました。
0615デフォルトの名無しさん
2011/06/05(日) 16:49:48.56>>612はコンパイルエラー
>>614はリンクエラー
何か指定しないといけないライブラリーがあるんじゃない?
0616デフォルトの名無しさん
2011/06/05(日) 16:50:03.700617612
2011/06/05(日) 19:55:49.94#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#define XMD_H
#undef FAR
extern "C"{
#include <jpeglib.h>
}
#pragma comment(lib, "jpeg.lib")
jpeg.libをリンクした場合ビルドが成功しコマンドラインが表示されるのですが、下のような警告出て終了します。
http://www1.axfc.net/uploader/Img/so/117523
0618デフォルトの名無しさん
2011/06/05(日) 20:20:55.130619デフォルトの名無しさん
2011/06/07(火) 12:03:13.34項目名を直接に識別子にして
void SetVal(string,int)
int GetVal(string)
とするのと
項目名に列挙子等を利用するのはどちらが望ましいのでしょうか?
0620デフォルトの名無しさん
2011/06/07(火) 12:51:17.75std::mapとかじゃダメなの?
そんなに車輪の再発明したいの?
0621デフォルトの名無しさん
2011/06/07(火) 13:25:45.080622デフォルトの名無しさん
2011/06/07(火) 16:34:52.26pg_fetch_arrayとpg_fetch_objectというのが具体的にどういう物かはしっかり理解できていませんが
クラスのインターフェイスをどういう風にして
メンバのコンテナを
std::map<int,int>とするのがいいのかstd::map<string,int>としたほうがいいのか?
どちらが一般的でしょうか?といういみで尋ねました。
0623デフォルトの名無しさん
2011/06/07(火) 18:02:08.03理由は調べてね
ただこれを自分で判断できんのはどうかと思う
0624デフォルトの名無しさん
2011/06/07(火) 18:46:19.37つーことで、連想配列お勧め。
0625デフォルトの名無しさん
2011/06/08(水) 10:12:09.01Nよりも大きなアラインメントを持った型を作る方法ってありますか?
256byte、4096byteなど大きな境界を持った領域がほしいのですが
今は多めにとって余分なところを捨ててるので、もったいないので何とかしたいです
0626デフォルトの名無しさん
2011/06/08(水) 10:34:51.48コンパイラによっては拡張機能として持っているものがある。
動的確保するつもりなら、これも標準じゃないけど環境によっては
memalign() とか使えるかもしれない。
0627デフォルトの名無しさん
2011/06/08(水) 11:09:42.96処理系がその機能を提供してくれても、中でやることは同じだと思うなぁ
0628デフォルトの名無しさん
2011/06/08(水) 11:10:29.13どうも。memalignでググッたらそれっぽいページが見つかりました
残念ながら拡張機能か切り捨てしかないみたいでした・・・
0629デフォルトの名無しさん
2011/06/08(水) 11:17:04.360630デフォルトの名無しさん
2011/06/08(水) 14:51:00.57この選択で、メンテの手間が少ないのがどっちかを知るのは難しいと思うよ
0631デフォルトの名無しさん
2011/06/08(水) 15:51:28.19メッセージループは以下の様に書いています。
while(GetMessage(&msg , NULL , 0 , 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
〜処理全般(キー入力もプロシージャ上ではなくWPARAMやmessageを取ってここでやっています;)〜
}
しかしこれでは、
マウスカーソルの移動後1回目のキー入力のみ or マウスカーソルの移動中 or デバッグモードで止まった後
しかキー入力が正しく取得されず、1回キー操作をするごとに操作できなくなってしまいます。
どう書き換えれば常にキー入力を取得できるようになるでしょうか?
また、もし目的別のメッセージループの書き方のサンプル/説明サイトが有れば教えて頂けますと幸いです;
0632デフォルトの名無しさん
2011/06/08(水) 16:10:02.390634デフォルトの名無しさん
2011/06/08(水) 19:54:09.710635631
2011/06/09(木) 01:45:03.88えっと、>>633の時点で、PeekMessageを使ってキーを常に取得できるとわかりそうしていたのですが、
それでは内部に作った子窓にマウスでフォーカスが行かないとわかり、
結局今は元のメッセージループを使い、大人しくプロシージャの中でキー入力を取得しております;
0636デフォルトの名無しさん
2011/06/09(木) 02:14:36.33CreateWindow関数でWS_CHILDして作ったコンボ・ラジオ・テキスト等の「入力中」に
「特定のキー操作」で「親窓、または次の入力用の子窓にフォーカスを移動(SetFocus)する」というのはどうすれば実現できるでしょうか?
一度子窓にフォーカスが入ってしまうと、もう親窓で設定したキー操作が通用しなくなり困っています;
0638デフォルトの名無しさん
2011/06/09(木) 13:35:19.48コントロールを拡張する
サブクラス化
0640636
2011/06/09(木) 21:40:56.13名前だけは聞いていましたが、サブクラス化、かなり強力な機能なんですね。
メッセージフックより楽に開発できる・・のかもしれません。ご助言ありがとうございました。
0641デフォルトの名無しさん
2011/06/10(金) 14:55:49.190642デフォルトの名無しさん
2011/06/10(金) 15:06:57.68定義されてからコンパイル単位終了まで
0643デフォルトの名無しさん
2011/06/10(金) 15:10:41.480644デフォルトの名無しさん
2011/06/10(金) 16:52:53.58コンパイラの文字コード
コードのコードページ(ロケール?)
実行環境の文字コード
実行環境のコードページ
が一致してないともじばけするってことでいいの?
0645デフォルトの名無しさん
2011/06/10(金) 17:25:17.57コンパイラはバイト列としてしか認識してないでしょ
C++0xだとまた話変わるだろうけど
0646デフォルトの名無しさん
2011/06/10(金) 17:30:41.500647^Z
2011/06/11(土) 12:59:03.66Borland 罠
if(bcc32)
else if(gcc)
else if(cl)
main(){int a;
printf("%d\n", scanf("%d",&a));}
0648デフォルトの名無しさん
2011/06/11(土) 13:50:15.41要求されたサイズのどこまでがオーバーヘッドのサイズがわからないから
アラインメントを合わせることが実質不可能だからやるだけ無駄?
0649デフォルトの名無しさん
2011/06/11(土) 14:19:08.99URLはpathの最大文字数とかって決まりはあるのですか?
0651デフォルトの名無しさん
2011/06/11(土) 14:38:09.50MAX_PATHも実際は当てにならないけどね。
0652デフォルトの名無しさん
2011/06/11(土) 14:53:23.90ヘ⌒ヽフ
( ・ω・) �d�d
/ ~つと)
0653デフォルトの名無しさん
2011/06/11(土) 15:46:18.90MAX_PATHはパス長の最低保証だからな
0654デフォルトの名無しさん
2011/06/11(土) 17:19:31.12特殊なアライメントまで考慮してポータブルなものを作るということなら、不可能だろうね。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#476
使ってるコンパイラで動くものなら作れるだろうから、無駄かどうかは知らない。
0655デフォルトの名無しさん
2011/06/11(土) 17:20:17.980656デフォルトの名無しさん
2011/06/12(日) 22:18:29.81そこでSetWindowLong関数ですり替えるウィンドウプロシージャを全部共有したいのですが、色々試しても上手く行きません;
良い解説サイト、ググるべきキーワードなど有れば教えて頂けませんでしょうか。よろしくお願いします。
0657656
2011/06/12(日) 22:31:21.950658デフォルトの名無しさん
2011/06/12(日) 22:38:21.26SetWindowSubclass
0660デフォルトの名無しさん
2011/06/13(月) 03:26:18.42char* msgのバッファは呼び出し元関数のcatchスコープまで残るでしょうか
できればスタックを投げたいです
try
{
,,,,char* msg = "Hello World";
,,,,throw msg;
}
catch (char* msg)
{
,,,,// 関数の呼び出し元へthrow
,,,,throw msg;
}
0661デフォルトの名無しさん
2011/06/13(月) 03:35:31.36newして飛ばせ
0662デフォルトの名無しさん
2011/06/13(月) 03:41:09.43ありがとうございます
0663デフォルトの名無しさん
2011/06/13(月) 06:24:36.92例示されたコードは文字列リテラルのアドレスだから問題はない
スタックにある文字列は無理だが
具体的にはchar s[] = "Hello World"; に変えたら無理だな
0664デフォルトの名無しさん
2011/06/13(月) 18:26:04.81誰もdeleteしてくれなかったらどうするんだ
素直にテンポラリオブジェクトを投げなさい
0665デフォルトの名無しさん
2011/06/13(月) 18:55:27.24でいいよ
多分
0666デフォルトの名無しさん
2011/06/13(月) 18:57:04.140667デフォルトの名無しさん
2011/06/13(月) 22:36:20.03とかいう意味じゃなくて?
0668660
2011/06/14(火) 01:23:54.14だから参照渡しであってもスタックを渡せない
スマートポインタ(テンポラリオブジェクト)は
良いアプローチだと思うけど、一般的には使われていなそう
0669デフォルトの名無しさん
2011/06/14(火) 20:52:22.64int a = 1234 int ary[4]とあったら
ary[0] = 1, ary[1] = 2, ary[2] = 3, ary[3] = 4となるように
sprintf( buff, "%d", a)
ary[0] = buff[0] - (char)'0'
この2行で出来てはいるのですが
もっとスマートな方法はないですか?
0670デフォルトの名無しさん
2011/06/14(火) 20:54:03.91それ int ary[4]じゃなくて char ary[4] だろ
0671デフォルトの名無しさん
2011/06/14(火) 20:57:17.01char a = '0'
a = 48をa = 0にしたいのです
0672デフォルトの名無しさん
2011/06/14(火) 21:00:19.760673デフォルトの名無しさん
2011/06/14(火) 21:02:43.55ary[0] = buff[0] - 48 みたいなのは抵抗が・・・
0674デフォルトの名無しさん
2011/06/14(火) 21:05:33.38横着せずにatoi()使え
0675デフォルトの名無しさん
2011/06/14(火) 21:09:07.95int a = 1234;
int ary[4];
char buff[4]
sprintf( &buff[0], "%d", a)
for ( i =0; i<4 i++ ) {
ary[i] = atoi( buff[i] )
}
0676デフォルトの名無しさん
2011/06/14(火) 21:09:49.960677デフォルトの名無しさん
2011/06/14(火) 21:11:32.25ヌルターミネータ'\0'がないぞ
0678デフォルトの名無しさん
2011/06/14(火) 21:12:19.01計算して出すとすれば、
for (i = 0, n = 1000; i < 4; i++){
ary[i] = a / n;
a -= ary[i] * n;
n /= 10;
}
めんどくさいね・・
0679デフォルトの名無しさん
2011/06/14(火) 21:21:31.091234 % 10 → 4
123.4 % 10 → 3
12.34 % 10 → 2
1.234 % 10 → 1
これは素晴らしい
目からウロコとはこの事です
ありがとうございました
0680デフォルトの名無しさん
2011/06/14(火) 22:53:27.56-'0'でよくね?
0681デフォルトの名無しさん
2011/06/14(火) 23:17:33.08>>674へのツッコミをするためだけのレスならそれでいいけれど、
元の質問から行けば、そもそも文字列にしなくていいんだよ。
0682デフォルトの名無しさん
2011/06/15(水) 08:59:15.39# int FuncID, string FuncName
1, Hoge::Foo
2, Hoge::Bar
3, Fuga::Foo
4, Fuga::Baz
このような形式のファイルを読み込んで、配列に整数から関数へのマッピングを作りたいんですが(関数の型はすべて同じです)、可能でしょうか?
0683デフォルトの名無しさん
2011/06/15(水) 09:52:44.370684デフォルトの名無しさん
2011/06/15(水) 10:56:57.40可能だよ。
0685デフォルトの名無しさん
2011/06/15(水) 12:30:17.560686デフォルトの名無しさん
2011/06/15(水) 12:37:24.85クラスに自前で用意する必要があるっていいたいの?ねぇ!?
0687デフォルトの名無しさん
2011/06/15(水) 15:14:19.71Linuxとかでも出来そうだけど知識ないから教えて偉い人
0688デフォルトの名無しさん
2011/06/15(水) 17:11:18.82関数ポインタとかboost::function使えば簡単では
0689デフォルトの名無しさん
2011/06/15(水) 17:13:40.59関数ポインタでも使えばいいんじゃね?
0690デフォルトの名無しさん
2011/06/16(木) 08:15:48.08class Base{
public:
virtual void Paint() = 0 ;
};
class Derived : public Base{
public:
int n ;
void Paint(){
cout << "Call Derived Paint\n";
}
};
int _tmain(){
Base* c = new Derived() ;
c->Paint() ;
return 0 ;
}
この形でDerivedだけが持つ変数nなどをmainから書き換える事は出来るのでしょうか?
実際はDerivedにHWND等を渡したいのですがstaticなりでグローバルに宣言しておかないとダメですか?
0691デフォルトの名無しさん
2011/06/16(木) 08:28:03.680692デフォルトの名無しさん
2011/06/16(木) 09:32:49.840693デフォルトの名無しさん
2011/06/16(木) 10:30:56.39Base*として受け取ることがおかしいのでは。
0694デフォルトの名無しさん
2011/06/16(木) 13:37:22.70こういうことがしたいこと?
ttp://ideone.com/pt4AJ
0695694
2011/06/16(木) 13:39:04.52ttp://ideone.com/Sjunr
0696デフォルトの名無しさん
2011/06/16(木) 17:06:15.27レスありがとうござます!
今から試してみます
0697デフォルトの名無しさん
2011/06/16(木) 19:01:45.55deleteしてくれるスマートポインタになってる?
struct Orz { char* name };
Orz p = new Orz;
vector<Orz*> buffer;
buffer += p;
0698デフォルトの名無しさん
2011/06/16(木) 19:21:48.87なるわけねーだろカス
0699デフォルトの名無しさん
2011/06/16(木) 19:38:55.71std::vector<boost::shared_ptr<Orz>> hoge;
ならスマポになる
auto_ptrなんて入れるなよ!絶対だぞ!
0700デフォルトの名無しさん
2011/06/16(木) 19:55:22.210701697
2011/06/16(木) 21:43:25.95スマポのコンテナ(内部で T* ptrBuffer[?]をもってるようなやつ)
がありそうでないのですな。
0702デフォルトの名無しさん
2011/06/16(木) 22:05:51.73こういうこと?
boost::shared_array<int> Array(new int[10]);
0703デフォルトの名無しさん
2011/06/16(木) 22:06:36.340704デフォルトの名無しさん
2011/06/17(金) 00:02:24.94クラス内部でnewするようにする
0705デフォルトの名無しさん
2011/06/17(金) 00:32:36.41そんな面倒な事をする位ならvector<vector<T> >にして
後からresize()するわ
0706697
2011/06/17(金) 00:43:38.94typedef vector< auto_ptr<int> > VECTOR_PINT
VECTOR_PINT varray;
varray += new int(7);
varray += new int(5656);
varray += new int(999);
0707デフォルトの名無しさん
2011/06/17(金) 00:49:54.39それはCOAP(Container of auto_ptr)だ
コンパイルが通らないコンパイラもある
0709デフォルトの名無しさん
2011/06/17(金) 03:15:01.91typedef shared_ptr<int> int_ptr;
typedef vector<int_ptr> int_ptr_vector;
using namespace boost::assign;
int_ptr_vector v;
v += int_ptr(new int(7));
v += int_ptr(new int(5656));
v += int_ptr(new int(999));
0710デフォルトの名無しさん
2011/06/17(金) 06:52:13.740711デフォルトの名無しさん
2011/06/17(金) 06:56:42.290712デフォルトの名無しさん
2011/06/17(金) 10:13:16.63「不適切な Ptr」の状態のポインタ変数を、ifで検出したいのですが、==NULLや ==0では検出できず困っています。
構造的にそうならないよう作るしか手は無いのでしょうか? それとも検出方法は有るのでしょうか?
0713デフォルトの名無しさん
2011/06/17(金) 10:28:51.76初期化してないことが問題。
hoge* p = 0;
明示的に初期化すれば0で判定ができる
あとは使い終わったなら0を入れておく
delete p;
p = 0;
あとは普通に
if(p)
{
}
とか
0714デフォルトの名無しさん
2011/06/17(金) 10:38:21.43とか書いて混乱させてみる
0715712
2011/06/17(金) 11:05:24.38なるほど。そうすれば検出できるのですね。 ありがとうございます。
>>714
その様な機能が有るのですね。まだ詳しく理解できず私には早いみたいですが勉強になります。
ありがとうございました。
0716デフォルトの名無しさん
2011/06/17(金) 15:27:55.22意外とoptionalは簡単だぞ 余計なお世話かもしれないが
ttp://www.kmonos.net/alang/boost/classes/optional.html
考え方的には
template<class T>
class{
T val;
bool IsValid;
};
こういうこと
0717デフォルトの名無しさん
2011/06/17(金) 17:54:28.74実装見てこい
0718デフォルトの名無しさん
2011/06/17(金) 19:03:32.05kwsk
0719デフォルトの名無しさん
2011/06/18(土) 01:13:47.22717 じゃないけど、それだと T が常に初期化されてることになりそう。
0720デフォルトの名無しさん
2011/06/18(土) 01:42:00.160721デフォルトの名無しさん
2011/06/18(土) 18:18:15.40メモリからロードとかできないのかな
0722デフォルトの名無しさん
2011/06/18(土) 18:23:43.090723デフォルトの名無しさん
2011/06/18(土) 20:01:52.96CreateControlWindowで作ったリストボックス(単一項目選択型)の選択項目の値
(SendMessageで作った項目の第三引数のWPARAMに設定した値)
を取得したいのですが、やり方が解らず困っております。
色々検索してみてもC++で書いている情報を見つけられず、
CB_SETCURSELやBM_SETCHECKで試してみるも何も成果が得られず困っております;
何かヒントだけでも頂けますと幸いです;
0724723
2011/06/18(土) 20:19:28.77値の方も自己解決できると思います。 失礼しました;
0725デフォルトの名無しさん
2011/06/19(日) 04:57:39.18何か悪い事でもしたの?
0726デフォルトの名無しさん
2011/06/19(日) 08:47:48.42しかし、5次の多項式の係数を、SetCoeff(a,5,4)とやっても[[1][1][][1]]
という出力になって正しくできません。
使い方のサンプルがないので困っています。どなたかNTLライブラリの使い方に
詳しい方がいらっしゃいましたら教えてください。よろしくお願いします。
http://ideone.com/wph99
0727デフォルトの名無しさん
2011/06/20(月) 18:16:15.67いろいろあると思いますが、例を教えてください。
プログラムはVS2005 VC++, MFCを用いて作成しました。
windowsXP SP3とDirectX9.0cの2つはビルドPCと実行PCで共通しています。
0728デフォルトの名無しさん
2011/06/20(月) 18:54:50.980729デフォルトの名無しさん
2011/06/20(月) 23:06:54.78ありがとうございます。
自分なりに調べてみたのですが、
Dependency Walkerという無料ソフトでexeファイルをみてみたところ、
GPSVC.DLL
IESHIMS.DLL
の2つにError opening fileと表示されました。
こういった場合、どのように対処したらよいのでしょうか。
0730729
2011/06/20(月) 23:20:03.09他のexeファイルをなるべく実行したくありません。
vcredist_x86.exeなど?
0731デフォルトの名無しさん
2011/06/20(月) 23:38:30.37セットアッププロジェクトを作るのが楽だと思うよ。
インストーラを作成するという手間が増えることはたしかだけど、インストーラの作成自体は以前より格段に楽になってるので、めげずに。
0732デフォルトの名無しさん
2011/06/21(火) 02:24:07.91Javaはある程度できるようになってます。
Cもネットでですが一通り目を通しました。
こういうものか、ってイメージはわいてます。
C++にいくのに独習C++を考えてます。
ただ、Visual C++っていうのが気になってます。
これって、いったい何なんですか?
0733デフォルトの名無しさん
2011/06/21(火) 03:14:43.76それより、同じ著者の標準講座c++の方がいい。
あと、VC++ってのは、C++言語でWindowsのアプリケーションを組むんだよ。
今君が使ってるInternetExplorerとかEXCELとか。
0734デフォルトの名無しさん
2011/06/21(火) 07:11:30.220735デフォルトの名無しさん
2011/06/21(火) 10:47:49.62いきなりC++やる人向け
すでにC++できる人向け
VC++の本
0736デフォルトの名無しさん
2011/06/21(火) 11:18:55.58ご丁寧にありがとうございます。
「独習」シリーズを3冊(Java、Javaサーバサイド、
JavaScript)もっているので、C++も「独習」で
いいかと安易に考えていました。
0737デフォルトの名無しさん
2011/06/21(火) 11:21:25.55で、もうひとつだけ教えてください。
VC入門っていう本もたくさんあるんですけど、
C++を何も知らず、いきなりVC入門の書籍って
いうのはどんなものなんでしょうか?
C++についての基礎なんかは習得済みの
人を対象としているものなんでしょうか?
それとも特定のIDEやコンパイラに特化
していることを強調しているだけで、
C++入門としても使えるものなんでしょうか?
0738デフォルトの名無しさん
2011/06/21(火) 11:33:57.80まず無理だからやめとけ
0739デフォルトの名無しさん
2011/06/21(火) 11:43:46.43統合開発環境VisualC++の使い方、みたいな内容だろたぶん
素直にやさしいC++でも読みな あるいはロベールとか
0740デフォルトの名無しさん
2011/06/21(火) 11:46:27.16少し前にこのスレだか関連スレだかで話題になったけど
VC++を謳う書籍・サイトはC++/CLIと言うC++とは似て非なる言語を
C++と称している
0741デフォルトの名無しさん
2011/06/21(火) 12:42:21.78マジでC++/CLIなんて変態言語載せてるの?
あれは熟練者が仕方なく苦渋の選択をして選ぶものだろうに
0742デフォルトの名無しさん
2011/06/21(火) 13:00:41.38MSももう捨ててるよねあれ
0743デフォルトの名無しさん
2011/06/21(火) 13:33:34.74RHEL5.6で、SIGCHLDにSIG_IGN付けてsystemをコールすると必ず関数が-1で失敗するんだが、
何が公式の情報ってないのかな?
0744デフォルトの名無しさん
2011/06/21(火) 14:02:26.30なんのために契約料払ってるんだ?
0745デフォルトの名無しさん
2011/06/21(火) 15:07:37.84VC++の入門者向けの本なら、Javaを知ってる人なら、全然OKだよ。
Yahooオクとかで今もたくさん売ってるから「Visual C++」とかで
検索かけて買うのもいいよ。
基本的にC++の文法書はこちこちの文法書が多いから、VC++とかで
実際にプログラム組みながら文法を調べる方が実感がわかるよ。文法はネットでググッてもいいし。
俺は、独学ニートだけど、実際にプログラムを作る本で文法を学んだ方が楽しいし、よくわかった。
0746デフォルトの名無しさん
2011/06/21(火) 16:31:36.85>>732さん。MFC(C++/CLIというものでないもの)を使う場合は
有料版じゃないとだめなので、Yahooオクで本を買っても駄目でした。
というか、ふるいVC++の本はMFCというのがほとんどなので。
0747デフォルトの名無しさん
2011/06/21(火) 17:18:49.64死ね
0748デフォルトの名無しさん
2011/06/21(火) 23:35:46.96catコマンドだと「あああ」も正しく表示されているので端末は正しく設定されていると
思ってるのですが、、
#include <locale>
#include <string>
#include <iostream>
int main(int ac, char **av) {
std::wcout.imbue(std::locale("ja_JP.utf8"));
std::wstring wstr = L"あああ";
std::wcout << wstr << std::endl;
return 0;
}
$ g++ utf.cpp -Wall
$ ./a.out
???
$
「あああ」と表示させるにはどうすればいいでしょうか?
よろしくお願いします。
0749729
2011/06/22(水) 00:05:15.43ありがとうございます。
セットアッププロジェクトを作ってみようと思います。
URLのリンク先が英語のサイトなのですが、
もし日本語のサイトで参考になるサイトがあれば教えて頂きたいです。
0750デフォルトの名無しさん
2011/06/22(水) 00:25:33.70localeコマンドの結果をはって
0751デフォルトの名無しさん
2011/06/22(水) 00:26:43.01C
en_AG
en_AU.utf8
en_BW.utf8
en_CA.utf8
en_DK.utf8
en_GB.utf8
en_HK.utf8
en_IE.utf8
en_IN
en_NG
en_NZ.utf8
en_PH.utf8
en_SG.utf8
en_US.utf8
en_ZA.utf8
en_ZW.utf8
ja_JP.utf8
ko_KR.utf8
POSIX
$
0752デフォルトの名無しさん
2011/06/22(水) 01:30:34.40自分も気になってググったら、sync_with_stdio(false);したらいいよという話を見つけた。
ttp://www.asp-edita.jp/doda/one/doda4035_366.html
mainの頭でfwide(stdout, 0);呼ぶと0(マルチバイトのモード)が返ってくるので、
この時点ですでにstdio系はワイド文字ベースの読み書きを受け付けない状態になっているようだ。
0753デフォルトの名無しさん
2011/06/22(水) 02:40:54.95ありがとうございます。
std::ios_base::sync_with_stdio(false);
を追加したら動きました!
$ g++ utf.cpp -Wall
$ ./a.out
あああ
$
0754デフォルトの名無しさん
2011/06/22(水) 13:23:59.91リンク先は件のdllで問題が発生してることについてなので、それを翻訳しても実りはあまり無いかも。
んで、セットアッププロジェクトに関する日本語サイトはその辺にあると思うよ。もちろんMSDNでもいいし。
とりあえずは必須コンポーネントを含めちゃえばそれですむんじゃないかな。
0755デフォルトの名無しさん
2011/06/22(水) 20:09:21.130756デフォルトの名無しさん
2011/06/23(木) 19:37:22.670757デフォルトの名無しさん
2011/06/23(木) 21:43:40.420758デフォルトの名無しさん
2011/06/23(木) 23:45:56.42柴田(笑)
0759デフォルトの名無しさん
2011/06/24(金) 00:28:16.48デストラクタがこれしか実行されません「デストラクタが呼ばれました。要素数は 40 でした。」
intarray.cpp
http://ideone.com/FMEYe
intarray.h
http://ideone.com/ElAsN
dstruct1.cpp
http://ideone.com/lXiYR
以下のページを参考にしたのですが・・・、C++ではローカル変数以外はプログラム終了時に破棄されるんですか?
いまいちどういう挙動しているのかわからないです
http://www7b.biglobe.ne.jp/robe/cpphtml/html02/cpp02006.html
0760デフォルトの名無しさん
2011/06/24(金) 00:32:31.87別のテスト用関数に移してやってみなされ。
main() {
test();
cout << "一時停止 その2" << endl;
}
0761デフォルトの名無しさん
2011/06/24(金) 00:34:34.460762デフォルトの名無しさん
2011/06/25(土) 16:56:01.38メッセージプロシージャのswitch〜case文の外で
「グローバル変数をifで確認し、一度きりの処理を行い、そのグローバル変数の値は別の値に変える」 というコードを書いているのですが、
次にメッセージプロシージャに戻ってくると値が元に戻ってしまっており、1度どころか100回以上処理している
という事が起きてしまっていて困惑しています。
入力系の子窓をサブクラス化している事が問題なのだろうか とも思うのですが・・色々試したり調べてもよくわからず。
何か思い当たる事、確認すべき事が有ったら教えて下さると幸いです。
0763デフォルトの名無しさん
2011/06/25(土) 17:05:54.39・別の値に変えたつもりだったけど実は同じ値だった
・if文で確認しているつもりだったけど実は条件式が間違っていた
・値が元に戻って100回以上処理しているように見えたけど実は値は元に戻っていなくて1回しか処理していなかった
・メッセージプロシージャの先頭で変数を初期化していたので毎回元に戻っていた
・全然関係ない別のところでそのグローバル変数を元の値に戻していた
・バッファオーバーラン的なメモリの不正アクセス
0764デフォルトの名無しさん
2011/06/25(土) 17:10:24.80まともなデバッガなら
0765デフォルトの名無しさん
2011/06/25(土) 17:19:23.520766デフォルトの名無しさん
2011/06/25(土) 17:33:38.990767デフォルトの名無しさん
2011/06/25(土) 17:42:46.59確認しろ
0768デフォルトの名無しさん
2011/06/25(土) 19:20:00.49>>763
ありがとうございます。全て自分なりに確認してみても理由がわからず、
原因の絞込みにCreateWindowを全部カットしたら正常に動く事がわかり、
CreateWindow前に変数をセットさせたら1度しか動かない事になりました。
・・・何かCreateWindowまわりでやってはいけない事でもやってる余寒がして怖いですが・・
今回の件は解決できました。テンパっていたので問題の絞込みができて助かりました。ありがとうございます。
0769762
2011/06/25(土) 19:21:20.99>>764
>デバッガに変数の値が変化したらブレークするって機能あるよ
>まともなデバッガなら
そうなのですか!? Visual C++ 2008 ExpressEditionにも有るでしょうか;
そんな機能が有れば良いなと思いつつも見つけきれず、
いつも一々ステップイン ステップオーバーしながら何十分と変数の変化タイミングを探して画面睨んでました;
ググるワードだけで構いませんので教えて頂けますと幸いです;
0770デフォルトの名無しさん
2011/06/25(土) 19:25:18.590771デフォルトの名無しさん
2011/06/26(日) 03:24:14.29ちゃんと管理出来てるか?
0772762
2011/06/26(日) 10:40:24.01早速解説を見てやり方が解りました。今後のデバッグが幾分楽になりそうです。ありがとうございます
>>771
無効なデータ(未使用等)を示すのに-1をいつも使っているんですが・・どこかの配列で-1のまま使ってしまってるんじゃないか という恐怖があります;
現状変数が狂う事態は起きていないですが、
もっと安全なやり方を身に着けないと、大きなプログラムはとても組めなさそうですね;
0773729
2011/06/26(日) 23:56:10.46作ったらどうかとアドバイスを頂いた者です。
http://www.geocities.jp/i_love_balard/myhome/dnet/makesetup.html
上記のサイトを参考にセットアッププロジェクトを作ってみたのですが、
>後は、右の「ソリューションエクスプローラ」の下のアイコンを
>クリック選択することで、今までのインストーラと同じように
>レジストリや、セットアップフォルダ等を選択設定した後、
>ビルドすればMSIファイルができる。
の部分がいまいち何をすればよいかわかりません。
また出来上がったmsiファイルでソフトをインストールしてみたのですが、
インストール先のフォルダにはexeファイルが保存されただけでした。
このexeファイルはコピー貼り付けでexeファイルを入れるのと何か違うのでしょうか?
それとも何か手順が足りないのでしょうか?
0774デフォルトの名無しさん
2011/06/27(月) 05:33:47.740775デフォルトの名無しさん
2011/06/30(木) 10:56:30.100776デフォルトの名無しさん
2011/07/01(金) 01:22:03.42何回も追加を行うためできるだけ早い方法が良いと考えています。
候補として考えているのが、sprintf関数とostringstreamクラスですが、どちらが良いでしょうか?
ネットで調べるとsprintfのほうが早いとありましたが、自分で簡単にテストした結果ostringstreamのほうが早くなりました。
コードの書き方がおかしいのでしょうか?
詳しい方がいらっしゃったらご教授お願いします。
↓にテストコードを載せます。
0777デフォルトの名無しさん
2011/07/01(金) 01:22:35.05#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
using namespace std;
int main(){
const int LOOP = 100000;
clock_t start,end;
ostringstream str;
char *chr = (char*)malloc(LOOP*3+100);
char buf[255];
start = clock();
for(int i=0;i<LOOP;i++)
str<<"a"<<"a"<<"a";
end = clock();
printf("%d\n", end-start);
start = clock();
for(int i=0;i<LOOP;i++){
sprintf(buf, "%s%s%s", "a", "a", "a");
strcat(chr, buf);
}
end = clock();
printf("%d\n", end-start);
}
0778デフォルトの名無しさん
2011/07/01(金) 01:35:20.47chr += 3;
こいう感じになるとおもう
0779デフォルトの名無しさん
2011/07/01(金) 01:35:32.790780デフォルトの名無しさん
2011/07/01(金) 01:45:11.91sprintf(chr, "%s", buf);
chr += 3;
元に近づけるとこうか
strcat は死ぬほど遅いという特徴がある
0781デフォルトの名無しさん
2011/07/01(金) 01:47:10.19そちらで試してみたらostringstreamよりかなり早くなりました。
ありがとうございます。
>>779
習いたてのC++です。
0782デフォルトの名無しさん
2011/07/01(金) 01:54:27.29そのようですね。
できるだけ関数を使わないように意識していたつもりでしたが・・・。
strcatを使わない発想が出てこなかったですorz
sprintf関数は結局下のようなコードになりました。
int num;
char *tmp = chr;
for(int i=0;i<LOOP;i++){
num = sprintf(tmp, "%s%s%s", "a", "a", "a");
tmp+=num;
}
それで結果が、LOOP=1000000で
ostringstream : 779
sprintf : 305
です。
0783デフォルトの名無しさん
2011/07/01(金) 09:42:59.390784デフォルトの名無しさん
2011/07/01(金) 10:25:10.080785デフォルトの名無しさん
2011/07/01(金) 10:56:55.26でもスレに貼ったら貼ったでインデント崩れて見にくいし
まあ好きにしたらいいんでないかと思う
0786デフォルトの名無しさん
2011/07/01(金) 12:28:05.29つまり、ループに入れてしまうと毎回終端を検出することになるから遅くて当然。
strcat()は一発勝負のときにこそ使うべし。
# って、やっぱ使えねぇw
0787デフォルトの名無しさん
2011/07/01(金) 12:46:40.80だからchar *chr = (char*)calloc(LOOP*3+100, 1);にすると大分早くなる
といってもすでに出されてるsscanfを使った方法とは比較にならんぐらい遅いけどね
でもstrcatの後にchr += 3;入れてやれば殆ど変わらくなるからstrcatが殊更遅いというわけでもなく
やっぱり終端の検索をループごとにしてたのが問題だね
長文になっちゃったけど既出情報ばっかだな・・・・・・
0788デフォルトの名無しさん
2011/07/03(日) 08:33:28.96グラフ構造で要素をもつノードと持たないノードがあって勿体無いから外部からくっつけたりとったりしたいとか
あるクラスをスクリプトに公開する事になったが仮想マシンはvoid*でしか認識出来ないので型情報を追加したいとか
struct Foo { 〜 };
Foo foo;
attach_attribute<int>(foo, "x");
int *p = get_attribute<int>(foo, "x");
if(p) *p = 100;
cout << *get_attribute<int>(foo, "x") << endl; // 100
detach_attribute<int>(foo, "x");
0789デフォルトの名無しさん
2011/07/03(日) 13:26:32.300790デフォルトの名無しさん
2011/07/03(日) 13:30:41.610791デフォルトの名無しさん
2011/07/03(日) 14:22:57.680792デフォルトの名無しさん
2011/07/06(水) 09:21:03.04既存のlibをリンクさせる設定ってどうやるんでしたっけ。
どなたかすいませんが教えてください。
0793デフォルトの名無しさん
2011/07/06(水) 09:33:50.600794デフォルトの名無しさん
2011/07/06(水) 15:03:02.36例えばVS2010なら
ソリューションエクスプローラで
プロジェクトを右クリックプロパティ、
構成プロパティ->リンカー->全般->追加のライブラリディレクトリ-> libのパス -�@
構成プロパティ->リンカー->入力->追加の依存ファイル->〜.lib -�A
�@はプロジェクトのあるフォルダに.libファイルがあれば省略可
�Aはソースコードに
#pragma comment(lib,"〜.lib")
でもおk
0795デフォルトの名無しさん
2011/07/06(水) 21:36:21.35文字列中に 0D0D0A が有るかを、strstrで確かめたいのですが、"\r\n"では検出されてくれず、"\r"では検出されます。
0D0D0A を見つけるにはどんな文字で確かめるのが正しいのでしょうか?
0796デフォルトの名無しさん
2011/07/06(水) 21:56:48.93バイナリモードなら\r\n
0797デフォルトの名無しさん
2011/07/06(水) 22:52:03.41C++でもやってくれればいいのに
0798795
2011/07/06(水) 23:08:01.87モードによるんですね。私のやり方に何かミスが有ったのでしょうか・・"\r"だけしかヒットしないのは。
何にしても問題の絞込みが出来ました。ありがとうございます。
0800デフォルトの名無しさん
2011/07/07(木) 09:16:06.28一番凄いのはVB
入力が楽過ぎる
0801デフォルトの名無しさん
2011/07/07(木) 23:26:33.93Microsoftいわく
(統合環境の)新技術は、C#とVBにまず導入され、続いて、
可能ならばC++で、となるため、必ずC++が一歩遅くなります。
だそうだ。
0802デフォルトの名無しさん
2011/07/08(金) 08:54:50.190803デフォルトの名無しさん
2011/07/09(土) 12:30:46.59Visual C++の以下の結果が納得いかないのですが、一行目の結果は正しいのでしょうか?
typedef void tf();
void f1( tf );
void f2( tf* );
void f3( tf** );
std::printf("%s\n", typeid(f1).name());
std::printf("%s\n", typeid(f2).name());
std::printf("%s\n", typeid(f3).name());
<結果>
void __cdecl(void (__cdecl*)(void))
void __cdecl(void (__cdecl*)(void))
void __cdecl(void (__cdecl** __ptr64)(void))
0804デフォルトの名無しさん
2011/07/09(土) 12:36:41.43どう納得がいかないかも添えてくれないと
どうみてもそれで正しいだろカスとしか言えん
0805デフォルトの名無しさん
2011/07/09(土) 12:54:47.43という話だろう。f1のコンパイルエラーを期待したんだろう。
そんなことわかってるのに、わからないとごねる>>804がチンカス
0806デフォルトの名無しさん
2011/07/09(土) 12:55:35.88死ね
0807デフォルトの名無しさん
2011/07/09(土) 13:20:52.770808デフォルトの名無しさん
2011/07/09(土) 20:00:51.080809デフォルトの名無しさん
2011/07/10(日) 03:11:37.05アプリケーションの追加と削除に現れるあたりが違う
依存関係にあるDLLをインストーラに組み込めば?
もしくは、よく見てないけどそのDLLが含まれている再頒布可能パッケージを組み込む
0810デフォルトの名無しさん
2011/07/10(日) 04:36:46.91正しい。
void f(int a[100]); が void f(int *a); と解釈されるのと同様に、
void f(void g()); は void f(void (*g)()); と解釈される。
この狂った仕様はCにもC++にもある。
0811デフォルトの名無しさん
2011/07/11(月) 21:50:11.74もっとなんかこう派手で面白いことをやるにはどうすればいいですか
0812デフォルトの名無しさん
2011/07/11(月) 21:51:46.610813デフォルトの名無しさん
2011/07/11(月) 21:53:05.46プロンプト調整すれば色付きになるよ
0814デフォルトの名無しさん
2011/07/11(月) 22:49:47.65Qt Creator入れてC++をやるんだ
0815デフォルトの名無しさん
2011/07/11(月) 23:05:33.46>>812の言うとおり、Cでアプリケーションプログラムを作ろうというのが
間違い。別の言語を選ぶんだな。
0816デフォルトの名無しさん
2011/07/11(月) 23:06:12.15WS_CHILD | WS_VISIBLE | WS_BORDER | ES_RIGHT, を指定して作ったエディットボックスの入力文字を全選択状態したくて
キー押下時に以下のコードを実行させているのですが、
HWND temphWnd = GetFocus();
SetFocus(temphWnd);
int nowhWnd_ID = GetWindowLong(temphWnd, GWL_ID);
SendMessage(GetDlgItem(temphWnd, nowhWnd_ID), EM_SETSEL, (WPARAM)0, (LPARAM)-1);
フォーカスはそのままで、文字が選択状態にはなってくれません。
何かお気づきの点や確認すべき点が思い当たるならば、教えて頂けますと幸いです。よろしくお願いします;
0817デフォルトの名無しさん
2011/07/11(月) 23:09:40.86サウンドプログラミングは?
まずはMMLのプレーヤーとかを作ってみると面白いかも
0818デフォルトの名無しさん
2011/07/11(月) 23:13:34.09そんな遠回りせずに
普通にEditボックスのウィンドウハンドルに対してEM_SETSELおくれよ
0819デフォルトの名無しさん
2011/07/11(月) 23:22:37.21openglで絵を描けばおもろいよ
2Dなら結構簡単だしウィンドウならGLUTがあるし
0821デフォルトの名無しさん
2011/07/12(火) 03:44:47.98SetFocusで子窓を移動させているんですが、ビープ音(警告ダイアログと同じ音)がしてしまいます。
サブクラスのメッセージプロシージャ内でSetFocusするのがマズいのでしょうか?
0822デフォルトの名無しさん
2011/07/14(木) 22:51:57.22{
main();
return 0;
}
これ実行すると途中で勝手に終了するんだけどなんでなん
0823デフォルトの名無しさん
2011/07/14(木) 22:53:23.85スタックオーバーフロー
0824デフォルトの名無しさん
2011/07/14(木) 22:58:52.22途中でもうやってられんわ!なって投げ出したのな
ありがとさん
0825デフォルトの名無しさん
2011/07/15(金) 01:38:28.44CならいいがC++ならそもそも文法エラーだしな
0826デフォルトの名無しさん
2011/07/15(金) 01:57:57.87ideoneでやったら普通にコンパイル通ったけど
0827デフォルトの名無しさん
2011/07/15(金) 02:54:52.54C++では明確に禁止されてるな。
0828デフォルトの名無しさん
2011/07/15(金) 02:59:05.820829デフォルトの名無しさん
2011/07/15(金) 03:02:47.060830デフォルトの名無しさん
2011/07/15(金) 21:48:33.26これなら落ちないんじゃないか?
int main(void)
{
return main();
}
0831デフォルトの名無しさん
2011/07/15(金) 23:55:15.76本気か?
出来の悪い冗談だよな?
0832デフォルトの名無しさん
2011/07/16(土) 00:52:48.490834デフォルトの名無しさん
2011/07/16(土) 01:07:14.14激しくどうでもいいな
0835デフォルトの名無しさん
2011/07/16(土) 02:00:33.270836デフォルトの名無しさん
2011/07/16(土) 08:36:10.06意味がわかりません。
fork()的な事を考えたのかな。
0837デフォルトの名無しさん
2011/07/24(日) 14:06:57.99見つける解説サイトが、いきなり難しい数式サイトなどで行き詰っております;
比較的説明のやさしい入門サイト をどなたかご存知ではないでしょうか?
(できればC++のサンプルコードが有ると、いじりながら構造を学習できてよいのですが;)
よろしくお願いします;
0838837
2011/07/24(日) 16:48:42.300839デフォルトの名無しさん
2011/07/27(水) 03:57:01.66計算終了時に、twitterに終了した旨のメッセージを書き込みたいのですが、どのような方法がよいでしょうか?
0840デフォルトの名無しさん
2011/07/27(水) 07:15:54.83sendmail で自分の携帯電話にメールを送って自分で twitter に書き込む
movatwiかなにか、メール送信で投稿してくれるサービスを使う。
0842デフォルトの名無しさん
2011/07/28(木) 12:50:59.54is〜がクソってのと遅いってのは解るけど他にクソな所ある?
あとstd::messageのメッセージカタログの仕様ってどこにあるの?
0843デフォルトの名無しさん
2011/07/28(木) 21:09:17.59Qt馬鹿にするなよ。俺がいまんとこプログラム歴12年の中で初心者に一番とっつきやすいし
ためになるフレームワークだぞ。
本がほとんどないからいけないけど、ドキュメントはかなりいい。ドキュメントのサンプルたくさんやると
0844デフォルトの名無しさん
2011/07/28(木) 21:12:02.42http://www.kde.gr.jp/~ichi/qt/
↑の「始めよう」ってとこで、たくさんやるんだ。C++やっときゃ、何の言語でもわかるようになる。
0845デフォルトの名無しさん
2011/07/28(木) 21:27:28.250846デフォルトの名無しさん
2011/07/29(金) 09:24:35.98Releaseビルドにするとワイド文字を要求され、それに合わせると今度はDebugビルドで文字の型が違うと言われます。
どこの設定を変えればこの問題を解決できるのでしょうか?
また、全てワイド文字に合わせて組むべきだと思われますか・・?
0847デフォルトの名無しさん
2011/07/29(金) 09:42:52.650849デフォルトの名無しさん
2011/07/29(金) 14:01:48.48と
void createWebWindow();
で、宣言している二つの関数があります。
他の関数から
createWindow();
と書いて呼び出すと、コンパイルエラーになります。理由は2つの関数のどちらを呼び出せばいいか
わからなくなるからみたいです。
どうやって、呼び出し・定義したら、このエラーはなくせますか?
0850849]
2011/07/29(金) 14:02:41.80createWebWindow(); と書いて呼び出すと
です。Webが抜けていました。
0851デフォルトの名無しさん
2011/07/29(金) 14:07:08.97は
void createWebWindow(bool checked=false);
?
0852849
2011/07/29(金) 14:10:36.90void createWebWindow();
と2つ宣言し(オーバーロード)
createWebWindow();として呼び出すと、
どちらとも意味がとれるみたいです。
すみません。記述ミスばかりで。
0853デフォルトの名無しさん
2011/07/29(金) 14:13:56.040854849
2011/07/29(金) 14:18:03.53なるほど。やはり、それしか手はないですか。
そうすると確かにコンパイルエラーはとれるんですが、
デフォルト引数がつかえなくなってしまいます。
まあ、やはりしょうがなさそうです。
どうもありがとうございました。助かりました。
0855デフォルトの名無しさん
2011/07/29(金) 15:23:39.10ではおまいさんは、他人がcreateWebWindow()と書いたときにどっちの積もりなのか分かるのかい?
0857デフォルトの名無しさん
2011/07/29(金) 17:37:13.59数値を扱う一次元の配列の検索で、STLのmapを使うのは無駄なのでしょうか?
普通にfor〜ifで総ざらいにして見つけたらbreakした方が良いでしょうか?
0858デフォルトの名無しさん
2011/07/29(金) 17:38:09.590859デフォルトの名無しさん
2011/07/29(金) 17:43:55.84値と一対一に対応するキーがなくて、配列でループで調べてるんなら
それをmapにしても意味ないね。
0860857
2011/07/29(金) 18:02:36.43無駄ではないのですね。ありがとうございます。
>>859
発見した位置(要素No)が値がわりなのですが・・もっと良い方法も有ったりしそうな気がしなくもないですね・・
ご助言ありがとうございました。
0861デフォルトの名無しさん
2011/07/29(金) 18:04:53.74仮に「値=キー」でも検索速度は向上するわけだから意味はあるでしょ。
0862デフォルトの名無しさん
2011/07/29(金) 18:12:48.73そう言われたらそうだね。
キーのほうに値を入れておけばいいか。
0863842
2011/07/30(土) 00:13:00.800864デフォルトの名無しさん
2011/07/30(土) 00:22:24.010865デフォルトの名無しさん
2011/07/30(土) 01:36:43.000866デフォルトの名無しさん
2011/07/30(土) 20:21:41.54#include <map>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
map<char, double> freq;
vector<double> vec;
freq['m'] = 0.124167;
freq['o'] = 0.0820011;
freq['e'] = 0.0969225;
vec.push_back(0.0021);
vec.push_back(0.0031);
vec.push_back(0.0041);
{
お願い:freq のsecond にvec の値を代入する方法を教えて下さい
}
return 0;
}
for やwhile文を用いないtemplate やファンクタによる、かっこいい実装を希望します。
0867866
2011/07/30(土) 20:27:18.34ttp://ja.w3support.net/index.php?db=so&id=771453
これの逆パターンです
map pair.second → vector
これを
vector → map pair.second
できる、方法を教えてくださいませませ
0868デフォルトの名無しさん
2011/07/30(土) 21:36:08.12#include <boost/range/adaptor/map.hpp>
std::copy(vec.begin(), vec.end(), boost::adaptors::values(freq).begin());
0869デフォルトの名無しさん
2011/07/30(土) 22:42:07.43void SubClass::hogehoge : スーパークラスの関数
と書く場合もありますし、
:スーパークラスの関数を書かない場合もあります。
どういう使い分けするのですか?
0870デフォルトの名無しさん
2011/07/30(土) 22:51:59.43こんな書き方初めて見たんだけど
なんていう言語なの?
0871870
2011/07/30(土) 22:55:05.42その本のままかくと、
FindDialog::FindDialog(QWidget *parent) : QDialog(parent)
{
// 関数本体
}
とあります。FindDialogが子クラスでQDialogが親クラスです。上の関数は
FindDialog(子クラス)のコンストラクタです。
0872デフォルトの名無しさん
2011/07/30(土) 22:59:15.27それはコンストラクタの初期化子リスト
関数をオーバーライドしてるわけじゃない
>>871は継承したQDialogのコンストラクタを呼んでる
0873デフォルトの名無しさん
2011/07/30(土) 23:03:24.27親クラスの引数ありのコンストラクタを
明示的に、子が呼んでる。それだけ
void SubClass::hogehoge : スーパークラスの関数
てか↑これは激しく違うじゃないかwww
0874デフォルトの名無しさん
2011/07/30(土) 23:57:30.46隠されてたのかとちょっと期待しちまったじゃねぇか。
0875870
2011/07/31(日) 10:36:09.59アノ後、猛烈に眠くなって眠くなってしまいましたですお
明示的にその引数のコンストラクタを呼んでいると聞いてよ〜くわかりましたお
たくさん、回答くれてありが党ですお。
助かりましたお(´ω`)
0876デフォルトの名無しさん
2011/07/31(日) 22:01:32.80using namespace std;
class hoge{
public:
hoge(void);
virtual ~hoge(void);
private:
static map<HWND, hoge*> mapThis;
HWND hSelf;
};
//静的メンバ初期化
map<HWND, hoge*> hoge::mapThis;
//コンストラクタ
hoge::hoge(void){
this->hSelf = 0;
}
//デストラクタ
hoge::~hoge(void){
(this->mapThis).erace(this->hSelf);
}
0877876
2011/07/31(日) 22:02:22.59デストラクタ内で map コンテナ要素を erace すると、
"読み込み中にアクセス違反が発生しました。"
とエラーが出ます。
別のメンバ関数内ではできますが、
コンストラクタとデストラクタ内ではエラーが生じます。
環境は WinXP_sp3、Vc++2005 です。
どなたか教えていただけないでしょうか?
Google 先生にも見捨てられました。
0878デフォルトの名無しさん
2011/07/31(日) 22:12:35.830879デフォルトの名無しさん
2011/07/31(日) 22:14:12.580880876
2011/07/31(日) 22:29:34.85しかし、あんまり長大なソースをここに書く訳にもいかないし、
どの部分を抽出すれば良いのかも不明だし、
もう少し自力で頑張ってみる事にします。
ありがとうございました。
0881デフォルトの名無しさん
2011/07/31(日) 22:49:06.91static なのに this でアクセスしたり
何だか不安な気分にさせるソースだな…
0882876
2011/07/31(日) 22:55:32.32this->mapThis
はマズかったですか?
一般的にはどうアクセスするのでしょう?
複数作るオブジェクトの、どれのthisポインタからもアクセスできるはずと
思っていたのですが。
0883デフォルトの名無しさん
2011/08/01(月) 04:36:04.61static メンバへのアクセスに this ポインタは要らないんだよ。
0884デフォルトの名無しさん
2011/08/01(月) 05:41:57.26C++なら(void)は()と書けるし
thisもPythonなどと違い省略可能だから(メンバより内側のスコープで名前が被らなければね)
わざわざ書く人が少ないってだけで
好きに書けばいいよ
static云々のくだりは意味不明なので
>>881さんや>>883さんに説明してもらうしかない
0885876
2011/08/01(月) 08:41:07.16間違いが少なくなるし。
シロウト臭はするでしょうね、実際そうだし。
this->mapThis.erase(this->hSelf);
じゃないのはなんで?
0887デフォルトの名無しさん
2011/08/01(月) 16:32:53.22デバッグで
if ((i==1005)&&(j==1002)) { 〜〜〜 }
などの中のブレークポイントで止めて、i と j にオンマウスして値を確認すると
i=0 j=1092616192 などとおかしな数値になっています。
CreateWindowのハンドルも 正常に作られているのに不正な〜〜と出ていたりします。
時折思った位置のブレークポイントを入れようとしても
いざデバッグを始めるとブレークポイントがふっとんで
思い通りの位置でデバッグできなかったり。
何でこういった事が起こってしまうのでしょうか・・?
0889デフォルトの名無しさん
2011/08/01(月) 16:44:26.58リビルトすれば大抵治る
0890887
2011/08/01(月) 17:54:20.57今回はリリースにしたままになっていました; デバッグに戻したら正常に。ありがとうございました〜
>>889
デバッグの中にそういうファイルが有りました。
これが壊れても似た事が起こるのですね。 記憶しておきます。 ご助言ありがとうございました〜
0891876
2011/08/01(月) 20:12:18.60自分の頭の中で、
(this->mapThis) という部品(コンテナ)に、
.erace(this->hSelf); という命令を出している感覚だから。
観念上の切り分けで整理する為にカッコ付けしました。
本職が機械設計なんで、機材に動作命令を入力する概念なら理解しやすいのです。
ソフトウェアをハードウェア的に解釈する方が好みなのです。
0892876
2011/08/01(月) 20:32:02.56書籍のMDIソースを元に、気長に改造しつつあります。
参考になりそうなサイトを知っている方がいたら、教えていただけないでしょうか。
0893デフォルトの名無しさん
2011/08/02(火) 06:59:17.990894876
2011/08/02(火) 23:05:53.410895デフォルトの名無しさん
2011/08/03(水) 10:48:59.740896デフォルトの名無しさん
2011/08/04(木) 02:00:04.10っつーか、逆に hoge::mapThis ってやらないと
コンパイラが文句言ってうるさいんですけどw 無視してんの?
0897デフォルトの名無しさん
2011/08/04(木) 04:48:35.23> <再> static メンバへのアクセスに this ポインタは要らないんだよ。
なんでstaticメンバ限定なの
>>886の真意はそこじゃなくて erase じゃないかと思うんだが、ひねくれてんのかな俺
括弧の有無については慎重な人なんだなと思うが、まさか機械設計がどうとかいうとは思わなかった。
本職のポリシーみたいなのを持ってこないほうがいいよ。
物理学者がマリオのジャンプに難癖つけてるみたいでかっこ悪いよ。
0898デフォルトの名無しさん
2011/08/04(木) 06:17:32.390899デフォルトの名無しさん
2011/08/04(木) 07:39:56.990900デフォルトの名無しさん
2011/08/04(木) 13:18:29.23グローバル変数の初期化って、初期化子が関数でもいいの?いいみたいなんだけど。
たとえばこんな感じで:
int func(){return 100;};
int a=func();
実際動くしダメな理由も思いつかないけど、こんなことしたことないし、ググっても例が見当たらなかった。
0901デフォルトの名無しさん
2011/08/04(木) 13:22:14.13即エラーにはならないけど、 func() の中で a や他のまだ初期化されていない
グローバル変数を触って未定義動作になったり結果が定まらなかったりする
可能性があるから危ない。気をつけて使う必要がある。
0902デフォルトの名無しさん
2011/08/04(木) 13:36:33.020903デフォルトの名無しさん
2011/08/04(木) 13:38:06.77a=func();
とどこが違うのでしょう。
0904デフォルトの名無しさん
2011/08/04(木) 13:50:21.330905900
2011/08/04(木) 13:53:47.99>>901
func()が他にまずい依存をしてないって前提で、ってことですね。
ちなみに、組込み機器のロータリスイッチの値を取ってくるのに使ってました。
ドライバをioctl()で叩いてるだけだから大丈夫でしょう。
>>903
プロトタイプ宣言省略したかったんで。
0906デフォルトの名無しさん
2011/08/04(木) 14:00:02.43プロトタイプ宣言うんぬんは間違いですね。よく読まなかった。
この事案、人が書いてるコード上での問題でして、訊かれてハテナ?となったもんで質問した次第です。
他にもグローバルなクラスオブジェクトがあって、それのコンストラクタが上記'a'にあたる変数に依存してるんで、mainが走る前にaに値を入れようとこんなことしでかしたわけです。
だもんで、とmain関数後にa=func();と書かなかったわけです。
0907デフォルトの名無しさん
2011/08/04(木) 14:03:18.14そのグローバルなオブジェクトのコンストラクタと a の初期化と、
どっちが先に走るか確定させられるの?
0908デフォルトの名無しさん
2011/08/04(木) 14:22:46.34同じファイルに書いてあるなら、先に書いてあるほうが先に初期化される、はず、らしいです。
ということで、二つを同じファイルで定義して、やってみて動いたらOK、と言っておきました。
0909876
2011/08/04(木) 15:20:18.05はて、私の環境ではコンパイラは文句を言いません。
>>897
自分に理解しやすい方法でコードを書いているだけです。
他人に自分のやり方を押し付けるつもりはありません。
どうしてなんだ?と聞かれたから素直に答えただけですよ。
0910876
2011/08/04(木) 15:37:10.61自己レスです。
原因わかりました...
map コンテナの静的メンバ初期化より前に、hoge クラスのオブジェクトを生成していました。
hoge hogehoge; //
map<HWND, hoge*> hoge::mapThis; //初期化
コンパイラは通ってしまい、実行時にエラーがでるので気がつきにくかったようです。
以上、お騒がせしました。
0911デフォルトの名無しさん
2011/08/04(木) 15:40:28.070912876
2011/08/04(木) 16:13:45.86>>897
erace >> erase
ですね、2ch に書き写す時に慌ててミスったみたいです。
ちゃんとオリジナルの私のソースは erase になってます。
0913デフォルトの名無しさん
2011/08/04(木) 22:22:43.79> 自分に理解しやすい方法でコードを書いているだけです。
> 他人に自分のやり方を押し付けるつもりはありません。
でも、ここに書いたことで他人に読ませるコードになったよね。
いやなら見るな!いやなら見るな!押し付けるつもりはない!ですかね
0914876
2011/08/04(木) 23:38:12.75ええ、そうです。
不特定多数が書き込むのですから。
0915デフォルトの名無しさん
2011/08/05(金) 08:59:43.830916876
2011/08/05(金) 10:06:32.36ええ、相談に乗っていただける方に見てもらえば充分です。
プログラミングスタイルは各々の工夫による物であり、違っていて当然です。
他者のスタイルは参考にはなっても、同じにしなければならない義務はありません。
不特定多数が出入りする場所には、気に入らないスタイルの相手はいる事でしょう。
だから何です?、あなたには見てもらわなくて結構ですよ。
0918デフォルトの名無しさん
2011/08/05(金) 11:16:20.280919デフォルトの名無しさん
2011/08/05(金) 13:26:33.870920デフォルトの名無しさん
2011/08/05(金) 13:40:47.900921デフォルトの名無しさん
2011/08/05(金) 14:49:51.670922デフォルトの名無しさん
2011/08/05(金) 19:02:56.25見てくれる人だけに見て欲しいというのは構わんが、
> this->mapThis
thisポインタ経由でないものを「文法エラーでないから」といって
こんな糞コード書かれると、真似する奴がいて迷惑なんだよ。
せめて他人に迷惑は掛けないようにしろ。
0923876
2011/08/05(金) 20:05:19.25静的メンバにも同様のやり方でアクセスできるのだから、操作感の統一は大事です。
これが私のスタイルです、あなたに合わせる義理はありません。
0924876
2011/08/05(金) 20:44:23.52もし私の真似をする人がいるなら、その人もあなたとはスタイルが違うというだけです。
それが何か?
ここにバグがあるとか、こうすればミスを減らせるという話ならありがたく聞きますが、
俺とスタイルが違うと文句いわれてもねぇ。
0925デフォルトの名無しさん
2011/08/05(金) 20:54:46.250926デフォルトの名無しさん
2011/08/05(金) 21:37:40.460927デフォルトの名無しさん
2011/08/05(金) 21:39:19.890928デフォルトの名無しさん
2011/08/05(金) 21:39:55.94他クラスから呼ぶときはx::mapThis、非staticメンバ関数から呼ぶときはthis->mapThis、
staticメンバ関数から呼ぶときはx::mapThis、では統一性に欠けると思います。
「staticはx::mapThis」で統一するのがミスを減らせるのではないでしょうか
0929デフォルトの名無しさん
2011/08/05(金) 21:49:37.72staticメンバ関数から staticメンバ変数である mapThis を参照する可能性が高い
staticメンバ関数は(そもそも this 持てないから) >>876 スタイルでどー記述するだ?
って話になるな (ほぼ >>928 の意図かと思われる)
0930876
2011/08/05(金) 22:30:02.58説明が足りなくて申し訳ありません。
私の理解は、静的メンバはクラス内グローバルという物です。
mapThis が public だったとして、
他クラスから呼ぶときは、オブジェクトを生成して hogehoge.mapThis、
あるいは、ポインタから phogehoge->mapThis
クラス内においては、
非staticメンバ関数から呼ぶときは、this->mapThis、
staticメンバ関数には、必ず引数に 関数名(void* vp) と void型のポインタを用意して this を渡し、
先頭で hoge* This = (hoge*)vp; として、This->mapThis とアクセスしてます。
メリットは、無数にあるどのオブジェクトから静的メンバから呼ばれたのか判断できる事です。
あなたのやり方でも良いとは思いますが、答えは1通りじゃ無い訳です。
0931876
2011/08/05(金) 22:34:26.79メリットは、無数にあるどのオブジェクトから静的メンバから呼ばれたのか判断できる事です。
↓↓↓
メリットは、無数にあるどのオブジェクトから静的メンバが呼ばれたのか判断できる事です。
0932デフォルトの名無しさん
2011/08/05(金) 22:38:46.240933デフォルトの名無しさん
2011/08/05(金) 22:54:45.350934デフォルトの名無しさん
2011/08/05(金) 23:00:10.150935デフォルトの名無しさん
2011/08/05(金) 23:04:15.53ないと作成は無理なのでしょうか?
例えば、C++の参考書に付いているCDのコンパイラなどでも作成は
可能なのでしょうか?
0936デフォルトの名無しさん
2011/08/05(金) 23:07:30.090937デフォルトの名無しさん
2011/08/05(金) 23:08:36.360938デフォルトの名無しさん
2011/08/05(金) 23:08:41.520939デフォルトの名無しさん
2011/08/05(金) 23:15:55.88CDコンパイラは止めろ。
今のC++でのWindowsアプリは
Qt
で行うのが普通
Win用QtにはGCCもついているが、やっぱりVC++2010だな
0940デフォルトの名無しさん
2011/08/05(金) 23:21:38.340941876
2011/08/05(金) 23:22:20.92静的メンバ内で this ポインタを使えるし、
どのオブジェクトから呼び出されたかによって静的メンバ関数内で処理を分岐させたりできますが?
発想しだいで便利な利用方法はあるはずです。
思い当たる人だけ分かってもらえば良いですよ。
0942デフォルトの名無しさん
2011/08/05(金) 23:27:15.93静的メンバ関数内ではthisは使えないけど
なんの話してるんだ?
0943デフォルトの名無しさん
2011/08/05(金) 23:28:17.760944デフォルトの名無しさん
2011/08/05(金) 23:28:45.14まさにバカの発想
0945876
2011/08/05(金) 23:30:05.51工夫すれば、静的メンバに this を渡せますよ。
先ほど説明しました。
国語的に分かりにくくて申し訳ないですが。。。
0947デフォルトの名無しさん
2011/08/05(金) 23:34:47.350948876
2011/08/05(金) 23:48:22.83ほう、説明してくれ。
どうおかしい?
もはやプログラミングの話ではなくなってしまうな、スレ違いだし。
個人攻撃はやめて欲しいのだが。
0949デフォルトの名無しさん
2011/08/05(金) 23:51:56.000950デフォルトの名無しさん
2011/08/05(金) 23:52:32.230951デフォルトの名無しさん
2011/08/05(金) 23:53:05.12>> 静的メンバ関数内ではthisは使えないけど
>> なんの話してるんだ?
> 工夫すれば、静的メンバに this を渡せますよ。
日本語通じないの?
0952デフォルトの名無しさん
2011/08/05(金) 23:56:53.17静的メンバ関数はオブジェクトから呼ばれるものではないし。
>>876のやりたいのは↓だろ。それにしてもおかしすぎる
struct b {
virtual void f() = 0;
static void __stdcall Callback(void *param) {
static_cast<b *>(param)->f();
}
};
0953876
2011/08/06(土) 00:02:27.62おかしいというからには、気持ちではなく論理で説明してください。
>>950
何もかもじゃ、説明になってません。
ごまかしと受け取れます。
>>951
私はできるだけの説明はしました。
国語力が足らないのは申し訳ありません。
理解いただけなかったようで。
0954デフォルトの名無しさん
2011/08/06(土) 00:07:45.51virtual LRESULT wproc(HWND,UINT,WPARAM,LPARM) = 0;
static map<HWND, c*> thisMap;
static LRESULT CALLBACK window_proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
どう書けばよいの? hWnd をキーに thisMap から オブジェクト探して
そのオブジェクトの wproc 呼びたいんだけど
window_proc の引数は(APIの仕様上)変更できません><
}
}
0955デフォルトの名無しさん
2011/08/06(土) 00:09:15.44○ static map<HWND,hoge*> thisMap;
0956デフォルトの名無しさん
2011/08/06(土) 00:11:25.45おかしいのは一点だけ。
| this->static_member;
static_memberへのアクセスにthisポインターは参照されないのにthisを書くのはおかしい。
>>954
素直に hoge::thisMap[hWnd]->wproc() でよろしい。
0957デフォルトの名無しさん
2011/08/06(土) 00:14:23.35インスタンス1個もないときはどうすんの?NULLでも渡すの?
0958876
2011/08/06(土) 00:16:05.23ありがとうございます。
非staticメンバへのアクセスと操作感を統一できるならそうしたいので、あえてそうしてます。
参照されないのは知ってます。
0959デフォルトの名無しさん
2011/08/06(土) 00:16:12.280961デフォルトの名無しさん
2011/08/06(土) 00:20:52.70ただの自前クラスを記憶するのにSetPropは変じゃないか?
Windowsサービスと自作サービスクラスの場合とか考えたらmapの方が自然。
0962デフォルトの名無しさん
2011/08/06(土) 00:32:40.39非staticとstaticは全く別物だよ
違うものを同じ見た目で統一するのは混乱を呼ぶだけでしょ
同じコードで書ける仕様ってのはテンプレートとかで活用するために用意されてんの
コーダーが書いたときに「きっちり揃ってて気持ちい!」みたいな自己満足を得るための機能じゃない
客観的な視野を持って後から保守するかもしれない人の立場になって考える力があるなら見た目ですぐに区別できる方を選ぶのが常識
ま、あんたは趣味グラマのようだからそういうことは気にしなくていい立場なのかもだから言っても意味ないだろうけど
0963876
2011/08/06(土) 00:33:45.01その場合はNULLを渡して、「インスタンスを生成してないのにアクセスした」
静的メンバ内で例外処理してます。
>>959
ありがとうございます。
SetWindowLong/GetWindowsLong、SetProp/GetProp
も試しましたが、私のやりたい事ではエラーがでてしまい、他の方法で解決しました。
CreateWindow を呼ぶと WM_CREATE 以前にもいくつかメッセージが飛ぶらしく、
WM_CREATEにたどり着くまでウィンドウハンドルが返りません。
SetProp にはハンドルが必要なので、WM_CREATE 以前の処理には使えないのです。
0964デフォルトの名無しさん
2011/08/06(土) 00:45:10.66map<HWND, hoge *>にもHWNDは必要だけど、こっちはCREATEメッセージより前の処理どうしてるの? それと同じようにすればいいのでは?
0965876
2011/08/06(土) 01:18:18.43>>964
悩みましたよ、無茶な方法かもしれませんが解決しました。
プロシージャ内からアクセスするためにグローバルで hoge hogetool; を用意し、
静的メンバに hoge* pCreater; を準備し、
CreateWindow 直前に this を代入してフラグとして使い。
プロシージャの先頭で hogetool.pCreater にアクセスすれば、どのオブジェクトから create されたかわかります。
thisMap に create するたびに登録すれば、2度目からは hWnd から検索できます。
登録し終わったら pCreater をクリアする事と、デストラクタでは thisMap から erase する事を忘れずに。
0966876
2011/08/06(土) 01:22:07.57ええ、今の所は趣味グラマです。
おまけに経験もないので、まず理解しやすい方法でやるのがやっとです。
保守性まで気が回るのは先の話でしょうね。
アドバイスありがとうございます。
0967デフォルトの名無しさん
2011/08/06(土) 01:25:56.17>>956 のような実例が欲しいのですがね…
>>954 の window_proc 中の thisMap へのアクセスの記述を
具体的に this(またはそれに類するもの) を使って書いて欲しいという一点に集約されてるのですけど
0968876
2011/08/06(土) 01:40:20.56ご免、クラス名が違ったりしますが生ソースを部分的に張ります。
>>962
シロウト臭い、見苦しいソースでしょうが許してください。
私の今の限界です。
0969876
2011/08/06(土) 01:41:52.79MdiWindow* MdiWindow::setThis(HWND hwnd){
if(this->pCreator){ /ウィンドウ生成を試みている"this"が存在するなら
//"map_this"に登録
(this->mapThis).insert(pair<HWND, MdiWindow*>(hwnd, this->pCreator));
this->pCreator = 0; //フラグをクリア
return this->pCreator; //発見した"this"ポインタを返す
}else{
return 0; //存在しないなら"0"を返す
}
}
0970876
2011/08/06(土) 01:43:12.01MdiWindow* MdiWindow::getThis(HWND hwnd){
map<HWND, MdiWindow*>::iterator itr; //map型イタレーター
itr = (this->mapThis).find(hwnd); //検索
if(!(itr == (this->mapThis).end())){ //要素を発見したら、"itr->first"がキーで"itr->second"が値
return itr->second; //発見した"this"ポインタを返す
}else{
return 0; //発見できないので"0"を返す
}
}
0971デフォルトの名無しさん
2011/08/06(土) 01:43:19.56↓ こういうことだろ。俺はこんなコードはメンテしたくない
hoge::g_hoge = new hoge();
HWND h = CreateWindow();
// ここでウインドウプロシージャが呼ばれる↓
static LRESULT CALLBACK window_proc(HWND h) {
if (g_hoget != nullptr) {
hoge::thisMap[h] = g_hoge;
g_hoge = nullptr;
hoge::thisMap[h]->my_proc();
}
else hoge::thismap[h]->my_proc();
}
0972デフォルトの名無しさん
2011/08/06(土) 01:45:24.29hoge::thiaMap[h] でアクセスしてる
貴方のルールでは オブジェクトからの呼び出し になるような記述をしなくてはならないハズだが?
0973876
2011/08/06(土) 01:47:41.69LRESULT CALLBACK MdiWindow::frame_proc(
HWND hwnd,
UINT wmsg,
WPARAM wp,
LPARAM lp
){
//"MdiWindow"クラスの"this"ポインタを取得
MdiWindow* This = 0;
if(!(This = mditool.setThis(hwnd))){
if(!(This = mditool.getThis(hwnd))) THROW(-1, "未登録ウィンドウのメッセージを検出");
}
//MSGで場合分け
switch(wmsg){
case WM_CREATE:
//MDICLIENT生成
mdiclient.create("MDICLIENT", "", 0, hwnd);
return 0;
default:
MdiWindow::base_proc(hwnd, wmsg, wp, lp);
return (DefFrameProc(hwnd, mdiclient.ret_hwnd(), wmsg, wp, lp));
}
return 0;
}
0974デフォルトの名無しさん
2011/08/06(土) 01:50:06.52MFC、Win32++を超えるライブラリを作るスレ
http://hibari.2ch.net/test/read.cgi/tech/1286592582/
こっちに移動したら?
0975デフォルトの名無しさん
2011/08/06(土) 01:51:43.53これだとウィンドウ生成過程で別のウィンドウ生成したら爆死しますよね
0976876
2011/08/06(土) 01:51:52.90心配しないでくれ、こんな趣味グラマが作ったコードのメンテをあなたには頼まないから。
>>972
それ、俺じゃ無い。
それにもちろん、どうしてもそうしないとエラーが出るならそうアクセスします。
0977デフォルトの名無しさん
2011/08/06(土) 01:57:39.15struct hoge { static hoge *g_hoge; virtual void my_proc(); map<> thisMap; };
auto ph = new hoge();
ph->g_hoge = ph;
auto h = CreateWindow(); // この時点ですでにWndProcが呼ばれる。
ph->set(h);
----- WndProcここから
static void WndProc(HWND h) {
auto ph = static_cast<hoge *>(nullptr)->get(h); // ph == nullでもおk
ph->thisMap[h]->my_proc();
}
0978876
2011/08/06(土) 01:58:49.05初心者の私には、「MFC、Win32++を超える」なんて自信は無いもので。
よちよち歩きの理解だし、初心者板が似合いだと思います。
>>975
ええ、複数スレッドから使ったりするとやばいかも。
だから無茶な方法だと自覚してます。
回避する方法を考えなきゃ...
0979972
2011/08/06(土) 02:01:49.73>>977
むむむー
文法で解決できる事柄なのに、スタイル維持にはちょっと特殊な構造にしないといけないのか…
0980876
2011/08/06(土) 02:06:05.94ロックすれば良いのかな?
ロックフラグ用意して、ロックされてる間は生成の順番待ちしてもらうかな。
できるだろうか。
0981デフォルトの名無しさん
2011/08/06(土) 02:10:24.87hoge* pCreaterも排他付きmapにして、lpParamに識別渡すんだよ。
そのためのlParam。
0982デフォルトの名無しさん
2011/08/06(土) 02:16:26.78単一スレッドでも不完全
0983876
2011/08/06(土) 02:26:24.34なるほど、ありがとうございます。
>>980
どう不完全でしょう。
すみません、教えていただけないでしょうか?
面倒くさいとは思いますが。
0984デフォルトの名無しさん
2011/08/06(土) 02:31:26.04ウインドウ生成は基本的にマルチスレッドでするものではないし、一応完全だと思うが。
ウインドウ生成過程でウインドウ生成ってなんだ?
hogeウインドウ生成中にhogeウインドウは生成されないだろ
0985876
2011/08/06(土) 02:31:37.05おやすみなさい、また明日。
アドバイスくださった方ありがとうございました。
0986876
2011/08/06(土) 02:37:04.31ええ、普通マルチスレッドではしませんよね。
でも指摘された事に対する可能性はそれなのかな...と。
完全ならうれしいのですが。
他の人は完全では無いというので混乱してきました。
0987デフォルトの名無しさん
2011/08/06(土) 02:37:30.12俺も趣味グラマだけど
趣味グラマだと守破離の守の先生もとて教育されていないから超俺俺になり、
守の先生もとで修行を積んだ職業PGからみれば><になるってことは覚えておいたほうが良い
まっ、趣味グラマなら動けばOK、自己満足満たせばOKだけどね
0988デフォルトの名無しさん
2011/08/06(土) 02:44:06.51例えば再帰的にサブウィンドウが作られる場合とかが危険
(g_pHoge = new Hoge; CreateWindow(...)) 〜 (WM_CREATEをハンドリング; マッピング)
この間(〜の部分)でもう一度Hogeクラスのウィンドウを作ろうとしたらg_hogeが書き換わってしまいマッピングに失敗する
マッピングの後にサブウィンドウを作るなら問題ないし普通はそうするだろうけどね
0989876
2011/08/06(土) 03:00:36.22プロシージャのWM_CREATEにおける処理が終わるまで、次のウィンドウを作ってはならないという理解でよいでしょうか?
だとすると、終わった所で外れるロックフラグを用意すれば大丈夫でしょうか。
0990デフォルトの名無しさん
2011/08/06(土) 04:00:14.23g_pHogeがフラグそのものになるじゃないか。
if (g_pHoge != 0)残念;
g_pHoge = new Hoge(); h = CreateWindow();
g_thisMap[h] = g_pHoge; g_pHoge = 0;
0991デフォルトの名無しさん
2011/08/06(土) 06:00:10.48035です。ちょっと金銭的な問題で高いソフトを買う金が無いんですよね。
フリーでそういったWinアプリを作成できるようなものはないんでしょうか?
0992デフォルトの名無しさん
2011/08/06(土) 06:05:09.400993デフォルトの名無しさん
2011/08/06(土) 06:05:35.410994876
2011/08/06(土) 08:40:46.99おはようございます。
OK、理解できました。
thisMapに登録するまでの間、内側から create しないようにします。
助言ありがとうございます。
0995デフォルトの名無しさん
2011/08/06(土) 13:41:00.16レスにあることすら自分では全く調べませんよってことか
なら、Winアプリを作成も自分でしないで誰かにやらせたら
>フリーで
そんな奴だと平気で後だし条件を付けて
おまえら調べろってするよな
0996デフォルトの名無しさん
2011/08/06(土) 13:53:32.59Windows フォトビューアーで複数の画像を同時に開く処理
(エクスプローラで複数の画像ファイルを選択し、Enterを押すのと同じ処理)
をCで書きたいのですが、
ShellExecute(NULL,"OPEN","Rundll32.exe","\"C:\\Program Files\\Windows Photo Viewer\\PhotoViewer.dll\",ImageView_Fullscreen 画像のパス", NULL, SW_NORMAL);
で一つの画像ファイルを開くことには成功したのですが、複数画像を開く方法がわかりません。
半角スペースで画像パスを並べたり、ダブルクオーテーションで括ったりしましたが起動しませんでした。
どなたか解決法をご存知の方はいませんか。
0997デフォルトの名無しさん
2011/08/06(土) 14:40:34.84ファイルの個数だけ ShellExecute を呼べばいいんじゃね
0998デフォルトの名無しさん
2011/08/06(土) 15:04:27.78>>995
ネットで情報収集する能力すら弱い初心者なのかも、自分と同じ基準で評価するのは良くないでしょう。
VC++2010Express はマシンスペックによってはマトモに動かないかも、新しい分だけ重いし。
グレードダウンして VC++2008Express も考慮に入れるべき。
VC++2005Express は Platform SDK が別に必要で設定もややこしいので勧めません。
本当の初心者がいきなり Qt のような高級ライブラリに手を出すのはツライでしょうか。
開発環境を手に入れたら、WinAPIの入門サイトでも見ながら勉強しては?
0999876
2011/08/06(土) 17:36:44.41それぞれ、以下のように解釈できると思います。
hoge::honyaraga();
シンボルで示される情報空間上アドレスの命令を実行。
phoge->honyaraga(); this->honyaraga();
オブジェクトで示される現実上のロボット(PC)が命令を実行。
私にとっては可能な限り下の手法で統一する方が、即物的で理解しやすいです。
手段の正当性を多少無視してもメリットがあります。
手段と目的を間違ったら意味がありません。
便利な方法で使う事が目的です、厳密に言語仕様を守りすぎて不便じゃ困ります。
もちろん上の方が便利という人も多いでしょう。
私も以前は上の手法で書いていましたよ。
常識を破りすぎだと言われるとは予想しませんでしたが、後から変えたのです。
1000ぴころ ◆lHG3Yzo0a6
2011/08/06(土) 18:14:40.28,. -──- 、 ミ r‐、
/ _ -v-- 、 \ ノ) }
/ / rv、 、`ヾヽ /ハ l ! / ))
l/ // | l l lヾヘマヽ / \/
/ /ー '^′`ー:: ┼l_」ヘ/| / /
H'´ ≡/////≡ | / | j / /
l{ ::::: ┌─ ┐ :::::: 冂ヽ lく / /
八 | | l´レj / /
/ /\ | | | |/ / また次スレでね〜!
〈_/ rく ` ー--‐ 7´:! {:{ /
/\ / l/Ll:|:. .:/|
/ / ー-/ :|: l:l:/ l
/ / i :|: //:. ヽ
/ヽ ヽ、 __::人 __:ノ:/'´|:. l: __ノ
\ \_ { ,,,):::::l(,,.;;} .:|:.__冫´
/ `ー/ー┤:::l .:|
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。