【初心者歓迎】C/C++室 Ver.8【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGただしその場合、質問者は必ず、環境を書きましょう。
【初心者歓迎】C/C++室【環境依存OK】
http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
【初心者歓迎】C/C++室 Ver.2【環境依存OK】
http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
【初心者歓迎】C/C++室 Ver.3【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
【初心者歓迎】C/C++室 Ver.4【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
【初心者歓迎】C/C++室 Ver.5【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (html化待ち)
【初心者歓迎】C/C++室 Ver.6【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1082182233/l50
【初心者歓迎】C/C++室 Ver.7【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1086373839/l50
【ラウンジ】質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0002デフォルトの名無しさん
NGNG★初心者にVisual C++を教えるスレ★ Part13
http://pc5.2ch.net/test/read.cgi/tech/1089011118/l50
C++Builder相談室 Part10
http://pc5.2ch.net/test/read.cgi/tech/1089299158/l50
GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/l50
Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/l50
タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/l50
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/l50
0003デフォルトの名無しさん
NGNGC言語なら俺に聞け! Part 87
http://pc5.2ch.net/test/read.cgi/tech/1090654469/l50
C++相談室 part33
http://pc5.2ch.net/test/read.cgi/tech/1090180012/l50
C/C++の宿題は拙者が斬る! 29代目
http://pc5.2ch.net/test/read.cgi/tech/1090765027/l50
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/l50
プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/l50
フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/l50
C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50
くだらない質問でもべっちょ偉そうに聞いていいスレ
http://pc5.2ch.net/test/read.cgi/tech/1069530956/l50
0004デフォルトの名無しさん
NGNGMFCは使えるのでしょうか?
0005デフォルトの名無しさん
NGNGこっち。
Borland C++ BuilderX
ttp://pc5.2ch.net/test/read.cgi/tech/1065260556/l50
0006デフォルトの名無しさん
NGNG以下のコードを含むプログラムを1000回ほど繰り返すのですが、
このコードの違いだけで 40FPS もの差がでており、?な状況です。
//遅いコード
tmp = func();
*p = tmp;
//速いコード
*p = func();
tmp = *p;
p はサーフェス上のピクセルデータを指す WORD 型へのポインタです。
このような差が出てしまう原因として、どういったことが考えられるのでしょうか?
よろしくお願いします。
0007デフォルトの名無しさん
NGNGtmp の型と、func() の戻り値の型は DWORD です。
0008デフォルトの名無しさん
NGNGそれだけじゃわからねーから、ソース上げろ
0009デフォルトの名無しさん
NGNGelse if (pixelinfo.bpp_ == 16) {
LONG srcpitch = srcddsd.lPitch / 2, dstpitch = dstddsd.lPitch / 2;
WORD* const srcptr = static_cast<WORD*>(srcddsd.lpSurface);
WORD* const dstptr = static_cast<WORD*>(dstddsd.lpSurface);
DWORD srcclr0=0, dstclr0=0, newclr0=(*blendfunc)(dstclr0, srcclr0, alpha);
for (int sy = srcrect2.top; sy < srcrect2.bottom; ++sy) {
for (int sx = srcrect2.left; sx < srcrect2.right; ++sx) {
DWORD srcclr = srcptr[srcpitch * sy + sx];
if (!trans || srcclr != clrkey) {
int dx = dstx + (sx - srcrect->left);
int dy = dsty + (sy - srcrect->top);
WORD* dp = dstptr + dstpitch * dy + dx;
DWORD dstclr = *dp;
if (srcclr == srcclr0 && dstclr == dstclr0) {
*dp = newclr0;
}
else {
*dp = (*blendfunc)(dstclr, srcclr, alpha); //(1)
srcclr0 = srcclr;
dstclr0 = dstclr;
newclr0 = *dp; //(2)
}
:
(1)の部分を newclr0 = (*blendfunc)(dstclr, srcclr, alpha);
(2)の部分を *dp = newclr0;
と変えてコンパイルしているだけなのですが、
何かお分かりになりましたらよろしくお願いします。
0010デフォルトの名無しさん
NGNGサーフェスをVRAMに置いてないか?
0011デフォルトの名無しさん
NGNG俺もVRAM通してるから、と一瞬思ったが、それだと下のは逆の結果にならないか?
>//遅いコード
>tmp = func();
>*p = tmp;
>//速いコード
>*p = func();
>tmp = *p;
00126
NGNG作成しました。何でなんですかね…。
0013デフォルトの名無しさん
NGNG見た感じだけど、その程度のプログラム量なら
マシン語になった際 newclr0 はスタック上に存在するが、
dp はレジスタを使っている気がする。
0014デフォルトの名無しさん
NGNG0015デフォルトの名無しさん
NGNGnewclr0 = *dp; //(2)
srcclr0 = srcclr;
dstclr0 = dstclr;
newclr0 = (*blendfunc)(dstclr, srcclr, alpha); //(1')
*dp = newclr0; //(2')
srcclr0 = srcclr;
dstclr0 = dstclr;
こうなってても変わらん?
0016デフォルトの名無しさん
NGNG0017デフォルトの名無しさん
NGNG次の引数も何も、オーバーロードはそれだけで完結するんだが。
std::cout << a << b << c;
とかやりたいの?
(((std::cout << a) << b) << c);
001816
NGNGああいやoperator<<()で独自の機能を持たせようとしてるんですけど、独自の機能もたせるとシフトしてくれないんですよ。何かいい方法あるでしょうか。
0019デフォルトの名無しさん
NGNGあと、>>16をどう読んでも>>18にはならない。もっと日本語がんばれ。
0020デフォルトの名無しさん
NGNGoperator<<()の中にシフトのコードもインラインアセンブリなんかで書く。
0021デフォルトの名無しさん
NGNGおつ
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGそのファイル名を出力するファイル名にしたいのですが
実行すると「出力先ファイルを開けませんでした。」と出ます。
なぜなんでしょうか?
入力ファイル名をきちんとgetできているか
putsで確認したところちゃんとgetできていました。
printf("入力ファイル名を入力してください。 :");
gets(infile);
if((fin=fopen(infile, "r")) == NULL){
printf(".cume ファイルを開けませんでした。\n");
exit(1);
}
fgets(outfile, 256, fin);putchar('\n');
puts(outfile);
if((fout=fopen(outfile, "w")) == NULL){
printf("出力先ファイルを開けませんでした。\n");
exit(1);
}
0024デフォルトの名無しさん
NGNGfgetsは改行文字を保存するから。
0025デフォルトの名無しさん
NGNGfgetsは改行文字も読み込むから、まずそれを捨てろ。
0026デフォルトの名無しさん
NGNGでググって色々調べたところ
len = strlen(outfile);
outfile[len - 1] = '\0';
↑の二行を追加することで問題が解決しました。
ありがとうございました。
0027デフォルトの名無しさん
NGNGきちんと本を読んで書いたし、
違う場所があるなら違う場所を言えばいいのになぁ・・・
自分にも相手にも、質問者にも為にならないし
0028デフォルトの名無しさん
NGNG俺は指摘した本人ではないが、
>2.
>外部変数(グローバル変数)になった時だけ、両方の意味が同じになります。
同じではない。
グローバル変数にstaticをつけると、関数につけるのと同じで、
他のファイル(翻訳単位)から参照できなくする。
>少しの違いといえばintなら0で初期化されるかされないかの違いぐらいで、
どちらも0で初期化される。
>staticを使ったからといって通用範囲が狭くなるわけでもありません。
狭くなる(上述)。
0029デフォルトの名無しさん
NGNGautoだって元々参照できないでしょうに。
他のファイルから参照って言うのはつまりincludeした場合ですか?
グローバル変数は全部初期化されるんですね。
俺が勉強した時(2、3年前)にautoは初期化されないと読んだような気がしたので。
0030デフォルトの名無しさん
NGNG>autoだって元々参照できないでしょうに
autoはローカル変数だけだぞ?
void func(void) {auto int a;} /* ok, 単にint a;と書いても同じ。初期化されない。 */
auto int b = 4; /* error */
>他のファイルから参照って言うのはつまりincludeした場合ですか?
/** a.c **/
int g;
/** b.c **/
extern int g;
/* ここでgを使う */
0031デフォルトの名無しさん
NGNG0032デフォルトの名無しさん
NGNG未熟さ故の過ちなので許してください。
>autoはローカル変数だけだぞ?
初めて知りました。
有難うございます。
>>他のファイルから参照って言うのはつまりincludeした場合ですか?
>/** a.c **/
>int g;
>/** b.c **/
>extern int g;
>/* ここでgを使う */
autoがローカル変数のみという事が解ったので
こちらも自然と解りました
有がとうございます
0033デフォルトの名無しさん
NGNGhttp://pc5.2ch.net/test/read.cgi/tech/1086373839/984
>1.
>ソースファイル一つを関数一つと考えるとその通りです。
>ただ関数内のグローバル変数という時点でグローバルでは無いわけですが
>”変数の範囲”としてはそう考えていいでしょう。
ここも嘘
0034デフォルトの名無しさん
NGNG>>27を読もう
0035デフォルトの名無しさん
NGNGその書き込みのときに読んだ本の名前、晒しといたほうがいいんじゃないか?
0036デフォルトの名無しさん
NGNGうのみにする方が問題。
0037デフォルトの名無しさん
NGNGstd::string<char> s(array.begin(), array.end());
ってできないんですか?
0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGstring<char> → basic_string<char>
・・・なんかgccだとstring<char>が通った。ナンダコレ
0040デフォルトの名無しさん
NGNG#include <iostream>
using namespace std;
template <typename T> class A {};
typedef A <char> Achar;
int main () {
cout << typeid (A <char>).name () << endl;
cout << typeid (Achar <char>).name () << endl;
return 0;
}
これでもエラー出ませんね.実行すると
1AIcE
1AIcE
と出力します.因みに当方は3.3.4です.
0041デフォルトの名無しさん
NGNG-Wall -ansi付けても警告も出ないのか?
0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNGでないです.
0044デフォルトの名無しさん
NGNG-Wall -ansi -pedantic
で何事もなかったようにコンパイルします.
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNGなんてメソッドを作ったらアホって言われた。
速度なんてどうでもいいクラスだからこうしてるつもりだったけど
やっぱり
void get(vector<string>&)
って書くべきですか?
0047デフォルトの名無しさん
NGNGコピーするわけだろう?
0048デフォルトの名無しさん
NGNGvector<string> get()は2回コピーするから2倍遅いよ。
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNGttp://pc5.2ch.net/test/read.cgi/tech/1087209526/
ttp://pc5.2ch.net/test/read.cgi/tech/1014486422/
0051デフォルトの名無しさん
NGNGの「0x100」部分が何をやってるのかわかりません。 ごめんなさいごめんなさい 助けてください。
0052デフォルトの名無しさん
NGNG16進数で100ってことだが…
0053デフォルトの名無しさん
NGNG0xを最初につけると16進数
1〜9が最初ならば10進数
0055デフォルトの名無しさん
NGNG気分次第。 256 より 0x100 の方が見た目キリがいい(かどうかは書いた本人次第だが)でしょ?
0056デフォルトの名無しさん
NGNGよりも
0x8000000
のが見やすいからです
0057デフォルトの名無しさん
NGNG100000000
0058デフォルトの名無しさん
NGNGそういう場合は下を使うだろう
ってか態々100000とか見やすいのを醜くする方が頭可笑しいよな
005951
NGNG0060デフォルトの名無しさん
NGNG16進で書くべきものはキリが悪かろうと16進で書く。
これが >>57 アドレスを指すなら多くの人は16進を選択するだろう。
0061デフォルトの名無しさん
NGNGusing namespace std;
class A {
protected:
int a;
public:
A(int v) { a = v; }
};
class B : public A {
protected:
int b;
public:
B(int v) { b = v; }
int get() { return a; }
};
int main() {
B bb(10);
cout << bb.get() << endl;
return 0;
}
test.cpp: In constructor `B::B(int)':
test.cpp:18: no matching function for call to `A::A()'
test.cpp:5: candidates are: A::A(const A&)
test.cpp:9: A::A(int)
このエラーはどうしたらいいのでしょうか?
0062デフォルトの名無しさん
NGNG0063デフォルトの名無しさん
NGNGありがとう御座います。
表示されました。
0064デフォルトの名無しさん
NGNG0065デフォルトの名無しさん
NGNGstd::dequeでよくね?
つーか、ぶっちゃけいらないんだけど・・・
0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNGこれはどういう理屈で2を返すんでげすか?
0069デフォルトの名無しさん
NGNG0070デフォルトの名無しさん
NGNGC言語(コンパイラはVC++)でSQL Serverにアクセルする場合は
一般的にはどのような方法で行うのがよいでしょうか?
現在考えているのは
http://homepage1.nifty.com/kojama/works/rdbms/conn/vc.html#apisel
のODBC(API)で SELECT(CSV形式で標準出力に表示) の
やり方です。
もっと簡単で標準的な方法があればおしえてください。
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNG0074デフォルトの名無しさん
NGNGdata[0]="a";
data[1]="b";
count[(data[0]<<8)+data[1]]++;
こういう書き方ってできるんでしょうか?
やってることは、分布数えソートで文字列「ab」の分布を数えてるのですが・・・・・
何で配列の添字に数字以外が入ってるのかわからない;;
0075デフォルトの名無しさん
NGNGdata[0]='a'; data[1]='b';
char型変数二文字分をまとめて2バイトの数値にして、
テーブルのインデックスに使ってるんでしょ。
具体的には、ASCIIコードな環境では'a'は0x61、'b'が0x62なので、
count[0x6162]の値をインクリメントしてる。
0076デフォルトの名無しさん
NGNG0077デフォルトの名無しさん
NGNG0078デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG漏れの予想だが、そのソフトは想定した動きをしない。
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
ここの問題スレに問題のソースを張ってみ?
0080デフォルトの名無しさん
NGNG>>79 見てるのは他人のソースなので、完成したら貼らしてもらいます。。
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNG0083デフォルトの名無しさん
NGNG0084デフォルトの名無しさん
NGNG「初心者歓迎」のタイトルを見て教えてクンが集まってくるから、
叩かれる事も多い。
それで剣呑に見えんじゃないの、このスレ。
自分的には、まともな質問者にはそれなりにきちんと回答してるつもりだけど。
0085デフォルトの名無しさん
NGNG0086デフォルトの名無しさん
NGNG0087デフォルトの名無しさん
NGNG0088デフォルトの名無しさん
NGNG0089GROAD ◆4C1MajRa36
NGNG質問させていただきます
環境はWin32APIです
今回、初めてブラウザ補助ツールを組むことになったのです
(ダウンロード補助)
小ウィンドウにアドレスを入力させ親ウィンドウに情報を受け渡してから接続させたいのですが肝心のアドレス(URL)の認識とアクセスのさせかたがわかりません
とりあえず調べてみたのですが書いてあるサイトは見つけられませんでした。
どの関数を使えばいいのでしょうか?
ヒントだけでもいいので御教授頂けると幸いです
0090デフォルトの名無しさん
NGNG0091デフォルトの名無しさん
NGNG0092デフォルトの名無しさん
NGNG他のプログラムはBASICしかしりません。
0093GROAD ◆4C1MajRa36
NGNGURLのことです
0094デフォルトの名無しさん
NGNGwinsock
0095デフォルトの名無しさん
NGNGお前には無理。
0096デフォルトの名無しさん
NGNG無理な根拠を上げよ。
0097デフォルトの名無しさん
NGNG無理では無い根拠を挙げよ。
つか、ぐだぐだ言ってないで本屋なり図書館なり行けっての。
検索したり推薦図書などのスレもあるのに。
0098デフォルトの名無しさん
NGNG推薦図書/必読書のためのスレッド PART 19
http://pc5.2ch.net/test/read.cgi/tech/1089492835/
0099GROAD ◆4C1MajRa36
NGNGこれで何とか作れそうです。
お礼に土産話を一つ
http://www.babu.com/~wristcut/i/ii/k/732.htm
0100デフォルトの名無しさん
NGNGもう一度いうがwinsockで間違ってない
期待してたのはプロセス間通信か?
回答を理解できない程度で気分悪いことするなよ
0101デフォルトの名無しさん
NGNG馬鹿を相手にしてはいけません。
0102GROAD ◆4C1MajRa36
NGNGデータさえ落とせればいいのですからプロセスで大丈夫です
(リンクを確率させる必要はありません)
0103デフォルトの名無しさん
NGNG│ 基地外警報!!! |
│ 基地外警報!! |
└―――──――――┘
ヽ(´ー`)ノ
( へ)
く
0104デフォルトの名無しさん
NGNGそんなに自分のアイディアに自信でもあるんだろうか。
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGその数値の内部表現を表しているのでしょうか?
NULLポインタに限らず整数の0でも、内部表現が0とは限らないというのを
どこかで聞いたんですが、たとえば整数0の内部表現に1のビットが含まれて
いるとき、ビット演算で1を取り出すことが出来るのでしょうか。
0107デフォルトの名無しさん
NGNGunionを使えば簡単だでや?
union {
void *pvValue;
double dValue;
long lValue;
};
pvValue = (void *)&lValue;
printf("%08X\n", lValue);
dValue = 0.01;
printf("%08X\n", lValue);
return 0;
0108デフォルトの名無しさん
NGNGclass A{};
class B :public A
{
void Func(){}
};
↑のようにclass Aから派生したclass Bがあったとき
B b;
A *a=&b;
void (A::*pFunc)()=(void (A::*)())b.Func;
(a->*pFunc)();
↑こんな感じで、
基本クラスのメンバ関数ポインタpFuncに
class Bの関数を(void (A::*)())にキャストして代入し、
呼び出し時も(a->*pFunc)()で呼び出しても
見た目は動いているように見えます。
このように書いても問題はないのでしょうか。
危険な部分がありましたら教えてください。
0109デフォルトの名無しさん
NGNGキャストが危険。あたりまえ。
0110デフォルトの名無しさん
NGNG0111デフォルトの名無しさん
NGNG危険すぎます。
実行したらペンタゴンにpingを打ちまくっていますw
0113デフォルトの名無しさん
NGNG0114デフォルトの名無しさん
NGNGもっとも、そんな奇天烈なコードが本当に必要なのか見直すのが先だけど。
0115108
NGNG実装したかった内容は、
配列、リスト等に様々なクラスのメンバ関数をポインタとして持ち
逐次実行できるような構造です。
仮想関数だと似たようなことはできますが、
実行できる関数がvirtualのついている1関数に限定されてしまうので
悩んでいます。
0116デフォルトの名無しさん
NGNGキャストするにしても呼び出す関数はコード内で指定しているわけだから
仮想関数だと限定云々は良くわからん。
0117デフォルトの名無しさん
NGNGこれを一緒くたにすること自体が問題
「できること」と「するべきこと」は違うのよ
>そんな奇天烈なコードが本当に必要なのか
これを深くかみしめたまい
0118デフォルトの名無しさん
NGNG2.必要な機能を実現する為の関数をもった抽象クラス=インターフェースを作る。
3.各クラスでそのインターフェースを継承して関数を実装する
1の手順を踏まずにコードを書き出して混乱してるんじゃないのか。
0120デフォルトの名無しさん
NGNGLokiのFunctor(boostにもある?)を使えば以下のようなことができるけど,
こんなことじゃなくて?
#include <iostream>
#include <loki/Functor.h>
#include <functional>
#include <list>
using namespace std;
struct A {
void show () const {cout << "A" << endl;}
};
struct B {
void show () const {cout << "B" << endl;}
};
typedef Loki::Functor <void> Functor;
typedef list <Functor> Functor_Container;
int main () {
A a0; B b0;
Functor_Container fc; fc.push_back (Functor (&a0, &A::show)); fc.push_back (Functor (&b0, &B::show));
for_each (fc.begin (), fc.end (), mem_fun_ref_t <void, Functor> (&Functor::operator ()));
return 0;
}
出力:
A
B
0121108
NGNG私も構造自体だめなんだと薄々感じています。
見直した方がよいのかもしれないですが、
他人に見せることのないオナニーコードなので
突き進もうと思います。
キャストが怖いとのことでしたので、
temlateを使って妥協することにしました。
struct A
{
virtual void Call(){}
virtual ~A(){}
};
template <class T>
struct B : public A
{
T* pThis;
void (T::*pFunc)();
B(T* tThis,void (T::*tFunc)()){pThis=tThis;pFunc=tFunc;}
virtual void Call()
{
if(pThis)
(pThis->*pFunc)();
}
};
↑こんな感じにしておいて配列、リストにでも入れようと思います。
std::list<A*> a;
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNG昔GCCスレに書いたもの(何だか今見れないので)を差し上げましょう.
これでビットパターンを見れるので,いろいろ観察して遊んでみて下さい.
#include <iostream>
#include <bitset>
template <class T> std::ostream & output_as_bits (std::ostream &p_os, const T &p, bool ascending_order = true) {
std::bitset <sizeof (T) * 8> p_bit; const char *pp (reinterpret_cast <const char *> (&p)); char byte_digit (1);
for (size_t i (0); i < p_bit.size (); ++ i) {
p_bit.set (i, static_cast <bool> (*pp & byte_digit));
if ((i + 1) % 8) byte_digit <<= 1;
else {byte_digit = 1; ++ pp;}
}
if (ascending_order) {
p_os << "L"; size_t i (0);
while (i != p_bit.size ()) {p_os << p_bit.test (i); ++ i;} p_os << "H";
} else {
p_os << "H"; size_t i (p_bit.size ());
do {-- i; p_os << p_bit.test (i);} while (i != 0); p_os << "L";
}
return p_os;
}
int main () {
int i0 (10); float f0 (10);
output_as_bits (std::cout, i0) << std::endl;
output_as_bits (std::cout, f0) << std::endl;
return 0;
}
0125デフォルトの名無しさん
NGNGmem_fun_ref_tがちょっとかっこ悪いんですけどね.
0127122
NGNGせっかくならもっと笑いになるよう努力してください
0130120
NGNGこちらはmem_fun_ref_tでテンプレートパラメータを渡す必要がないですね.
#include <iostream>
#include <functional>
#include <list>
#include <boost/function.hpp>
#include <boost/bind.hpp>
using namespace std;
struct A {
void show () const {cout << "A" << endl;}
};
struct B {
void show () const {cout << "B" << endl;}
};
typedef boost::function <void ()> Functor;
typedef list <Functor> Functor_Container;
int main () {
A a0; B b0;
Functor_Container fc; fc.push_back (boost::bind (&A::show, a0)); fc.push_back (boost::bind (&B::show, b0));
for_each (fc.begin (), fc.end (), mem_fun_ref (&Functor::operator ()));
return 0;
}
0131120
NGNG訂正.
- Functor_Container fc; fc.push_back (boost::bind (&A::show, a0)); fc.push_back (boost::bind (&B::show, b0));
+ Functor_Container fc; fc.push_back (boost::bind (&A::show, &a0)); fc.push_back (boost::bind (&B::show, &b0));
アドレスを渡さないとコピーしちゃうみたいですね.
0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNGそれに本当に設計を見直した方が良いのかは質問者が決める事で、
質問スレの意義は選択肢を提示するところにあるんじゃないだろうか。
0134デフォルトの名無しさん
NGNG0135デフォルトの名無しさん
NGNGデバイスコンテキストを使ってLineToやTextOutを使って描画した線や文字というのは
一体どこに保存されているのでしょうか?
デバイスコンテキストなのか、それともビットマップなのか・・・
是非ともご教授下さい。
お願いします。
0136デフォルトの名無しさん
NGNG0137デフォルトの名無しさん
NGNG0138デフォルトの名無しさん
NGNG0139デフォルトの名無しさん
NGNG保存されない。試しに描いたWindowの上に他のWindowを重ねてみれば、
描いたはずの絵が消える。もし保存したければ、ビットマップに一度描いて
それをWindowに描画する処理が必要。
0140デフォルトの名無しさん
NGNGあるソース見て
char[][5] =
{
0x01, 0x02, 0x03, 0x04, 0x05,
0x06, 0x07, 0x08, 0x09, 0x10
}
ってのがあったのだが、これってOKなの?
0141デフォルトの名無しさん
NGNGprintfしたら
↑こんなのがいっぱい出てきました。
2ちゃんで表示できているか心配です。
0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNGOKだよ。
だけど古いコンパイラではエラーになるかもしれない。
0144デフォルトの名無しさん
NGNG制御文字に当たるから書き込んでもうまく表示されるわけないだろう。
0145デフォルトの名無しさん
NGNG君はよく天然といわれるだろう?
0146デフォルトの名無しさん
NGNG0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNG0151135
NGNGうーむ・・・保存されないんですか
てっきり、画像データみたいな感じでメモリかどっかに保存
されてると思ってたんですが見当違いみたいですね
それじゃあ、プログラム内でウィンドウそのものを画像データ化
(キャプチャーソフトの様な感じで)というのは出来ないのでしょうか?
こんなことを聞いているのは何故かと言いますと、ネットワークを介
したお絵かきソフトを作りたいなと思いサーバ・クライアント間で
画像データを共有出来る方法を探ってるわけです
ちなみに、ネットワーク部分はほぼ完成しているので、後は画像データさえ
作れれば何とかなると思うのですが・・・これが良くわからないのです
是非、何かアドバイスをお願いします
後、長文失礼しました
0152デフォルトの名無しさん
NGNGサーバに画像用のメモリ確保してクライアントはそっちに書き、各クライアントに配信するか
サーバにクライアントのマウス情報を送り、サーバはそのマウス情報を(ry
してクライアントはそのマウス情報にそって(ry
画像キャプチャしながら送りあっていたら28.8kの通信速度じゃ無理だ。
0153デフォルトの名無しさん
NGNG描画コマンドはメタファイルとして保存できる
描画結果だけならDIBセクションとか使ってDIBにBltすればいい。
0154151
NGNG実は、リアルタイム通信じゃ無かったりします
クライアント1が描いてる間、他のクライアントは絵の内容を見れません
イメージとしては
C1が絵を描く→描き終わったらSへ画像データを送信→C2が画像を見る
※C・・クライアント S・・サーバ
なので、絵を見たり描いたり出来るのは同時に1人だけです
>>153
メタファイルというのは初耳です
DIBセクションというのは、BitBltみたいな感じなんでしょうか
ちょっと調べて見ます
どうもありがとうございました
0155151
NGNG0156151
NGNGどーしてもわからないので、ちょっと現在のソースをUpしてみます
ttp://gamdev.org/up/img/980.zip
結局どこに画像のデータが入ってるのかわからずじまいです・・・
何かアドバイスをお願いします
0157デフォルトの名無しさん
NGNGlpBMP
0158デフォルトの名無しさん
NGNG空のフォルダを削除するにはどうしたらいいのでしょうか?
googleで検索してもなかなか見つからず、
やっとサンプルコードが見つかったと思ったら、ないヘッダがインクルードしてあって
結局分かりませんでした。
0159デフォルトの名無しさん
NGNGないヘッダって何?
0160デフォルトの名無しさん
NGNG環境書けやコラ
0161デフォルトの名無しさん
NGNGsuperのようなのはないんですか?
0162デフォルトの名無しさん
NGNGC++なら,
#include <cstdio>
int main () {
std::remove("hoge");
return 0;
}
Cなら,
#include <stdio.h>
int main () {
remove("hoge");
return 0;
}
とか.hogeはパスです.
0163151
NGNG言われた通りにデータ構造体に void* lpBMPを追加して
直接RGBの値(輝度?)を設定して画面全体が水色になったサーバ上の絵を
クライアントに送りました
[クライアントのデータ受信](データ受信時に画像作成)
hBitmap = CreateDIBSection(NULL, &bmi, DIB_RGB_COLORS, &g_RcvPictureData.lpBMP, NULL, 0);
こんな感じにしてみたんですが、残念なことにクライアントでは画面真っ黒な状態です・・・
サーバでは水色になってるんですが
lpBMPだけじゃダメなんでしょうか・・・
うーむ・・デバイス独立ビットマップっていうぐらいだから、DCに依存しないと思うんですが
謎です・・・困った
0164デフォルトの名無しさん
NGNG158ではないが、今のremoveはフォルダ/ディレクトリを消せるのか。知らなかったよ。
0165デフォルトの名無しさん
NGNGポインタじゃなくて中身をコピーしろよ
0166151
NGNG中身・・・ですか
サーバ側では送信データのlpBMPに対して
((char*)g_SndPictureData.lpBMP)[offset+2] = 127;
このように直接値を入れて、これをそのままクライアントに送ってるのですが
これだと中身は送られてないんでしょうか・・・
0167162
NGNGLinuxのmanによると,
>remove deletes a name from the filesystem. It calls unlink for files,
>and rmdir for directories.
と書かれています.
標準ライブラリなのでたぶん158の環境でも大丈夫だと思うんですけどね.
0168デフォルトの名無しさん
NGNG0169デフォルトの名無しさん
NGNGremoveは標準ライブラリじゃねーよ
0170デフォルトの名無しさん
NGNGhttp://66.102.7.104/search?q=cache:EXoeqkMCCkcJ:docs.hp.com/ja/B2355-60104-07/remove.3C.html+remove+ANSI+C&hl=ja&lr=lang_ja&inlang=ja
0171デフォルトの名無しさん
NGNGhttp://66.102.7.104/search?q=cache:aK3AwFixgYsJ:www.st.rim.or.jp/~phinloda/cqa/cqa13.html+remove+ANSI+C&hl=ja&lr=lang_ja&inlang=ja
0172デフォルトの名無しさん
NGNG----------------------------------------------------------
169 名前:デフォルトの名無しさん[sage] 投稿日:04/08/06 03:58
>>167
removeは標準ライブラリじゃねーよ
----------------------------------------------------------
0173デフォルトの名無しさん
NGNG少なくともLSI-Cや古いMS-Cでは消せなかった
0174162
NGNGじゃ,その可能性も考慮してboostで.
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
int main () {
boost::filesystem::path dir ("hoge");
boost::filesystem::remove (dir);
return 0;
}
0175デフォルトの名無しさん
NGNGWindowsならwinodws.hのRemoveDirectory
0176デフォルトの名無しさん
NGNG対象がディレクトリならrmdir()を呼ぶように実装するのが当たり前だろ?
0177デフォルトの名無しさん
NGNG0178デフォルトの名無しさん
NGNGBCCらしい。けどここはBCCスレでもないしWin32APIスレでもないが。
http://pc5.2ch.net/test/read.cgi/tech/1090180012/872-875n
0179デフォルトの名無しさん
NGNGばかはおまいだろ、屁理屈野郎
空のフォルダを削除するプログラムを書くのは
環境に依存しないよ
0180デフォルトの名無しさん
NGNG0181デフォルトの名無しさん
NGNGバカ晒しage
0182デフォルトの名無しさん
NGNGlibc5 removeで検索しれ池沼
0183デフォルトの名無しさん
NGNG環境依存だと判ってるなら環境が何か書けよ。
0184デフォルトの名無しさん
NGNG#include <stdio.h>
main(void)
{
int i;
char math;
printf("計算したい加算乗除を選択してください。\n足し算:A\n引き算:B\n掛け算:C\n割り算:D\n");
gets(math);
if (math = "a"){
printf("足し算をします。\n");
}
else {
printf("その他の計算を行います。\n");
}
return 0;
}
今はif文のテストとしてメッセージだけを表示されるように組んでます。
何故だか分からないんですけどエラーが出るんです。
どうすればいいのか、どなたか教えていただけませんか?
0185デフォルトの名無しさん
NGNGコンパイルが出来ないのか、実行時エラーなのか、エラーメッセージ書け、ヴォケ
>char math;
>gets(math);
getsの引数はchar *型を指定する。gets(&math)にすればコンパイルは通る、が実行時にアボン
>if (math = "a"){
文字列定数"a"はchar *型、char型のmathとは比較できない。
Cで文字列を比較するならstrcmpを使う。
char math[BUFF_SIZE];
とかにすれば、BUFF_SIZE-1文字までの入力なら動く。
どうでもいいが、入力を促すメッセージでは大文字の"A"なのに、
小文字の"a"との比較で良いのか?
0186デフォルトの名無しさん
NGNG裏画面つくってそこに描画してる…?
つくってるだけで終わってませんよね。
//裏画面Bitmap作製
DWORD *lpBMP;//画素データへのアドレス
HDC hBackDC=CreateCompatibleDC(NULL);
char bmbuf[sizeof(BITMAPINFOHEADER)];
BITMAPINFO &bi=*(BITMAPINFO*)&bmbuf;
BITMAPINFOHEADER &bih=bi.bmiHeader;
ZeroMemory(&bi.bmiHeader,sizeof(BITMAPINFOHEADER));
bih.biSize=sizeof(BITMAPINFOHEADER);
bih.biWidth=width;//ウィンドウ幅
bih.biHeight=-height;//ウィンドウ高さ
bih.biPlanes=1;
bih.biBitCount=32;
HBITMAP hBitmap=CreateDIBSection(NULL,(BITMAPINFO*)&bih,DIB_RGB_COLORS,(void**)&lpBMP,0,0);
ZeroMemory(lpBMP,sizeof(DWORD)*width*height);
SelectObject(hBackDC,hBitmap);
//描画は全部裏画面へ
TextOut(hBackDC,x,y,str,lstrlen(str));
//WM_PAINT等の最後では裏画面を表に転送
//hDCは表画面のデバイスコンテキスト
BitBlt(hDC,0,0,width,height,hBackDC,0,0,SRCCOPY);//裏画面→表画面にコピー
転送するのは裏画面ビットマップ全体。
画素データだけならlpBMP〜lpBMP*(DWORD)*width*heightに全部入っている。
0187デフォルトの名無しさん
NGNGif (math = "a"){
→if (math == "a"){
ってオチですか…?
比較は「==」ね。
0188デフォルトの名無しさん
NGNG185が大量に突っ込んでました…。
0189デフォルトの名無しさん
NGNGレスありがとうございます。
エラーは
「error C2664: 'gets' : 1 番目の引数を 'char' から 'char *' に変換できません。 (新しい機能 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。」
と
「error C2440: '=' : 'char [2]' から 'char' に変換することはできません。(新しい動作 ; ヘルプを参照)
この変換には reinterpret_cast, C スタイル キャストまたは関数スタイルのキャストが必要です。」
です。
ちょっと分からないんですけどchar *型って何ですか?
大文字のAと小文字のaは普通に間違えてました。指摘どうも。
>>187
比較ってしたとすると具体的にどんな事をするんですか?
0190デフォルトの名無しさん
NGNG>ちょっと分からないんですけどchar *型って何ですか?
いくら初心者歓迎とはいえ…
char型へのポインタを格納する型。
Cには「文字列型」はないので、charに文字を格納し、
charの配列で文字列を扱う。
0191デフォルトの名無しさん
NGNG#include <stdio.h>
#include <conio.h>
main(void)
{
int i;
char math;
printf("計算したい加算乗除を選択してください。\n足し算:A\n引き算:B\n掛け算:C\n割り算:D\n");
do {
math = getch();
switch (math) {
case 'A' :
printf("足し算をします。\n");
break;
case 'B' :
printf("引き算をします。\n");
break;
case 'C' :
printf("掛け算をします。\n");
break;
case 'D' :
printf("割り算をします。\n");
break;
}
} while (math != 'A' && math != 'B' && math != 'C' && math != 'D');
return 0;
}
0192デフォルトの名無しさん
NGNG勉強不足だったようです。
出直してきます。
ご迷惑おかけしました。
0193デフォルトの名無しさん
NGNG作り直していただき、ありがとうございます。
でも、192で書いたとおりです。
すいませんでした。
0194デフォルトの名無しさん
NGNG引き算の立場は?
0195デフォルトの名無しさん
NGNG加算で負数を指定させることで対応。
0196デフォルトの名無しさん
NGNG0197151
NGNGサーバでもクライアントでも、裏から表へBitBltしてます
サーバから送るのは、(void**)&lpBMP 画素データと
HBITMAP hBitmap これでしょうか
↑これが裏画面ビットマップ?
0198デフォルトの名無しさん
NGNGアドレス渡しても意味無いんだよ、Cからやり直して来い。
送るべきデータは
lpBMP〜(lpBMP+((width+3)&~3)*height)
0199デフォルトの名無しさん
NGNG-1
0200デフォルトの名無しさん
NGNGC++にさっさと移行したほうがいいんでしょうか?Cの一通りの知識は頭に入ってるとは
思います。テクニックはほとんどないですが。
できればCからのC++への移行に最適な参考書を紹介していただければ幸いです。
0201デフォルトの名無しさん
NGNGとりあえず猫でも読んどけ。
0202デフォルトの名無しさん
NGNG0203158
NGNG<環境>
WindowsXP
BCC5.5
です。
>>159
標準でついてきてないヘッダで、
DLしたサンプルにもついてないヘッダです。
>>178
BCCスレに行こうかと思ったところ、このスレの【環境依存OK】が目に入ったもので。
>>162,>>174,>>175
ありがとうございます。
試してみます。
0204デフォルトの名無しさん
NGNGプログラムをコンパイルしようとしたら、
「インクルードファイルxxx.hをオープンできない」というエラーが発生しました。
A. コマンドラインコンパイラのパスが設定した後、
インクルードファイルやライブラリファイルの場所を指定したBCC32.CFGを作成しなければなりません。
これは、List 4のようなファイルです。
List 4 BCC32の設定(BCC32.CFG)
-IC:\Borland\Bcc55\Include
-LC:\Borland\Bcc55\Lib
コマンドラインコンパイラは、コンパイルが成功すると自動的にリンカ(ILINK32)を呼び出します。
場合によっては、リンカを明示的に呼び出すことがあります。
この場合は、同様にILINK32.CFGファイルを設定してください。
また、BCC32.CFGやILINK32.CFGには、これ以外にもコンパイラやリンカに設定するオプションをあらかじめ指定できます。
このファイルはbinのディレクトリの中に作ればいいんですよね。
普通にテキストファイルじゃダメっすか?
0205デフォルトの名無しさん
NGNG0206デフォルトの名無しさん
NGNG以前にc言語をダウンロードした時にもpathを通すために
path=%path%;c:\progra~1\networ~1\mcafee~1c:\lsic86\binのパスや
ジャバのパス
path=c:\windows;c:windows\command;c:\j2sdk_nb\bin
などをms-dosに書き込んであるのですがそれが影響を及ぼしたりしますかね?
0207デフォルトの名無しさん
NGNG0208デフォルトの名無しさん
NGNGC言語環境で貴様の使っている、リストとかハッシュテーブルとかのライブラリを教えてくれ。
やっぱ、俺様ライブラリなん?
0209デフォルトの名無しさん
NGNG0210デフォルトの名無しさん
NGNGそれのどこがCなんだよ
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNGそれのどこがCなんだよ
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGCがない。だからなんだ。
0215デフォルトの名無しさん
NGNGBCC32.CFG.txtだったら殴るぞ。
0216デフォルトの名無しさん
NGNGなんか和んだ・・・
0217デフォルトの名無しさん
NGNG0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNGlist<CHoge*>::iterator p;
って、どういう意味なの?
0221デフォルトの名無しさん
NGNGlist<CHoge*>型のhogeを定義。
list<CHoge*>::iterator型のpを定義。
0222デフォルトの名無しさん
NGNGCHoge*って、ポインタを使ってるけど、なにか意味あるの?
0223デフォルトの名無しさん
NGNG色々有るんじゃない?
0224デフォルトの名無しさん
NGNGC言語でグローバルな定数を書く場合、ヘッダファイルに#defineや
enumで定義するのが普通かと思います。
これと同じことをconstを使ってやりたいのですが、単純に#defineのように
書くとリンクエラーになります。
こういった場合、どのようにするのが定石でしょうか?
お願いします。
0225224
NGNGもうちょっと調べてから書き込むべきでした。
お騒がせしてすいません。(でもまだ誰もみてないよな・・・)
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNGポリモフィズムを実現するため。
関数オーバーロードでは出来ない。
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNGレスとしては不適切だが、角度とか。
0230デフォルトの名無しさん
NGNGその通りにほとんど全メンバ関数につけている。
0231デフォルトの名無しさん
NGNG少なくともprivateメンバにはvirtualは要らない。
0232デフォルトの名無しさん
NGNG俺、わりとfriend classとコンボでprivate virtual使うなぁ。
こいつの為のインターフェイスですよ。って明示的な感じだし。
0233デフォルトの名無しさん
NGNG理由が
>virtual 宣言した時と比べて 4 byte 節約・・・
かよ。virtualで宣言しているメリットと比較するとあまりに弱いな。
組み込み型でメモリとぼしいなら最初からC使っとけって気もするし。
なんだかねぇ。
0234デフォルトの名無しさん
NGNGあくまで一例だろ。
non virtualの利点が思いつかないなら、C++なんぞやらずにJavaつかっとけ。
0235デフォルトの名無しさん
NGNGちょっと読んでみたけど
> virtual キーワードがあるのは、このようにコストを減らせるようにするためです。
> int 型のデータメンバを1つしかもたないようなクラスでは、virtual にした場合、virtual
> にしないのと比べてコストが2倍になります。これはかなり大きな違いです。
アホかと思った。これ読んだ時点でその後読む気なくすなぁ・・
0236デフォルトの名無しさん
NGNGなんにも考えないですべてバーチャルにしとけばいいじゃん
0237デフォルトの名無しさん
NGNG0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNGぶっちゃけ Palm で開発してたときはそうしたけど
さすがに人に勧めるようなことは言いたくない
0240デフォルトの名無しさん
NGNG自作するにはどうすればいんですか?
0241デフォルトの名無しさん
NGNG対応するプラットフォームについて熟知すべし
0242デフォルトの名無しさん
NGNGchar *operator<<(bookmark obj1){
return obj1.title;
}
呼び出し時に cout << obj; (上のクラスオブジェクト)
という風に使います。
警告:関数の戻り値が自動変数のポインタ/参照となっています。
(return obj1.title;)
エラー:不当なオペランドです。
(cout << obj;)
って、出ます。お教えお願いします。
0243デフォルトの名無しさん
NGNGreturn os << obj1.title;
}
じゃないのか
0244デフォルトの名無しさん
NGNGreturn os << obj1.title;
}
0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG勘違いしてました。stdクラスではない方のクラス内で定義しよう
としてた。おかげで、思うように動きました。
ありがとうございました。
メンバtitleはプライベートなので
そのままでは使えないのでメソッドでchar*を返すようにして
使ったんですけど、なんか回りくどいような気がするんですが、
どうなんでしょう。
これしか方法無いなら、無視して下さい。m(_ _)m
0247デフォルトの名無しさん
NGNGchar* bookmark::get_title(){return this->title;}
std::ostream& operator<<(std::ostream &os, bookmark& obj1){return os << obj1.get_title();}
0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNGC++って奥が深いんですね。(泣)
ていうか、全然分かって無い事が発覚。一からやります。
レスありがとう。
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG自称友達ほど性質の悪いものはないよな。
0252デフォルトの名無しさん
NGNGメンバ関数という形をとっていないだけで、クラスbookmarkのインターフェースの一部なのだから、
privateなメンバにアクセスできても不自然ではない。
>>251
自分が相手をfriendと認めるだけであって、自称友達という表現は当てはまらない。
0253デフォルトの名無しさん
NGNG0254デフォルトの名無しさん
NGNGそりゃそうなんだけどさ。ただ全体的にfriendはできるだけ
増やしたくないよな、ヒッキーみたいなこと言ってるけど。
0255デフォルトの名無しさん
NGNGオペレータはfriend関数で書くというのは一種の定石のひとつだし。
0256デフォルトの名無しさん
NGNG俺はひょっとしておかしいのか?
0257デフォルトの名無しさん
NGNG自称友達だからfriendと認めるわけだから、当てはまらないわけではない。
0258デフォルトの名無しさん
NGNG二項演算子を作るときは使わないとしょうがない。
0259デフォルトの名無しさん
NGNGあにいってんだおめ?
0260デフォルトの名無しさん
NGNG+= で + 作ったりできるから、それでも必要になる場面は少ない。
0261デフォルトの名無しさん
NGNG{
public:
Hoge& operator+=(const Hoge&);
Hoge(const Hoge&);
};
inline Hoge operator+(const Hoge& h1, const Hoge& h2)
{
return Hoge(h1) += h2;
}
0262デフォルトの名無しさん
NGNG他の型を引数に取らない
対称性を失ってもよい
のどちらかになると思うんだが。
complex a = 1;
a = 2 + a;
string s = "abc"
s = "123" + s;
0263デフォルトの名無しさん
NGNGごめん、寝ぼけてた。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNGclass CHoge{};
class CBar {
CHoge hoge;
};
のことで、いいんだよね?
0266デフォルトの名無しさん
NGNG{
public:
hoge& operator +=( const hoge& );
hoge operator +( const hoge& r ) const
{ return hoge(*this) += r; }
};
とか書いてたけど、ひょっとしてだめ?
0267デフォルトの名無しさん
NGNG#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
char** p = (char**)new char[10][10];
p[0][0] = 1;
return 0;
}
なんでp[0][0] = 1;のところで落ちるんですか?
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGchar (*p)[10] = new char[10][10];
p[0][0] = 1;
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNGstd::vector
0273271
NGNGでも、それを使うと実行ファイルが大きくなるっていう弊害が…
別に方法はないんですか…?そうですか…
0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNG環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。
0276デフォルトの名無しさん
NGNGすげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
0277デフォルトの名無しさん
NGNGObject *p=::operator new(sizeof(Object)*N);
for(int i=0; i<N; ++i){
new(&p[i]) Object(好きな引数);
}
0278デフォルトの名無しさん
NGNGuninitialized_fill使えよ
0279デフォルトの名無しさん
NGNG0280デフォルトの名無しさん
NGNG_| ̄|●
>>277
試してみたんですけど、二つエラーが出ます。理解が浅くて申し訳ないですけど、どこがいけないのででしょうか?
処理系はBCCです。
#include <iostream>
class test{
int a;
public:
test(int n){ a = n;}
int get_a(){ return a;}
};
int main()
{
const int N = 10;
test *p=::operator new (sizeof(test)*N); ←void *型はtest *型に変換できない
for(int i=0; i<N; ++i){
new (&p[i]) test(8);
}
for(int i=0; i<N; ++i){
cout << p[i] << "\n"; ←<< 演算子が使われたがクラス ostreamではtest型のための定義が存在しない
}
return 0;
}
>>277
uninitialized_fillを使うとどうなるんですか?よければ教えて貰えるとありがたいです
279さんが言うように違う値で初期化したい場合、方法ってあるんですか?
質問が多くてごめんなさい
0281デフォルトの名無しさん
NGNGコードの下のほう
for(int i=0; i<N; ++i){
cout << p[i].get_a() << "\n";
}
の間違いでした。これでエラーは一つ消えました。
0282デフォルトの名無しさん
NGNG>void *型はtest *型に変換できない
キャストしろ
0283デフォルトの名無しさん
NGNG0284271
NGNG0285デフォルトの名無しさん
NGNG#include <memory>
class test {
int a;
public:
test(int n) : a(n) {}
int get_a() const { return a; }
};
main()
{
const int N = 10;
test* p = static_cast<test*>(::operator new(sizeof(test)*N));
std::uninitialized_fill_n(p, N, 8);
for (int i=0; i<N; ++i) {
std::cout << p[i].get_a() << std::endl;
}
for (int i=0; i<N; ++i) {
p[i].~test();
}
::operator delete(p);
}
>>280
こうなる
0287デフォルトの名無しさん
NGNGplacement new(これ>new (&p[i]) test(8);)使うと
デストラクタは自分で呼ばないといけないから、注意
0289デフォルトの名無しさん
NGNGもし std::string の operator+ がメンバ関数で定義されていたら、
○ std::string("xxx") + "yyy"
× "xxx" + std::string("yyy")
というような非対称性が生じる。
型変換用のコンストラクタがなければ実害はないかもしれない。
0290デフォルトの名無しさん
NGNG> 279さんが言うように違う値で初期化したい場合、方法ってあるんですか?
uninitialized_fill() のかわりに uninitialized_copy() を使う。
引数は単純な配列でいいだろう。
しかし、 std::vector 使っとけ。
0291ディフォルトの名無しさん
NGNG構成で作成しようと思っています。
メインのダイアログで、1つはcreateでもう1つはDoModalで2枚のフォームを
描画させているのですが、そうするとタスクバーのアイコンが2つ表示されて
しまいます。
なんとかして1つのみの表示にすることはできないでしょうか?
0292デフォルトの名無しさん
NGNGnewを使えばクラスのコンストラクタが自動的に呼ばれるんですが、
mallocでメモリを確保してコンストラクタを呼ぶということは出来ないんでしょうか。
0293デフォルトの名無しさん
NGNG配置new
0294デフォルトの名無しさん
NGNG配置newってなんでしょうか?
0295デフォルトの名無しさん
NGNG検索しやがれ
0296デフォルトの名無しさん
NGNG0297デフォルトの名無しさん
NGNG0298デフォルトの名無しさん
NGNG使える
>>294
http://www.fides.dti.ne.jp/~oka-t/cpplab-placement-new.html
0299デフォルトの名無しさん
NGNG写真をとるときの掛け声
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNG0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNG女はいたのかよ……。
0304デフォルトの名無しさん
NGNG0305デフォルトの名無しさん
NGNGCは数値計算とかくらいしかやったことないんだけど、簡単な反復マクロを書きたいんだけど、
sendkey
sleep
の使い方を教えて下さい。
0306デフォルトの名無しさん
NGNG>sleep
Cの話と違うし
0307デフォルトの名無しさん
NGNGそのメッセージがわかんないのですよ。
enterを送るときとか nを送るときにどうしたらいいかってことが。
0308デフォルトの名無しさん
NGNGまずOSは何?
0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
NGNG0312デフォルトの名無しさん
NGNGnを押す
0.2秒
nを離す
ってのはCではどう書けばいいのかってことですたい。
0313デフォルトの名無しさん
NGNGパチスロにでも利用するんですか?
0314デフォルトの名無しさん
NGNGkeybd_event(N, 0, 0, 0);
Sleep(200);
keybd_event(N, 0, KEYEVENTF_KEYUP, 0);
0315デフォルトの名無しさん
NGNG暇つぶしです。
できれば数値計算の結果をテキストにためて行くような形にしようかと思ってます。
パチスロ何かにも応用できるんですかね?
0316デフォルトの名無しさん
NGNGありがとうです。
sendkeyってのは言い方を思いつかなかったので使いました。
0317ディフォルトの名無しさん
NGNG構成で作成しようと思っています。
メインのダイアログで、1つはcreateでもう1つはDoModalで2枚のフォームを
描画させています。
モードレス側のダイアログを
ModifyStyleEx(WS_EX_APPWINDOW, 0);
にて、アイコンを消すことが出来たのですが、ダイアログが背面に移動した
際、もう片方のダイアログを前面に持ってきた際に移動することが出来ず、
背面に残ったままになってしまいます、
現在表示されている1つのアイコンで2つのダイアログの表示位置を平行に
(同じ階層)に表示することは出来ないでしょうか?
0318デフォルトの名無しさん
NGNGお前定義の適当な単語出して教えてください、って頭腐ってるな。
0319デフォルトの名無しさん
NGNGこんなとこで叩いてるお前が腐ってる
確かにちょっとアホっぽいけど、ニュアンス的にわからんでもないし、初心者歓迎スレで初心者叩くな
0320デフォルトの名無しさん
NGNG1!+2!+3!+・・・+n!和が7777より小さい場合における最大のnと、
その時の和を求めるプログラムをfor文を用いて作成せよ。
という問題なのですが、とりあえず
int wa=0;
for(int n=1;wa<7777;n++){
int m=1;
for(int i=n;i>=1;i--){
m=m*i;
}
cout << "階乗は" << m << "\n";
wa=wa+m;
cout << "和は" << wa << "\n";
}
cout << "最大のnは" << n-1 << "\n";
cout << "その時の和は" << wa-m << "\n";
と記述して実行しようとしたら「cout << "その時の和は" << wa-m << "\n";」の部分で
「mが未定義です」とエラーが表示されてしまいました。for文内で定義した関数は
for文外では使用できないのでしょうか?
また、その部分を無視して実行した時、なぜか最大のnの値が9と表示されてしまいます。。
試しにfor文内にcout文を入れて実行してみたら正しくnの値は8と表示されるのですが。。
なぜこの違いが発生するのでしょうか・・・。
長くなりましたがどなたか教えてください。。
0321デフォルトの名無しさん
NGNGこんタコが、初心者と雑草は叩かれて踏まれて強くなんだよ
0322デフォルトの名無しさん
NGNG変数は宣言したブロックの中だけで有効。
つまりこの場合外側のforの中だけ。
それとint m=1はforのループのたびに実行される。
0323デフォルトの名無しさん
NGNG>for文内で定義した関数は
変数だろ。
>for文外では使用できないのでしょうか?
出来ない。
>なぜか最大のnの値が9と表示されてしまいます。。
>for(int n=1;wa<7777;n++){
このfor文を出る前にn++されるから。
0324デフォルトの名無しさん
NGNGありがとうございます。
勉強になりました。
0325デフォルトの名無しさん
NGNG(n-1)になってるからいいんじゃないの?
cout << "その時の和は" << wa-m << "\n";
なんでmを引くの?
0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNGTPOも無視してただただ踏んで回るしか能の無い「自称回答者」は
臭いから来なくていいです ;-)
0328デフォルトの名無しさん
NGNGお前も十分臭いよ 腐臭をあちこちのスレに撒き散らすなボケ ;-)
0329デフォルトの名無しさん
NGNG意味不明ですね。
「あちこちのスレ」など関係無く、このスレの話なわけです。
致命的な点を指摘されて悔しいのはわかりましたが、それならなおのこと
ちゃんとした理屈をこさえてから書き込まなくてはいけないと思いますよ。
馬鹿にしか見えませんから ;-)
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNG0332デフォルトの名無しさん
NGNG0333デフォルトの名無しさん
NGNG例えばコピーコンストラクタで
template<class T> class A
{
public:
A(const A&) {}
// A(const A<T>&) {}
};
この2つは等価なのでしょうか?
試したところ同じようですが、何か違いがあったりするんでしょうか?
0334デフォルトの名無しさん
NGNGサイズが増える
0336デフォルトの名無しさん
NGNG(ソースコードの)サイズが増える
と言いたかったのではないであろうか?
0337デフォルトの名無しさん
NGNG同じ。
クラステンプレートの名前と同じ名前を、名前空間の修辞をつけず、後ろに "<" を続けなければ、
A<T>のようなテンプレート引数リストをつけた型名と同じになる。
0339デフォルトの名無しさん
NGNG”#include <curses.h>”という記述を含むものをコンパイルしようとすると、
”インクルードファイル 'curses.h' をオープンできない”と表示されます。
ライブラリにcurses.hが存在しないみたいなんですが、どういった対処法がありますか?
0340デフォルトの名無しさん
NGNGcurses.hの入ったライブラリをインストールするとか.
0341デフォルトの名無しさん
NGNGLSI-Cを捨てる。
冗談は兎も角、16ビットコンパイラでしかないLSI-Cから安定して使える
cursesライブラリを探すくらいなら32ビットコンパイラに移行した方がいい。
例えばcygwinなら環境ごと丸々揃えられるだろ。
0342デフォルトの名無しさん
NGNGどうしてでしょうか。
【状況】
コンパイルは通るが、できた実行ファイルを実行すると、
ウィンドウも表示されぬままに強制終了してしまう。
サンプルのコピペも試してみたけれど、同様の状況。
【参考にしたサンプル】
猫でもわかるのステータスバーの項1
【環境】
WindowsXP
BCC5.5
0343342
NGNG今度はCreateWindowExでやってみました。
これもまた上手くいきませんでした。
なぜでしょうか?
【状況】
コンパイルは通る。
できた実行ファイルを実行すると、ウィンドウは表示されるが
ツールバーは下地(?)だけしか表示されない。
そこをクリックしても反応がなく、
ダブルクリックすると見たことのないダイアログがほんの一瞬表示されて消える。
【参考にしたサンプル】
猫でもわかるのステータスバーの項3
【環境】
WindowsXP
BCC5.5
0344デフォルトの名無しさん
NGNGこういうクラスを作ってみました。
Tokenize()が返す値は0から始まったほうがいいですか?
1から始まったほうがいいですか?
つまらないことですが、昨日からずっと悩んでます。
よろしくお願いします。
0345デフォルトの名無しさん
NGNG0から始まった方(0オフセット)がCでは美しいし,普通でしょうね.
あと,テンプレートのTはきっとcharに限らないのだろうから
int Tokenize(T* buf, const T &code, int limit)
の方が良いのでは?
0346デフォルトの名無しさん
NGNGなるほど。
オブジェクトのコピーが負荷になる場合を考えてって理解でいいですか?
どうもありがとうございます。
考えすぎて眠れませんでした。
0347345
NGNGこんな感じでいいんじゃないでしょうか?
bufも中は触らないのでconst付けました.
template <class T>
int Tokenize(const T* buf, const T &code, int limit) {
for (int iCurPos (0); iCurPos < limit; ++ iCurPos)
if(buf [iCurPos] == code) return iCurPos;
return -1;
};
0348デフォルトの名無しさん
NGNGどうもありがとうございます。
0349342
NGNG今日は丸一日使ったが分からない。
分かったことと言えば…
【分かったこと】
※CreateToolbarExを使った場合。
リソースファイルをリンク(?)しない状態ではツールバーが表示される(画像なし・ボタンだけ)動作は正常。
リソースファイルをリンク(?)すると、起動した瞬間にウィンドウも開かず強制終了する。
誰か分かる方よろしくお願い致します。
0350デフォルトの名無しさん
NGNGソースも上げないでその字面だけで判断するのは不可能だ
猫はビュー数を見れば分かるとおり、多数の人が利用しているわけで
起動しないほどの重大なバグがある可能性はきわめて低い
猫の所為にしないで自分に原因があると考えるのが自然だ。
で、どうしても写し間違いが無いと言い張るのなら
一つ一つのAPIの戻り値をチェックしてエラーが出ている個所を突き止めろ。
0351342
NGNGありがとうございます。
APIの戻り値チェックというのをやってみます。
/*
写し間違いはないと思います。
最初は全部手で打ち込んでいたのですが、
この不具合の原因に見当が付かないのでコピペでも試してみました。
結果は同じでした。
*/
0352デフォルトの名無しさん
NGNGファイルから、一行の文字列を読み込んでbuf[1024]の配列に、
a bc d efg\n\0
が入っているとすると、そのスペースを区切りにして、
新たなa[32][128]の配列に、
a[0]→a\0
a[1]→bc\0
a[2]→d\0
a[3]→efg\0
と入れたいのですが、どうしたらできますか?
0353352
NGNGはC言語です。
0354デフォルトの名無しさん
NGNGchar (*p)[128]=a;
while (p) {
strncpy(a++, t, 128);
t=(0," \n");
}
0355デフォルトの名無しさん
NGNGstrncpy(p++, t, 128);
t=(0," \n");
}
0356352
NGNGstrtokや、strncpyを調べてみます。
0357352
NGNG0358デフォルトの名無しさん
NGNGvoid CMyDlg::OnBnClickedSerch()
{
MessageBox("やぁ");
}
こうかくとMFCのMessageBox関数が呼ばれるのですが、
APIのMessageBox関数を呼ぶにはどうすればいいのですか?
0359デフォルトの名無しさん
NGNG0360342
NGNGさらにツールバーのサンプルを探してみたのですが、
BMP画像に問題があるようです。
【状況】
サンプルのツールバーのBMP画像を、
自作したもの(大きさ・数は同じ)に差し替えただけで、
ウィンドウも開かずに強制終了する。
>>342と同じ状況。
サンプルと同じ色数、それ以下の色数でも試したが結果は同じ。
CPP、Hファイルを全く変更せずに試したので、写し間違い等のミスは皆無です。
付属していた画像をそのまま使った場合は期待通りの結果が得られる。
ツールバー用のBMP画像を作るに当たって何らかの決まりがあるのかと思って検索してみましたが、
その事について特に言及してあるサイトは見つかりませんでした。
原因が分かる方よろしくお願いします。
【参考にしたサンプル】
ttp://www.geocities.jp/kissy2005jp/documents/win32api-sample.html
の『ツールバーを作る』のサンプルソース。
【環境】
WindowsXP
BCC5.5
Pixia(ツールバーのBMP画像を作るのに使用したペイントソフト)
0361デフォルトの名無しさん
NGNGもしくはエラーが帰ってきたときのエラーコードくらい書けよ
具体的なことは何一つ言ってないじゃないか。
0362342
NGNGBMPは普通のBMPです。
エラーは帰ってこずに強制終了します。
0363デフォルトの名無しさん
NGNGヘッダの形式は?色数は?RLEかかってる?
トップダウンとボトムアップどっち?
0365デフォルトの名無しさん
NGNG以下のコードが実行できます。
int main()
{
int sum=0;
for(int i=0;i<5;i++)
sum += i;
sum=0;
for(int i=0;i<5;i++)
sum += i*i;
}
これはint iを2回宣言していることにならないのでしょうか?
環境はVC++.NETです
0366デフォルトの名無しさん
NGNG標準だと思いこんで使ってきてしまった人もいるのですね。
0367デフォルトの名無しさん
NGNGエラーはページ違反とかのダイアログの話ではなく、APIの戻り値を見るんだよ。
調査して説明しろといっても無理な相談だろうから、
どこかへのリンクではなく、実際に使っているソース一式と
正常な結果を得られるbmp、異常終了するbmpをまとめてあぷろだにあげとけ
0368デフォルトの名無しさん
NGNG0369デフォルトの名無しさん
NGNGオプションでエラー吐かせる事もできる
0370デフォルトの名無しさん
NGNGC#からは変数のスコープが変更になり、
for(int i=0;;)
ではiはfor内でのみ有効になったはずです。
でもC++はiはforの外でも有効だったはずです。
0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNG味噌汁で顔を洗ってこいや
0373デフォルトの名無しさん
NGNGあのな・・・・実行できることじゃなくてコンパイルできることに疑問を持てよ。
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNGだからコンパイルできることがおかしいと言っています!!!
しかも実行もできます。
仕様が変更になったはずはないので、、、
>オプションでエラー吐かせる事もできる
これはどうすればいいのでしょうか?
>>369
、
0376デフォルトの名無しさん
NGNG昔のVC++はおかしな糞コンパイラだった。
以上。
0377デフォルトの名無しさん
NGNG{
for(int i;;)
}
とすればiのスコープはfor内だけですが、、
0378デフォルトの名無しさん
NGNG{
int sum=0;
for(int i=0;i<5;i++)
sum += i;
sum=0;
for(int i=0;i<5;i++)
sum += i*i;
}
forの外でi使ってるようには見えないが。
0379デフォルトの名無しさん
NGNG今のC++の仕様が策定される前のコンパイラを責めるなよ。
0380デフォルトの名無しさん
NGNGという問題の答えを教えていただきたいです。
0381デフォルトの名無しさん
NGNG0382デフォルトの名無しさん
NGNG以前は、
for(int i=0;i<10;i++){
sum += i;
if(i>3) break;
}
for(int j=i;j<10;j++)
sum += j*j;
といった高度な書き方ができたはずです!!
少なくともVC6.0では
0383デフォルトの名無しさん
NGNG安心しろ。あなたが高度じゃないだけだから。
0384デフォルトの名無しさん
NGNGfor(i=0;i<10;i++){
にすればいいだけだろ。アホか。
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNGまあ、仕様の不完全なC++ではなく、C#を使うのでまったく問題ありませんが、、、
0387デフォルトの名無しさん
NGNGfor(i=0;i<10;i++){
0388デフォルトの名無しさん
NGNG何を指して不完全と言っているんだ?
0389デフォルトの名無しさん
NGNG0390デフォルトの名無しさん
NGNG}
for(int i=0;;){
}
がコンパイルできたり、できなかったりするところが不完全ですが何か?
ちなみにVS.NET Proを使ってますが何か?
0391デフォルトの名無しさん
NGNG馬鹿だろ。お前。
0392デフォルトの名無しさん
NGNGそれは、「不完全なコンパイラが存在する」と言っているだけ。
0393デフォルトの名無しさん
NGNG┌─────────┐
│ 基地外警報!!! |
│ 基地外警報!! |
└―――──――――┘
ヽ(´ー`)ノ
( へ)
く
0394デフォルトの名無しさん
NGNGコンパイルできたり、できなかったりするのは天候の所為ですよ。
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG須らくデウスの行いだと?
>>390
君は丁度、C++の変遷を目の当たりにできる僥倖に遭遇できたのだよ。
0397デフォルトの名無しさん
NGNGぉぉ、できました。どもありがとうです。
あともうひとつ、
int len;
char A[100] = "abcde";
len = strlen(A);
こうすると"size_tをintに変換しました。"という警告がでます。
警告が出ないようにするにはどうすればいいんですか?
0398デフォルトの名無しさん
NGNGsize_t len;
char A[100] = "abcde";
len = strlen(A);
0399デフォルトの名無しさん
NGNG0400342
NGNG強制終了しないようになりました!!!!!
BMP画像を調べてみたところ、
サンプルに付いていたBMPはビットの深さが4bitだったのに対し、
自分で用意したBMPはビットの深さが24bitだったので、
自分の用意したBMPのビットの深さを4bitにしたところ強制終了しなくなりました。
しかし今度は、ツールバーに表示されている画像の色がおかしくなっています。
・元の画像→ttp://ccfa.info/cgi-bin/up/src/up4614.bmp
・表示されたときの様子→ttp://ccfa.info/cgi-bin/up/src/up4612.jpg
>>367
ソース一式はアップしたんですけれど、
転載禁止と書いてあって、そのソースを全くと言っていいほど改変していないので、
アップしていなんです。
0401デフォルトの名無しさん
NGNG0403デフォルトの名無しさん
NGNGループから抜けるようにしたいのですが、どうやったら可能でしょうか?
gcc-cygwin環境です、よろしくお願いします。
>#include <stdio.h>
>int main()
>{
> int c;
> c = getchar();
> while(c == EOF){
> function1();
> c = getchar();
> }
> function2();
> return 0;
>}
0404デフォルトの名無しさん
NGNGcursesライブラリ。
0405デフォルトの名無しさん
NGNG0406デフォルトの名無しさん
NGNGselect
0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNGなに?
0409デフォルトの名無しさん
NGNG今使えるのがprintf、scanf、while、for、switch、ファイルの入出力くらいなんですけど
0410デフォルトの名無しさん
NGNG0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGありますよ?
0413403
NGNGncurses-5.4をインストールしまして、
#include <ncurses.h>を加えて
gcc には -lncursesオプションを渡しましたが
undefined reference to `_kbhit' と怒られました。
行き詰まりましたのでまた後で挑戦します...
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNG文字列に改行を入れたい場合どうすればいいんでしょうか。
string str("abcd");
str=str+'\n'+"ABCD";
SetWindowText(GetDlgItem(hDlg,IDC_EDIT),str.c_str());
という感じで標準コントロールのエディットボックスに
文字を表示させてみてるんですが「abcdABCD」となり改行してくれません。
どなたか教えてください。お願いします。
0416デフォルトの名無しさん
NGNG'\n' → "\r\n"
0417415
NGNG0418デフォルトの名無しさん
NGNG現状より短くしたい(後ろを切り捨てたい)んだけど、
なんかいい方法ある?
0419デフォルトの名無しさん
NGNGUNIXならtruncateとかftruncateがあるな。
0420デフォルトの名無しさん
NGNG'\n' == 0x0A
っていう理解でよろしいでしょうか?
0421デフォルトの名無しさん
NGNGNo
0422デフォルトの名無しさん
NGNGすべからく=すべきの意ですよ
0423デフォルトの名無しさん
NGNGそれだとfstreamで開いてるファイル
いったん閉じた方がよさげだよね
くっ、やはりそういう環境依存な方法しかないのか
0424デフォルトの名無しさん
NGNG小さいファイルなら内容を全部覚えておいて、
新たにファイル作成するって方法もある。
でも、そんなことするぐらいなら環境依存な
方法を使った方がいい罠。
0425デフォルトの名無しさん
NGNGいろいろ弄りながら試行錯誤でバグ潰ししてたんですが、
なにをやってしまったのか急にリンクエラーが出ました。
error LNK2001: 外部シンボル 〜 は未解決です
fatal error LNK1120: 外部参照 1 が未解決です。
みたいな感じです。
Libのリンク設定忘れみたいな環境的なこと意外で
こういうエラーって出るもんですか?
0426デフォルトの名無しさん
NGNG0427デフォルトの名無しさん
NGNGグローバル変数、関数の定義し忘れ。
0428425
NGNGお恥ずかしい。
なんかライブラリのファイル壊れたかなぁとか思って
再インスコしそうなところでした。助かりました。
ありがとうございました。
0429デフォルトの名無しさん
NGNGまず自分を疑うのが鉄則
0430409
NGNG次は何を作るのが良いですか?
0431デフォルトの名無しさん
NGNG目標。
0432デフォルトの名無しさん
NGNG0433教えてください
NGNGコマンドプロンプト上で動くテトリス、
つくってみますたが
0434403 Forbidden
NGNGMinGWでは可能なのですが、Cygwinではconio.h(のkbhit)が使えなかったようです。
ずいぶん長いこと混乱していましたが、ncurses.hのgetch()を使ってようやく解決しました。
select()は難しそうなので結局断念しました。
どうもありがとうございます。
0435デフォルトの名無しさん
NGNGC言語編の第1部の26章でつまづきました。
エスケープシーケンスで、色を変えるプログラムが出てくるのですが、
エスケープシーケンスが普通に文字列として解釈されてしまいます。
これは、なぜなのでしょうか。
0436デフォルトの名無しさん
NGNG0437435
NGNGそうなのですか。
NT系だとなぜ使えないのでしょうか?
0438デフォルトの名無しさん
NGNG16bitコンパイラとansi.sys組み込み。
0439デフォルトの名無しさん
NGNG0440435
NGNG簡単に実現する方法としては、cygwinでエミュレートするということですね。
どちらかの方法で実現してみます。
ありがとうございました。
0441デフォルトの名無しさん
NGNG構造体にstringは駄目で塚?
0442デフォルトの名無しさん
NGNG一般にオブジェクトの内部に直接触れるべきではない。コンストラクタを使って適切
に初期化する必要がある。
メンバ変数をprivateとして宣言するのは何のためか考えてみるといい。
0443デフォルトの名無しさん
NGNG何か斜め上行ってますね。
0444マイク ◆yrBrqfF1Ew
NGNGそういえばvtbl overwriteというsecurity-holeがあった気がするな。
0445デフォルトの名無しさん
NGNGヘッダにクラスの実装を直接書くこともできるのはわかるんですが、これは分けて書く場合と比べてどのように違うのでしょうか。
0446デフォルトの名無しさん
NGNG中間ファイルとかLib作るのにヘッダにガリガリ書かないな
0447デフォルトの名無しさん
NGNG0448デフォルトの名無しさん
NGNG0449デフォルトの名無しさん
NGNGありがとうございます。
>>448
ありがとうございます。
実はその点についても聞こうとしていたのですが、テンプレートクラスはヘッダとcppに分けたとき、外部参照が未解決のようなエラーが出て、
ヘッダにまとめて書いたら正しく動作した覚えがあります。
このことからテンプレートクラスの場合はヘッダにまとめて書くのが一般的なのかと思ったのですがどうなんでしょうか。
0450デフォルトの名無しさん
NGNGヘッダに書かれているDECLAREってなんですか?
例えば
DECLARE( int A, ;);
って感じで書かれてます。
どういうときに、どんな意味で使うものなんでしょうか?
0451デフォルトの名無しさん
NGNGヘッダすべてをDECLAREで検索してみ
0453デフォルトの名無しさん
NGNGどっかで DECLARE が定義されてるはずだからそれを探せ、
という意味だと思う
#define DECLARE(...) ....
みたいなのがどっかにあるはず(インクルードファイルも遡って探してね)
0454450
NGNGなんかグローバル変数の宣言用にdefineしてあったみたいですが、
何の意味があるのか訳わかんないです。
気持ち悪いですがしばらく放っておくことにします。。。
ありがとうございました。
0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNGおもしろい!!
0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG言語はC++です。
int型の数値をchar型の文字列に変換したいときは
どのような関数を作ればよいですか?
同じように、
double→char
など。
初心者の質問で申し訳ないですが
宜しくお願いします。
0459デフォルトの名無しさん
NGNGsprintf()
0460デフォルトの名無しさん
NGNG0461デフォルトの名無しさん
NGNGitof()
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNG0465イワナ
NGNG0466デフォルトの名無しさん
NGNGもしかして、スレのテンプレ入りを狙ってるのか?
0467デフォルトの名無しさん
NGNG{
public:
void Func(){}
} aa;
struct B
{
int b;
} bb;
float cc() { return 1.0f; }
// アドレステーブル
void *Adr[] = {
(void*)&aa,
(void*)&bb.b,
(void*)&cc,
};
というような、なんでもありの配列 Adr の初期値に、
aa.Func() のアドレスを入れたいのですが、うまくいきません。
// アドレステーブル
void *Adr[] = {
(void*)&aa.Func, // error
(void*)&bb.b,
(void*)&cc,
};
とすると、void を void* にキャストできないとエラーが出ます。
どのようにすればよいのか、アドバイスをお願いします。
0468デフォルトの名無しさん
NGNGじゃない?
0469デフォルトの名無しさん
NGNG0470デフォルトの名無しさん
NGNG0471デフォルトの名無しさん
NGNGaaってインスタンスなのでは?
0472デフォルトの名無しさん
NGNGC++ では「メンバ関数のポインタ」は取れても、特定インスタンスに
結び付けられたメンバ関数ポインタ(いわゆるクロージャ)は取れん。
やりたければ boost::function と boost::bind 使え。
あとメンバ関数ポインタのサイズは一般に sizeof(void*) よりでかい
から、そのキャストは規格上許可されてない。
0473467
NGNGこのやり方では無理なのですね…。
”静的なインスタンスのメンバ関数”の「先頭アドレス」を
コンパイルの時点で知ることができれば、
どのようなやり方でも構わないんですが、
何か良い方法はないでしょうか…。
0474デフォルトの名無しさん
NGNGなんか勘違いしてないか?
メンバ関数はインスタンスごとに生成されるわけじゃなく、
共通の関数にインスタンスの参照が渡される。
特定のインスタンスの特定のメンバ関数を呼びたいなら、
インスタンスの参照とメンバ関数のアドレス(メンバ関数ポインタ)の両方が必要。
これをまとめて使いやすくしたのがboost::functionやboost::bind
0475デフォルトの名無しさん
NGNG468
0476デフォルトの名無しさん
NGNG0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNGvoid*型のポインタだけがあってもどうしようもないと思う。具体的にどういう使い
方をするのか判らないので憶測でしかないけどね。
ということで、boost::function辺りを使うのが吉かと。
0480デフォルトの名無しさん
NGNGwhile(!fin.eof()){
fin >> str1;
tp = strtok(str1,"<>");//<>で区切った文字列
cout << tp;
while(tp != NULL){
tp = strtok(NULL,"<>");
if(tp != NULL){
cout << tp;
}
}
}
と書いたら実行はされるが、Windowsエラーが出てしまう。
while(!fin.eof()){
fin >> str1;
cout << str1;
}
だと出ない。なんで?
0481デフォルトの名無しさん
NGNGif(tp != NULL){
cout << tp;
0482デフォルトの名無しさん
NGNG#define __HOGE_H__
って、書くのが面倒なんだけど、ほかに方法ない?
VC2003つかってます。
0483デフォルトの名無しさん
NGNG二連アンスコやめとけ。
アンスコはじまりやめとけ。
#pragma once 使え。
0484デフォルトの名無しさん
NGNG0485デフォルトの名無しさん
NGNG0486デフォルトの名無しさん
NGNGって、MS限定?
0487デフォルトの名無しさん
NGNGそんなことないけど対応してるものは少ない
0488デフォルトの名無しさん
NGNG取り込み、表示させる方法を知っている人いません?
OpenCVやARToolKit等のライブラリを使わないで
1からCでプログラミングするのって難しいのでしょうか??
0489デフォルトの名無しさん
NGNG0490デフォルトの名無しさん
NGNG君がやりたければやればいい。
難しいと思うのならやめとけ。
0491デフォルトの名無しさん
NGNGclass Moto{
public:
virtual int kaso();};
class Saki : public Moto{
public:
int kaso();};
int Moto::kaso(void){
cout << "継承元です" << endl;
return 0;}
int Saki::kaso(void){
cout << "オーバーライドしました" << endl;
return 0;}
とあったところ、virtual int kaso()をint kaso()に変えてみると
コンパイル時にエラーがでるか、オーバーライドされないと思ってたのですが
普通にオーバーライドされてました。オーバーライドはvirtualつけなくても出来るのでしょうか?
0492デフォルトの名無しさん
NGNGできるよ。普通に。
0493デフォルトの名無しさん
NGNGそうなんですか。そうなるとvirtualの意味って何なんでしょうか・・・
0494デフォルトの名無しさん
NGNG引数その他が違ったら別だけどね。
0495デフォルトの名無しさん
NGNG0496デフォルトの名無しさん
NGNG0497デフォルトの名無しさん
NGNG0498デフォルトの名無しさん
NGNG嘘を教えちゃいかん
0499デフォルトの名無しさん
NGNGSetLayeredWindowAttributesではできないみたいなんです(ウィンドウ全体なら可能)
0500デフォルトの名無しさん
NGNG嘘ではなかろう。言葉足らずだが
基本クラスでの宣言でvirtual宣言されてるから
派生クラスのは明示的にvirtualしなくても勝手にそうなるってだけ。
0501デフォルトの名無しさん
NGNG>>491は、その基底クラスでのvirtualを取ったんだよ。
だから、>>494は勘違いか、本気で言ってるなら…、だよ。
0503499
NGNGエディットコントロールの…
フォントのサイズ変更、
フォントの種類変更、
フォントの色変更、
背景色変更、
の仕方が分かりません。
リッチエディットまではいかなくてもWindows付属のメモ帳くらい変更したいのですが。
0504499
NGNG0505デフォルトの名無しさん
NGNG取り敢えずこっちで聞いた方が早い。
>Win32API質問箱 Build22
>ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/l50
0506デフォルトの名無しさん
NGNG0508デフォルトの名無しさん
NGNG0509デフォルトの名無しさん
NGNG以下の式を実行させると、
for(double a=-0.3; a<0.8; a+=0.1){
cout << a << endl;
}
以下のようになるのですが...
-0.3
-0.2
-0.1
2.77556e-017 <= 0にならない
0.1
0.2
(省略)
0.7
0.8 <= ここまで繰り返される
ようするに、2.775563-017を0に、
繰り返しも11回に留めたいのですが、
どうすればよろしいですか?
環境は
Windows ME
Visual C++ 6.0
です。
よろしくお願いします。
0510デフォルトの名無しさん
NGNGfor(int a=-3;a<8;a++){
cout << a/10. << endl;
}
0511509
NGNGレスありがとうございます。
その式だと、うまくいきました。
ですが、
for(double a=-0.3; a<0.8; a+=0.1){
cout << a << endl;
}
この式の何がいけないのか、よくわからないのですが
0512デフォルトの名無しさん
NGNGそれは10進数表記の0.1が2進数表記では近似値的表記になる
ことに起因するもので、つまり0.1を3回足すのと0.3を足した結果
とは同値でない可能性があるということです。よって不可能です。
もしどうしてもそうしたければ、固定小数点数を使うことをお勧め
します(自分でエミュレートすることになります)。
0513デフォルトの名無しさん
NGNG浮動小数でググってみそ
0514デフォルトの名無しさん
NGNG浮動小数点数
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNG0.1は2進数では正確に表せない。(現行の浮動小数点では)
#include <stdio.h>
void main(void){
printf("%64.62lf\n",0.1");
}
とかやってみ。
0517デフォルトの名無しさん
NGNGなぜYAHOOじゃだめなの?
0518デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNGだめとはいっとらんがな
0520デフォルトの名無しさん
NGNGなにが浮動なのか分かっていないな
0521509, 511
NGNGググってみました。よくわかりました。
ありがとうございました。
0522デフォルトの名無しさん
NGNGなぜYAHOOにしなかったの?
0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGにvirtualをつけない(仮想関数でない場合)
>ポインタ変数p がクラスX へのポインタ変数と して定義されており、p の>指す実体がクラスX から派生したクラスY のオブジ ェクトである場合、
># 普通のメンバ関数 f()
>p->f()で、X::f()が呼び出される。クラスXでf()が定義されてないな ら、X >から親の方への検索で最初に見つかるf()の定義が用いられる。
との事ですがこのプログラム http://www.med.osaka-u.ac.jp/pub/cl-comp/saito/cppintro/example3.cpp
をコンパイルして実行した結果
私は「a型」オブジェクトです。
私は「B型」オブジェクトです。
私は「C型」オブジェクトです。
私は「a型」オブジェクトです。
私は「b型」オブジェクトです。
私は「c型」オブジェクトです。
私は「a型」オブジェクトです。
私は「b型」オブジェクトです。
私は「c型」オブジェクトです。
私は秘密のアッコちゃんです。
私は人に言えない秘密を持っています。
私は人に言えない秘密を持っています
となります。ええと説明文とおりだと
私は「a型」オブジェクトです。
私は「a型」オブジェクトです。
私は「a型」オブジェクトです。
私は秘密のアッコちゃんです。
私は人に言えない秘密を持っています。
私は人に言えない秘密を持っています
となるはずだと思うんですが。。違うんでしょうか?
0525524
NGNGです。そこのページで聞けよと言われればそれまでなんですがここの方が
早いかなと。しーましぇん。。
0526デフォルトの名無しさん
NGNGpa0->speak();
pa1->speak();
pa2->speak();
ここの部分でA::speakが呼ばれるってのはOKですか?
0527524
NGNGはい。それは分かるんですがそうすると実行結果が下のほうにかいた様に
なると思うんですが。。
0528デフォルトの名無しさん
NGNGidというメンバに何が入っているか理解してますか?
0529デフォルトの名無しさん
NGNGA::speakでprintfに渡されてる引数は何ですか?
0530524
NGNGいやはずかしいです。。(;´∀`)
ありがとうございました。
0531524
NGNGすいません。ここでコンストラクタで初期値を与えられたidを
出力してるんですね(ですよね(;´∀`)?)
0532デフォルトの名無しさん
NGNG同じエンジン使ってるからね。
0533半分冗談だが、半分マジだ。
NGNG既に「ググル」と言う言葉は、「インターネット検索サイトで検索する」と言う意味の一般動詞になってる。
>>532
はぁ ?
0534デフォルトの名無しさん
NGNGC++のクラス内にWin32APIと同名の関数をつくりその同名の関数からWin32APIを呼び出すとC++のクラス内のほうを呼び出そうとするのですがどうすれば回避できますか?
0535デフォルトの名無しさん
NGNG::
0536デフォルトの名無しさん
NGNG0537534
NGNG解決できました。
ありがとうございました。
0538デフォルトの名無しさん
NGNGint answer = static_cast<int>(a) / static_cast<int>(b);
0539509, 511
NGNGstring a;
strcpy(a, "hoge");
a = "hoge"でもいいのですが、
引数にchar* を取る場合の
string型との互換の方法が知りたいので
よろしくお願いします。
0540デフォルトの名無しさん
NGNG"hoge"をstringにしてから連結したほうが手っ取り早くないか?
0541デフォルトの名無しさん
NGNGa.resize(256);
strcpy(&a[0], "hoge");
規格的にいいのかは知らん
0542デフォルトの名無しさん
NGNGa.operator=("hoge");
a.assign("hoge");
>>541
文字列の長さ256になるけど。
0543デフォルトの名無しさん
NGNGじゃあ>>541の後に
a.resize(std::string::traits_type::length(a.c_str()));
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNG> string型との互換の方法が知りたいので
ここに突っ込みがないのは何故?
意味わかるの?
0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNGCStringのGetBufferのようなもの、と解釈してみたがどうか?
0548デフォルトの名無しさん
NGNGそういう要望は多いと思うよ。
operator用意してる文字列クラスも多いことだし。
0549デフォルトの名無しさん
NGNGたぶん、GetBuffer()というよりは、operator LPCSTRみたいなことを希望してるんじゃないかな?
0550デフォルトの名無しさん
NGNGfgetsみたいに関数内で配列の中身を書き換えるもののこと?
0551デフォルトの名無しさん
NGNGあぁ、俺よく読んでなかった。
確かにどうとでも取れるね・・・
0552539
NGNG> 文脈からして、char*を引数にとる関数でchar*の部分にstringを使いたいってことじゃないかな?
すいません、そういう意味です。
0553デフォルトの名無しさん
NGNG整数なら単に割ればいい。
浮動小数点数なら割った答えにmodfを使って整数の部分を取り出す。
0554デフォルトの名無しさん
NGNGchar配列に取って=でコピー。
0555デフォルトの名無しさん
NGNGchar const* なら std::string::c_str() だが、 char* なら無理。
std::string使うことに決めたなら、おとなしく適切なメンバ関数(および演算子)使え。
0556デフォルトの名無しさん
NGNG書き換えられる場合は string の operator=()、
operator+()でまかなえることがほとんどだと思うんだがなあ。
0557556
NGNG0558デフォルトの名無しさん
NGNGstd::string に直接書き込むことはできない。一般に std::string は同一の記憶域を
複数の変数で使いまわす可能性がある(そうやってコピーが手軽にできるように
細工してる)から、勝手に書き換えるとほかにも影響が及ぶので。
std::string から char const* に変換したいなら std::string のメンバ関数 c_str() を
使えば良い、そうではなく書き込みたいなら >>554 の言うように一旦 char 配列に
書き込んで operator=() なり assign() なりでコピーする。
あとコピーや読み出しよりも書き込みが頻繁に発生するなら、std::string やめて
std::vector<char> 使うって手もある。
0560デフォルトの名無しさん
NGNGいちいちc_strしてる?
自分、標準C++ライブラリ使わないのでちょっと疑問に思ったんだけど。
0561デフォルトの名無しさん
NGNGどんな operator のこと?
0562デフォルトの名無しさん
NGNG話の流れからして operator char const*() じゃないかと。
0563デフォルトの名無しさん
NGNGc_str()があるのに、いちいち自分でoperator造って使ってる人なんていないだろうな。
0564デフォルトの名無しさん
NGNG暗黙の変換の怖さを知らない初心者が、
覚えたての機能で記述の楽をしようとか考えてるんじゃないの?
0565デフォルトの名無しさん
NGNGMFC の CString などには C 言語文字列型への暗黙の型変換があるので、
欲しいって気持ちも分かるけどな。
0566デフォルトの名無しさん
NGNG【目標】
各派生クラスについて、明示的に作成されたインスタンス
の数を共通のインターフェースで求めたい。
ex)
CBase *pBase;
CDerivedA a1, a2;
CDerivedB b1, b2, b3;
pBase = &a1;
cout << pBase->get_count() << endl; // 結果: 2
pBase = &b1;
cout << pBase->get_count() << endl; // 結果: 3
【追加条件】
上記を実現するに当たって、基底クラスは複雑になっても
構わないので、派生クラスに記述すべき定義をできるだけ
減らしたい。
以下にこれまでの試行錯誤を載せます。
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNG// ここから
class CBase {
public: virtual int get_count()=0;
};
class CDerivedA: public CBase {
static int countA;
public:
void add_count() { countA++; }
virtual int get_count() { return countA; }
virtual ~CDerivedA() { countA--; }
};
class CDerivedB: public CDerivedA {
static int countB;
public:
void add_count() { countB++; }
virtual int get_count() { return countB; }
virtual ~CDerivedB() { countB--; }
};
// ----
int CDerivedA::countA;
int CDerivedB::countB;
int main() {
CBase *pBase;
CDerivedA a1, a2; a1.add_count(); a2.add_count();
CDerivedB b1, b2, b3; b1.add_count(); b2.add_count(); b3.add_count();
...
}
// ここまで
0569デフォルトの名無しさん
NGNG一応目標は達成していますが、派生クラスに要求される
記述量が多く、先に示した追加条件を満足しません。
# コンストラクタ内でカウントするのが自然ですが、
# そうすると上の例では CDerivedB のコンストラクタが
# CDerivedA のコンストラクタを呼び出し、意図しない
# カウントをしてしまいます。
【試行錯誤2: クラス名をキーとするmapに格納】
// ここから
class CBase {
static std::map<std::string, int> count_map;
public:
CBase() {}
virtual void add_count() {
count_map[typeid(*this).name()]++;
}
virtual void sub_count() {
count_map[typeid(*this).name()]++;
}
virtual int get_count() {
return count_map[typeid(*this).name()];
}
virtual ~CBase() {
this->sub_count();
}
};
class CDerivedA: public CBase {};
class CDerivedB: public CBase {};
0570デフォルトの名無しさん
NGNGmap<string, int> CBase::count_map;
int main() {
CBase *pBase;
CDerivedA a1, a2;
a1.add_count(); a2.add_count();
CDerivedB b1, b2, b3;
b1.add_count(); b2.add_count(); b3.add_count();
...
}
// ここまで
この手法で目標を達成でき、また追加条件も満足して
いますが、いくつか不満が残ります。たとえば、typeinfo
ライブラリに頼っている点。コンパイラ依存でやや気持ち
悪いです。他に、map の要素へのアクセス効率も気に
なります。hash_map を使えば良いのでしょうけれど、
できるだけ標準ライブラリだけで済ませたいのです。
# add_count() もできれば削りたいです。。。
【まとめ】
以上で挙げた手法以外に、よりエレガントな方法があれば
是非ご教示ください。宜しくお願い致します。
連投、長レス、スマソ。
0571570
NGNGよく見たら先の試行錯誤、どちらもカウントを減らす処理が滅茶苦茶でしたorz
全然目標達成していません。
その辺りも含めて良い方法を、ヒントだけでも下されば幸いです。
教えて君でホントスマソ。
0572デフォルトの名無しさん
NGNG0573570
NGNG次からソース貼るときはラウンジ利用しますです。。。
試行錯誤の2つ目ですが、sub_count() でデクリメントすべきところを
誤ってインクリメントしていました。そこを直せば期待通りです。
試行錯誤1つ目はコンストラクタと同じ理由で、デストラクタでカウント
するとまずいので、新たに関数 sub_count() を用意して、スコープから
抜ける直前に呼ぶようにしたら直りました。init() と last() みたいで、
ちょっと情けない対処法です。お暇な方はご意見や改善策などについて
お返事くださいませ。
0574570
NGNG失敗してしまいます。結局 init(), last() 作戦に頼らざるを得ないようです。
>>572
お返事有り難うございます。継承を一度しか許さない、というのは
あらゆることが驚くほど簡単になるので、魅力的な選択肢ではあるのですが……。
もう少し粘ってみたい気持ちと半々です。
0575デフォルトの名無しさん
NGNGDerivedBは論理的にDerivedAでもあるのだから、
DerivedBのインスタンスが生成されたときにDerivedAのカウントが増えるのは自然。
>>572が言っているのは継承を一度しか許さぬ云々ではなくそのことだと思う。
template <typename Derived>
struct countable {
protected:
countable(bool b) : top(b) {if(b) ++count;}
int get_count() {return count;}
~countable() {if(top) --count;}
private:
bool top;
static int count;
};
template <typename Derived>
int countable<Derived>::count;
class CBase {
virtual int get_count() = 0;
};
class CDerivedA: public CBase, private countable<CDerivedA> {
typedef countable<CDerivedA> countable_type;
public:
CDerivedA(bool top = true) : countable_type(top) {}
virtual int get_count() { return countable_type::get_count();}
};
class CDerivedB: public CDerivedA, private countable<CDerivedB> {
typedef countable<CDerivedB> countable_type;
public:
CDerivedB(bool top = true) : CDerivedA(false) , countable_type(top) {}
virtual int get_count() { return countable_type::get_count(); }
};
0576デフォルトの名無しさん
NGNGunsigned& (*Counter)();
public:
CBase(unsigned& (*CountFunc)()) : Counter(CountFunc) {Counter()++;}
~CBase() {Counter()--;}
unsigned get_count() {return Counter();}
};
template<typename T> class CMiddle : public CBase {
static unsigned Count;
static unsigned& Counter() {return Count;}
public:
CMiddle(unsigned& (*CountFunc)() = Counter) : CBase(CountFunc) {}
};
class CDerivedA: public CMiddle<CDerivedA> {};
class CDerivedB: public CMiddle<CDerivedB> {};
//-------
template<typename T> unsigned CMiddle<T>::Count;
int main()
{
CBase *pBase;
CDerivedA a1, a2;
CDerivedB b1, b2, b3;
pBase = &a1;
cout << pBase->get_count() << endl; // 結果: 2
pBase = &b1;
cout << pBase->get_count() << endl; // 結果: 3
}
こういうのはだめか?>>570
0577572
NGNGclass CBase {
protected:
CBase(int &instance_counter):InstanceCounter(instance_counter)
{InstanceCounter++;}
int &InstanceCounter;
public:
int get_count() {InstanceCounter;}
virtual ~CBase(){InstanceCounter--;}
};
class CDerivedA: public CBase {
static int countA;
public:
CDerivedA() : CBase(countA) {}
protected:
CDerivedA(int &count) : CBase(count) {}
};
class CDerivedB: public CDerivedA {
static int countB;
public:
CDerivedB() : CDerivedA(countB) {}
};
0578570
NGNG丁寧なお返事有り難うございます。
ふむふむ……。なるほど、B is A だから、そもそも B のインスタンスを
数えることは A のインスタンスを含めて数えることが自然なわけですね。
で、そこら辺をすっきりさせるために、テンプレートを使って各クラスごとに
カウンタ構造体を用意してやっているといったところでしょうか。
未だソースを読むのが遅いので、もう少し理解する時間をください。
>>576
代替案をありがとうございます。こちらもテンプレートを使って、
中間クラスを作ってそこで管理…。と、これまた理解が遅くて申し訳
ないのですが、パッと見たところ A や B からさらに派生した場合の
カウントが結局同じように失敗しそうな。うぅ、ちょっとテストしてみます
です。。。
0579570
NGNG続けてお返事ありがとうございます。
こ、これは……。こんなやり方もあるんですね。参考になります。
「不自然な期待」通りの結果になることを確認しましたが……、
他の御二方同様、もう少しソースを読む時間を下さいませ。
早くこれくらいのソースをパパッと読み書きできるようになりたいです。。。
それにしても、このスレの住人は良い人ばっかりだぁ(ノд;)
0580570
NGNG>>576 さんと >>572 さんはアプローチが似ていて、末端クラスにのみカウンタの実体
を静的に置いて、基底または中間クラスに実体への参照や関数ポインタを非静的メンバ
に持っていますね。この構造は、なるほどごく自然で、目からうろこでした。
Base1 -(参照)-┬-> DerivedA (or Middle<DerivedA>) のカウンタ実体
Base2 -(参照)-┤
Base3 -(参照)-┘
Base4 -(参照)-─-> DerivedB (or Middle<DerivedB>) のカウンタ実体
特に >>576 さんの方法は初めに示した「派生クラスの記述量を少なく」という
条件にも対応してくださっていて、ふむふむ、と、しかし相変わらず派生クラスを
もう一度派生する方法がわからず、色々試しています。
>>575 さんのアプローチは、中間クラスも末端クラスも、カウンタの実体を
バシバシ作っておいて、カウントする際に末端クラスへの派生か否かを
フラグに取っておいてあるようです。親クラスを分離する手法は参考になります。
御三方とも、回答有り難うございました。なんとか解決しそうです。
また機会がありましたら宜しくお願い致します。
0581デフォルトの名無しさん
NGNG569をちょっと変えてLoki::TypeInfoを使うってのは?
Loki::TypeInfoはstd::type_infoをコンテナに格納できるようにするラッパです.
#include <loki/LokiTypeInfo.h>
using namespace std;
class CBase {
static map<Loki::TypeInfo, int> count_map;
public:
virtual void add_count() {count_map[Loki::TypeInfo (typeid(*this))]++;}
virtual void sub_count() {count_map[Loki::TypeInfo (typeid(*this))]++;}
virtual int get_count() {return count_map[Loki::TypeInfo (typeid(*this))];}
virtual ~CBase() {this->sub_count();}
};
class CDerivedA: public CBase {};
class CDerivedB: public CBase {};
map<Loki::TypeInfo, int> CBase::count_map;
0582デフォルトの名無しさん
NGNGifでいいじゃないですか。
0583570
NGNGtypeinfo構造体を丸ごとmapのkeyに持って来るようなものでしょうか?
それともhash関数に内部名を通すのかしら。 Loki や Boost について知識が
乏しいので改めて調べてみようと思います。>>569 は設計からして救いようが
ありませんが、Loki は色々使いようがありそうですので、有り難く引き出しに
しまっておくことにします。貴重な情報を有り難うございました。
>>582
例外処理、というとC++では try/catch ブロックのことでしょうが、
if 文でのエラー処理と (機能面で) 決定的に違うのは、try で関数を
呼び出して、関数内で throw した例外が関数を「抜けた後」で catch
ブロックに届くという点だと理解しています。それこそ、何重にも渡って
深く関数を呼び出しても例外が届くのです。set_xxx 系関数は戻り値が
成功フラグだったりしますが、get_xxx 系関数はそういうわけに行かず、
重宝するのではないでしょうか。
ロベールのC++教室、第二部第46章あたりに説明されています。
ttp://www1.kcn.ne.jp/~robe/cpphtml/index.html
他に、if 形式と try/catch 形式とでエラーの意味的な分類をしている
ということをどこかで見た記憶がありますが、ちょっと思い出せません。
0585デフォルトの名無しさん
NGNGLoki::TypeInfoの中で保持しているのはtypeinfoのポインタみたいです.
コンテナに格納できるように
std::typeinfoにはないコピーコンストラクタ,代入演算子を実装して
operator==はstd::type_infoのoperator==を
operator<はstd::type_infoのbeforeを使っているようです.
0586570
NGNGおお。私もつい先ほど Loki::TypeInfo のヘッダファイルを確認してみました。
てっきり std::type_info を直接比較するのは効率が悪かろうと思っていたのですが、
そもそも std::type_info::operator==() が定義されていたのですね!
std::type_info は構造体ではなくクラスだったのですね!!衝撃です。
符号化規則と照合順はコンパイラ依存とのことですが、結果は保証されて
いそうですし、今まで必死こいて string で比較していた私はなんと愚か
だったことか。Loki を使うにせよ使わないにせよ、大変勉強になりました。
有り難うございました。
0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNGどういうものがあり、一番使いやすいものはどれになりますでしょうか?
freeソフトでも有料ソフトでもよいので教えてください。よろしくお願いします
0589デフォルトの名無しさん
NGNGcout << showbase << hex << &n2 << endl; という形で説明もナシで本で使われていて何のことなのかさっぱりわかりません・・
0590デフォルトの名無しさん
NGNGint n2 = 12345;
int* pn = &n2;
cout << showbase << dec << &n2 << endl;
int n3 = reinterpret_cast<int>(pn);
cout << n3 << endl;
0592デフォルトの名無しさん
NGNGeclipseってC++にも対応してなかったんでしたっけ?
CDTとかって検索で引っかかりますけど.
0593デフォルトの名無しさん
NGNGC/C++の宿題を片づけ作戦指令 30代目
http://pc5.2ch.net/test/read.cgi/tech/1091954342/441
0594588
NGNG0595デフォルトの名無しさん
NGNGあちこちで聞きまくってるようだな、氏ねよ
0596デフォルトの名無しさん
NGNGおめーが氏ねよ
0597デフォルトの名無しさん
NGNGで10byteのバッファを確保した場合
delete [] buffer;
delete buffer [];
どちらもコンパイル通るんですが、
どっちが正しいの???
0598デフォルトの名無しさん
NGNG下はふつう通りません。
使ってるコンパイラ何?
0599デフォルトの名無しさん
NGNG0600デフォルトの名無しさん
NGNGいいサイトだったのに…
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/
0601デフォルトの名無しさん
NGNG嘘をつくな
0602デフォルトの名無しさん
NGNGネタにマジレスカコワルイ
0603デフォルトの名無しさん
NGNG0604デフォルトの名無しさん
NGNG本を見ながら勉強しています。
本に紹介があった「LSI C-86 Ver 3.30c 試食版」というのを使ってます。
でも、これだと上手くいかなくてイライラしたので、vectorで「LightC体験版」というのも使ってみました。
どちらもMS-DOS上で動くコンパイラです。
で、あるソースコードを書いてコンパイルしてみたのですが、本がすすめるコンパイラ(上)ではコンパイルできず、
下のコンパイラではコンパイルできました。実行すると上手くいきます。
何がまずいんでしょうか?
ソースコードを書きます。。
#include <stdio.h>
int main()
{
int youso[] = {2,-1,3,2,4,5,-2,0};
printf("行列を指定\n",);
printf("%d %d %d %d\n",youso[0],youso[1],youso[4],youso[5]);
printf("%d %d %d %d\n",youso[2],youso[3],youso[6],youso[7]);
printf("行列を掛け算\n",);
int kake[4];
kake[0] = (youso[0])*(youso[4])+(youso[1]*youso[6]);
kake[1] = (youso[0])*(youso[5])+(youso[1]*youso[7]);
kake[2] = (youso[2])*(youso[4])+(youso[3]*youso[6]);
kake[3] = (youso[2])*(youso[5])+(youso[3]*youso[7]);
printf("%d %d\n",kake[0],kake[1]);
printf("%d %d\n",kake[2],kake[3]);
return 0;
}
上のコンパイラでやると6行目にsyntax error near ")"、あとkakeを変数として認識してくれないとか色々エラーが出て話にならないんですが…
0605デフォルトの名無しさん
NGNG古いCの規格(といっても今は主流)では、変数宣言は関数の先頭にまとめなければならない。
0606デフォルトの名無しさん
NGNGint kake[4];の行をint youso[] = {2,-1,3,2,4,5,-2,0}; の上か下へ移す。
(C99より古い規格のCで変数宣言ができるのはブロックの始めだけ)
"行列を指定\n"と"行列を掛け算\n"の後ろについているコンマが余計なので外す。
0607デフォルトの名無しさん
NGNG> プログラムの途中や for 文の中で変数を宣言できるなど、C++ と同じ便利な機能が取り込まれています。
Light Cの独自拡張ですね。
0608デフォルトの名無しさん
NGNG丁寧なレスありがとうございます。
うまく訂正できました。
拡張機能使ってるのなら他のCコンパイラでエラーが出ても仕方ないですね。
もう一度よく勉強します。
0609デフォルトの名無しさん
NGNG見方によってはC99の部分サポートとも言えるな。
0610デフォルトの名無しさん
NGNG#include <string>
using namespace std;
int i,k;
int main()
{
string str[4][2]= {{"就職","活動"},
{"会社","訪問"},
{"集団","面接"},
{"学校","推薦"}
};
for(i=0;i<4;i++){
for(k=0;k<2;k++){
cout << str[i][k] << endl;
}
cout << "\n";
}
}
これってどうよ?
0611デフォルトの名無しさん
NGNG毎回endlを呼ぶのは無駄。
0612デフォルトの名無しさん
NGNG寧ろ最後こそendlにしろ。
0613デフォルトの名無しさん
NGNGmain()の戻り値がない。
0614デフォルトの名無しさん
NGNGグローバル変数使うな。
0615デフォルトの名無しさん
NGNG定期的にこの書き込み見るんだけど何?
0616デフォルトの名無しさん
NGNGあなたのような暇人を見つけるためでしょうね
0617デフォルトの名無しさん
NGNG2バイト文字をコードに埋め込むなよ・・・。
0618デフォルトの名無しさん
NGNG非組み込み型の配列は初期化できない。
0619デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNG0621ド素人
NGNG主に,行列計算を行う複雑なプログラムを作ろうと思っています。
基本的にc++でコーディングした方が,javaよりもcよりもメモリ消費が
少なくてすむし,スピードも両者より2倍近く早いというのは正しいでしょうか?
0622デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNGclass AA
{
public:
BB b;
};
class BB
{
public:
AA a;
BB(){
a->b=this;
}
};
0626デフォルトの名無しさん
NGNGもちろん
0627デフォルトの名無しさん
NGNG初期化が完了していないことに注意が必要。
0628デフォルトの名無しさん
NGNGdouble GetCircle()const{return circle;}
のように最後にconstがくるとその関数では数値の変更ができなくなるという意味があると思うのですが
const int showdata(){return a;}のように最初にconstがくる場合はどういう意味があるのでしょうか。
そして最後につけているものとドウ違うのでしょうか、よろしければご指導お願いします。
0629デフォルトの名無しさん
NGNGあんまり意味はないわな。
0630デフォルトの名無しさん
NGNG最後につくのはメンバ関数のconst。
最初につくのは戻り値のconst。
0631デフォルトの名無しさん
NGNGいきなり5ページ目でつまづきました。
SDIアプリケーションから初めてすぐにビルドしたら
C:\Program Files\Microsoft Visual Studio\MyProjects\test2\test2.rc(360) : fatal error RC1015: cannot open include file 'l.jpn\\afxres.rc'.
というエラーがでてビルドできません。(test2というのはワークスペースの名前です。)
どこをどうすれば解決するのか教えていただけないでしょうか?
0632デフォルトの名無しさん
NGNGありがとございました。
0633デフォルトの名無しさん
NGNGconst int& を返したりするのは全然別の話で
ちゃんと意味があるから
勘違いしないようにね。
0634デフォルトの名無しさん
NGNG関数内部のstatic変数以外返してはならんぞ!
0635デフォルトの名無しさん
NGNG0636デフォルトの名無しさん
NGNG0637デフォルトの名無しさん
NGNGconst int&は 指しているint変数は変えられてもその内容は変えられないのかな。。?
最近そこのあたりをやったばかりでなかなかむずかし・・
>>関数内部のstatic変数以外返してはならんぞ!
staticでないと関数の処理が終了したときにその関数内部のローカル変数は消えるから実態のない参照なりポインタなりがかえるとまずいからですよね。。?
なんだかまた質問になってスイマセン・・・
0638デフォルトの名無しさん
NGNGconst char*
char* const
const char* const
0639デフォルトの名無しさん
NGNG>const char *は さしているアドレスは変えられるけど指している文字列の変更ができないポインタでしたっけ、、?
yes.
>const int&は 指しているint変数は変えられてもその内容は変えられないのかな。。?
違う。参照はポインタと違って指す対象を変えられない。
const int *constに対応すると言ってもいい。
0640633
NGNGconst char * や、
const std::string& を返す
とでも考えてくれ。
0642デフォルトの名無しさん
NGNGstrcpy( buf, "初心者歓迎" );
//こういう入力と出力が同じような使い方はありなんでしょうか?
sprintf( buf, "%s C/C++室", buf );
0643デフォルトの名無しさん
NGNG駄目
0644デフォルトの名無しさん
NGNGその場合ならとりあえずstrcatが使える。
strcat(buf, "C/C++室");
0645デフォルトの名無しさん
NGNG動くのでつい使ってしまってました。
strcatか、無理なら別バッファ用意します。レスサンクスです。
0646デフォルトの名無しさん
NGNG0647デフォルトの名無しさん
NGNGwin32のコンソールアプリでCtrl+Sを無効化をしたいのですが、
どのような方法がありますか?
Ctrl+Cはsignal関数でなんとか無効化は出来るのですが・・・。
よろしくお願いします。
0648デフォルトの名無しさん
NGNG#include <string>
using namespace std;
class Myclass{
private:
static string class_string;
public:
static string show(){return class_string;}
};
string Myclass::class_string = "mystring";
int main()
{
cout << Myclass::show() << endl;
return 0;
}
このコードが実行できることはいいのですが、static string show()const{return class_string;}とすると、
静的メンバ関数が、メモリ モデル修飾子をともなって宣言されました。となりエラーなのですが、特に処理の中でメンバやオブジェクトに変更を加えているわけではないのでなぜエラーなのかわからないです。。
よろしければご指導お願いします。
0649648
NGNG何度もすみません。
0650デフォルトの名無しさん
NGNGstaticメンバ関数からは非staticメンバにはアクセスできないから、
メンバ関数のconstしていによる「非staticメンバを変更しない」という指定は意味が無い。
そして「staticメンバを変更しない」というconst指定はできない。
0651デフォルトの名無しさん
NGNGstaticデータメンバの定義はnamespaceスコープに現れなければならない。
元のコードはグローバルnamespaceでの定義。
mainに移すと関数スコープなのでダメ。
0652デフォルトの名無しさん
NGNG他人の作ったアプリ用のDLLを作成しています。
マルチスレッド対応が必要なので、DLL_THREAD_ATTACHで
スレッドローカル記憶域を確保しているのですが上手く動きま
せん。
どうやらアプリが複数のスレッドを作成後にこのDLLをロード
して、ロードしたスレッド以外からもコールしているようです。
このような場合は自分でスレッドIDを元に記憶域確保したり
しなければならないのでしょうか?
(元のアプリに手を加える事は出来ないのです_| ̄|○)
0654デフォルトの名無しさん
NGNGDLLの関数の中でTlsGetValueしてるんだと思うけど、
結果がエラーだったらそこでTlsSetValueすればいいのでは?
Win32API質問箱 Build22
http://pc5.2ch.net/test/read.cgi/tech/1092524669/
こっちで聞いたほうがいいかも。
0655652
NGNG動きました!
しかもPROCESS_DETACHは呼ばれるようで
メモリーリークも発生しません。
これで徹夜しないで済みます。
MY神様と呼ばせて下さい。
ありがとうございました。
0657デフォルトの名無しさん
NGNGある処理をしたい場合、
privateなinitメソッドをつくり、全てのコンストラクタないで
init()するしかありませんか?
0658デフォルトの名無しさん
NGNGいいえ、たぶん他に方法があります。
ですが、もう少し具体的に伝わるように状況を説明したほうがいいでしょう。
0659657
NGNGclass CHoge
{
int hoge;
public:
CHoge():hoge(0){}
CHoge(char* p):hoge(atoi(p)){}
CHoge(std::string):hoge(1){}
};
なるクラスだと
hoge(atoi(p))とhoge(0)とhoge(1)
を3つのコンストラクタに書くのが面倒なんですが・・・
0660デフォルトの名無しさん
NGNG初期化している値がコンストラクタの引数によってそれぞれ違うなら、
その例に書いてあることはすべて必要な記述です。
3つのコンストラクタに init(0) init(atoi(p)) init(1) と書いてもただの無駄でしょう。
0661デフォルトの名無しさん
NGNGkey : value = A : 1
key : value = A : 12
key : value = A : 123
key : value = B : 1
key : value = C : 12
key : value = C : 123
といったpairがstd::multimapに格納されてるとして
A,B,Cといったリストが欲しいのですが、begin()からend()まで地道に調べていけば
いいのですが、coolな方法があるなら教えてください
0662デフォルトの名無しさん
NGNGsinやcos、tan関数で返って来る値がおかしいんですけど、
原因はなんなんでしょうか?
0663デフォルトの名無しさん
NGNGstd::unique
0664デフォルトの名無しさん
NGNGまさか角度を度で入力してるとかじゃあるまいな?
0665デフォルトの名無しさん
NGNGstd::multimap::equal_range, std::copy, std::back_insert_iteratorでどうにかできない?
0666662
NGNG調べてみたら引数にラジアン値を指定するようでした……。
ありがとうございました。
0667デフォルトの名無しさん
NGNG(;´,_ゝ`)
0668デフォルトの名無しさん
NGNG例えばクラス名がAだとして
A::LENGTH なり、A::B::LENGTH なり。
class A
{
public:
static const int LENGTH;
char c[LENGTH];
};
とやると、char c[LENGTH] で定数式が必要といわれる
どうすればスマートですか?
enumだと値の重複があってイヤです
0669デフォルトの名無しさん
NGNGその場で初期化しろ。
0670デフォルトの名無しさん
NGNGその場で初期化ってどうやればいいの?
static const int LENGTH=100;
とかやると純仮想関数とみなされたりでコンパイル通らない
0671デフォルトの名無しさん
NGNGVC6とかの古いコンパイラ使ってながら何いってるんだ?
enumにするかあきらめろ
0672デフォルトの名無しさん
NGNGenumでいいじゃん。classん中で定義すりゃ
0673デフォルトの名無しさん
NGNGVC6じゃ出来ないんですね。ありがとう
NAMESPACEにでもします
0674デフォルトの名無しさん
NGNGsys/time.hがないようでうまくいきません。
何か他の手段でマイクロ秒単位で測定が行えないでしょうか?
言語はCで、使用しているコンパイラはボーランドです。
0675デフォルトの名無しさん
NGNG0676デフォルトの名無しさん
NGNGマウスドラッグが終わったところから、そのウィンドウのハンドルを取得するつもりで、
サイトを見ながら以下のようなプログラムを書きましたが、うまくいきません。。
理由とできれば解決策をお願いします・・・m(_ _)m
//キャプチャ中のとき
pts = MAKEPOINTS(LParam);
pt.x = pts.x;
pt.y = pts.y;
hWndTo = WindowFromPoint(pt);
0677デフォルトの名無しさん
NGNGげげ、そうなのですか。ありがとうございます。
0678デフォルトの名無しさん
NGNGtimeGetTime
GetTickCount
ms単位まで。前者奨める。
ちなみに、あまり高精度で測定しても意味はありません。
なぜなら、時間の取得にかかる時間が誤差になるからです。
0679デフォルトの名無しさん
NGNG窓なら
QueryPerformanceCounter()
を使えばμ秒の精度(予定)
CPUがINTEL系なら インラインアセンブラでRDTSC
でも良いかと
0680デフォルトの名無しさん
NGNGdouble* keisan(double c);
main(){
double *B;
B=keisan(2.0);
cout << "B[0] = "<< B[0] << endl;
cout << "B[1] = "<< B[1] << endl;
cout << "B[2] = "<< B[2] << endl;
cout << "B[3] = "<< B[3] << endl;
cout << "B[4] = "<< B[4] << endl;
}
double* keisan(double a){
double *A=new double[5] ;
A[0]=0.0;
A[1]=1.0;
A[2]=4.0;
A[3]=3.0;
A[4]=2.0;
cout << "A[0] = "<< A[0] << endl;
cout << "A[1] = "<< A[1] << endl;
cout << "A[2] = "<< A[2] << endl;
cout << "A[3] = "<< A[3] << endl;
cout << "A[4] = "<< A[4] << endl;
return A;
すみません。上のプログラムでAはまともに出力されるのですが、BはB[1]から
変な数値になってしまいます。この理由がわかりません。
B[0]=0;B[1]=1;B[2]=4;B[3]=3;B[4]=2;と出力するにはどうプログラムを
書き換えればよいのでしょうか?
0681デフォルトの名無しさん
NGNG時間取得にmsオーダーものオーバーヘッドは発生しないって
0682デフォルトの名無しさん
NGNGノートのような動的にクロックが変わるものだと…?
0683デフォルトの名無しさん
NGNGありがとうございます。
QueryPerformanceCounter()を使って、測定する事が出来ました。
0684デフォルトの名無しさん
NGNG確認してないけど座標系が違うんじゃないかな。
lParamのほうがクライアント座標で、
WindowFromPointはスクリーン座標だったかと。
MapWindowPointsを使って座標を変換できる。
0685デフォルトの名無しさん
NGNG他人が作ったライブラリファイルで、そのソースがないんですけど
ライブラリファイルだけでその内容を見ることは出来るのでしょうか?
0686デフォルトの名無しさん
NGNG何の内容だ?
0687デフォルトの名無しさん
NGNGソースコードです
0688685
NGNG申し訳ないです。ライブラリについてはよく分かってないものですから・・・
Cで書かれたライブラリってのは、Cのプログラムから作ってるんですよね
逆に、ライブラリファイルからソースを抽出できるのかな?ということなんです
0689デフォルトの名無しさん
NGNG卵焼きってのは生卵から作ってるんですよね
逆に、卵焼きから生卵を抽出できるのかな?ということなんです
0691デフォルトの名無しさん
NGNG0692デフォルトの名無しさん
NGNGこっちの方が比喩としてはいいのではないだろうか。
英文の和訳ってのは英文から作ってるんですよね?
逆に、英文の和訳から英文を抽出できるのかな?ということなんです
ある意味、できる。逆アセンブルして読んで解釈すれば。
0693デフォルトの名無しさん
NGNG積み重なったブロック群を元のブロックに戻すようなもんか。
0694デフォルトの名無しさん
NGNG0695デフォルトの名無しさん
NGNGどうしてもうまくいきません。いろいろ調べても多次元配列を引数にとる
方法は書いていても、多次元配列を返す方法が書いていません。
AとBを受け取ってCを返す関数を作りたいとき
double (*C)[2](double (*A)[2],double (*B)[2])という風に宣言したら
エラーになってしまいます。
どう宣言すればよいのでしょうか?
誰か教えてください。
0696デフォルトの名無しさん
NGNGdouble (*C)(double (*A)[2],double (*B)[2])[2];
0697デフォルトの名無しさん
NGNGtypedef double (*HOGE)[2];
HOGE C(HOGE A, HOGE B)
0698デフォルトの名無しさん
NGNG以下のコードで関数は配列を返せませんというエラーが出てしまいます。
どこが間違っているのでしょうか?
#include<iostream.h>
double (*tasizan)(double (*A)[2],double (*B)[2])[2];
main(){
double A[2][2];
A[0][0]=1.0; A[0][1]=0.0;A[1][0]=0.0;A[1][1]=1.0;
double B[2][2];
B[0][0]=1.0;B[0][1]=2.0;B[1][0]=1.0;B[1][1]=2.0;
double (*C)[2];
C=tasizan(A,B);
}
double (*tasizan)(double (*A)[2],double (*B)[2])[2]{
double (*C)[2];
C[0][0]=A[0][0]+B[0][0];
C[0][1]=A[0][1]+B[0][1];
C[1][0]=A[1][0]+B[1][0];
C[1][1]=A[1][1]+B[1][1];
return C;
}
0699696
NGNGごめん。正しくは
double (*C(double (*A)[2],double (*B)[2]))[2];
ところで、そのコードは意図したように動かないと思うぞ。
初期化していないポインタを使ってはいけない。
0700デフォルトの名無しさん
NGNG>>697
どうもありがとう。初期化すればうまくいきました。
0701676です
NGNGそれでくぐってClientToScreenにたどり着きました。どうもありがとうございました
0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNG0704デフォルトの名無しさん
NGNG関数にstaticを付ける。
0706デフォルトの名無しさん
NGNG構造体などのメンバにアクセスする際(.を打ち)、たま〜にメンバが出てくれないことがあります。
変数名が違う時やその他エラーが存在する時に出ないという事は承知している
のですが、なんの問題もなく、ただ唐突にでなくなる症状があります。
こんな症状ありませんか?
MicrosoftVisualC++ 6.0
0707デフォルトの名無しさん
NGNGstaticを付けると静的関数になるのでthisポインタはない。
そこで下のようにするとメンバ関数RealWindowProcがthis付きで呼ばれる。
ただしCreateWindow(Ex)の最後のパラメータにHogeへのポインタを渡す必要があるから、
クラスのメンバにCreateWindow(Ex)を行う関数が絶対必要。
class Hoge {
static WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
virtual RealWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};
LRESULT CALLBACK Hoge::WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
Hoge *pWnd = reinterpret_cast<Hoge *>(GetWindowLongPtr(hwnd, GWLP_USERDATA));
if (uMsg == WM_NCCREATE)
{
pWnd = static_cast<Hoge*>(static_cast<LPCREATESTRUCT>(lParam)->lpCreateParams);
SetWindowLongPtr(hwnd, GWLP_USERDATA, reinterpret_cast<LONG_PTR>(pWnd));
}
if (pWnd)
pWnd->RealWindowProc(hwnd, uMsg, wParam, lParam);
}
0709706
NGNGなるほど・・・。ありがとうございます。
微妙に解決しませんでしたが、ちょっとここからはDirectXの構造体の話になってしまいスレ違いということで自粛します。
とは言えこれで通常時この問題にぶち当たった時に対処できます。
ありがとうございました。
0710デフォルトの名無しさん
NGNGその方法を詳しく書いててお薦めのページがあれば教えて頂けないでしょうか?
0713デフォルトの名無しさん
NGNGjavaでいうjavaの鉄則みたいなやつ
0714デフォルトの名無しさん
NGNG0715684
NGNGそうだった。
ClientToScreenのほうが引数少なくて楽だね。ごめん。
>>707
USERDATAは誰かが別の目的で使ってたらと思うと
怖くて使えないのは俺だけ?
自分でテーブルつくって管理すればいいんだろうけど
面倒なので、たいていはSetProp/GetPropを使ってる。
もちろん速度的には不利だろうけど。
0716デフォルトの名無しさん
NGNGサンク使うのがいいかも。
ATLからソースをパクっt(ry
0717デフォルトの名無しさん
NGNGVCLの手法パクっt(ry
0718デフォルトの名無しさん
NGNGなぜ、あんなライブラリを商用として提供できるの? > Borland殿
0719デフォルトの名無しさん
NGNG0720デフォルトの名無しさん
NGNG禿げあがってしまうほど、同意
ぜってー、VC++の方が使いやすくね?
0721デフォルトの名無しさん
NGNG�@visual c++.netを使っています。
あるプロジェクトの中にtest1.cppとtest2.sppというものがあり、
test1の中で
#include <iostream>
main(){}
class test11{
public:
static void A1(){}
};
という形で書かれているとします。main関数とclass test11の順番を逆にしたら
コンパイルできるのですが、上の時にmainの前にstatic void test11::A1();
と宣言しても「test11の識別子がクラス名でも名前空間名でもありません」
というエラーが出てしまいます。正しい書き方があれば教えていただけないでしょうか?
�Aあと、上の例でコンパイルの順番がtest1.cpp→test2.cppでtest1の一番最初にmain関数が
来ている場合、test2の中の関数を使うことは可能でしょうか?
test2.cppのなかのclass test22の中のメソッドB()を使いたい場合はどういうコードを書けばよいので
しょうか?
よろしくお願いします。
0722デフォルトの名無しさん
NGNG(1)
class test11 {
public:
static void A1();
};
main() { ... }
void test11::A1() { ... }
ただし、普通はヘッダファイルを使う。
(2)の質問の答えも同様。
0723デフォルトの名無しさん
NGNG行列計算用のライブラリで計算速度が速く使いやすいおすすめのものがあれば
紹介していただけないでしょうか?
0724デフォルトの名無しさん
NGNG自作すれば一番満足できるだろ
0725デフォルトの名無しさん
NGNG#include<stdlib.h>
int main(void){
FILE *fp;
if((fp=fopen("sintai.dat","w"))==NULL){
printf("File not open\n");
exit(1);
}
int i;
struct sintai {
char *name;
int height,weight;
};
static struct sintai a[]={
{"nagata" ,180, 85},
{"nisimura" ,185, 95},
{"nakanisi" ,175, 80},
{NULL,0,0}
};
for (i=0 ; a[i].name != NULL; i++){
printf("%s\t%d\t%d\n",a[i].name,a[i].height,a[i].weight);
fprintf(fp,"%s\t%d\t%d\n",a[i].name,a[i].height,a[i].weight);
}
return 0 ;
}
これはstruct sintai a[]を初期化してsintai.datへ書き出すプログラムですが
これの逆をする場合、つまりsintai.datが 先に与えられている条件でsintai.datを読み込んで
struct sintai a[]へ代入する場合はどうすればいいでしょうか
0726デフォルトの名無しさん
NGNGC++相談室で上がってるもの以外だとoctaveのライブラリなんかどうでしょう?
0727デフォルトの名無しさん
NGNG0728デフォルトの名無しさん
NGNGstd::stringならinsert()
0729デフォルトの名無しさん
NGNGどうやったら簡単にできるでしょうか。
0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG0732デフォルトの名無しさん
NGNG16進数をどうやって扱ってる?
0733727、729
NGNGどうもです。
sprintf(str,"a%s",str)
みたいに、自分の先頭に足して自分に代入するのはできないですよね。
どうにか新しく余計な文字列を作らないで完結できないものでしょうか。。。
0734デフォルトの名無しさん
NGNGint num = 0xFFFF;
char str[5];
sprintf( str, "%x", num);
printf( "%s\n", str );
}
0735デフォルトの名無しさん
NGNG(1)
char str[6] = "1234";
char tmp[6];
strcpy(tmp, str);
strcpy(str, "0");
strcat(str, tmp);
(2)
char str[6] = "1234";
for(int i = 5; i > 0; i--){ str[i] = str[i - 1]; }
str[0] = '0';
0736デフォルトの名無しさん
NGNG「cgi」で日本語入力ホームを作って入力すると%23%4d%43・・・のように出ます。
%以降のは16進数らしいんです。これを日本語にするにはどうしたらいいのでしょうか?
0737デフォルトの名無しさん
NGNGsscanfかstrtol
0738デフォルトの名無しさん
NGNGこんな感じで初期化出来ませんか?
0739デフォルトの名無しさん
NGNGそのままでは無理。
const int init[] = { 0, 2, 4, 8, 16, 32 };
vector<int> v(init, init + sizeof init / sizeof *init);
operator,の定義でごまかす方法もある。
0740デフォルトの名無しさん
NGNGなるほど。どうもありがとうございました。
0741デフォルトの名無しさん
NGNGどうもありがとうございます。さっそく試してみたいと思います。
0742デフォルトの名無しさん
NGNG#include<iostream.h>
#include<stdlib.h>
double** AA(int n) {
double** A;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
A[i][j]=1;
}
}
return A;
}
main(){
double** B= AA(3);
cout << B[0][0] << endl;
}
引数nをとって,n×nの2次元配列を返すメソッドを作りたいのですが、
上のプログラムだとコンパイルは出来ますが、実行するとフリーズしてしまいます。
おそらく、ポインタの初期化が出来ていないからだと思うのですが
なかなかコードが書けません。
誰か教えてくれないでしょうか?
0743デフォルトの名無しさん
NGNG#include<iostream>/* iostream.hは時代遅れ */
#include<stdlib.h>
double *AA(int n) {
double *A = new int[n*n]; /* C++では要素数が不明の配列の配列を作れない。*/
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
A[i * n + j] = 1; /* 添え字を工夫 */
return A;
}
int main() { /* intは必須 */
double *B = AA(3);
std::cout << B[0 * 3 + 0] << std::endl;
delete B; /* newの後始末 */
}
0744デフォルトの名無しさん
NGNGusing namespace std;
double** AA( int n ) {
double** A = new double*[n];
for (int i = 0; i < n; i++)
A[i] = new double[n];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
A[i][j]=1;
}
}
return A;
}
int main(){
double** B = AA(3);
cout << B[0][0] << endl;
for (int i = 0; i < 3; i++)
delete [] B[i];
delete [] B;
return 0;
}
0745デフォルトの名無しさん
NGNG>引数nをとって,n×nの2次元配列を返すメソッド
0746デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNG742が求めているのは>>744の方じゃない?
0749デフォルトの名無しさん
NGNG確かにそうだ。
0750デフォルトの名無しさん
NGNG皆さん,おあつい議論のところ横から申し訳ないですけど,
742さんは(もし意図的に避けてるのでなければ)STLを使った方がいいですよ.たぶん....
#include <iostream>
#include <vector>
using namespace std;
typedef vector <double> Row;
typedef vector <Row> Matrix;
Matrix AA(int n) {
return Matrix (n, Row (n, 1));
}
int main()
{
Matrix B = AA (3);
cout << B[0][0] << endl;
}
0753デフォルトの名無しさん
NGNG多次元配列は↑みたいにSTLのvectorを入れ子にして使った方が楽だよ。
同様に入れ子して行けば何次元でもいける。
0754デフォルトの名無しさん
NGNGス、スペース!
0756753
NGNG逝ってくる…
0757742
NGNGところでSTLを使うことのデメリットはありますでしょうか?
使わないより計算速度がやや遅くなるとか‥‥?
0758デフォルトの名無しさん
NGNG「計算速度が遅くなるのに気づきにくい」が正確かな。
たとえば>>750はvectorを値で返しているのでコピーが発生する。
>>750なら4要素だから大したことはないが、巨大なvectorをコピーすると、
コードは単なるreturn分なのにも関わらず実行時コストが大きくなる。
0759デフォルトの名無しさん
NGNGうちでは圧倒的に750が速いです.
758さんの指摘はもっともなんですが,コピーは戻り値最適化で消えることがありますし,
それ以外のファクタが律速段階になっている可能性が多いにありえます.
以下測定コード.(見にくくて申し訳ありません.)
BUNDLE_SIZE10000に注意して見て下さい.
0760デフォルトの名無しさん
NGNG#include <vector>
#include <boost/timer.hpp>
using namespace std;
double *AA743(int n) {
double *A = new double[n*n];
for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) A[i * n + j] = 1;
return A;}
double** AA744( int n ) {
double** A = new double*[n];
for (int i = 0; i < n; i++) A[i] = new double[n];
for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) A[i][j]=1;
return A;}
typedef vector <double> Row; typedef vector <Row> Matrix;
Matrix AA750(size_t n) {return Matrix (n, Row (n, 1));}
const size_t MATRIX_SIZE (1000); const size_t BUNDLE_SIZE (100);
const size_t BUNDLE_SIZE10000 (BUNDLE_SIZE * 10000);
0761デフォルトの名無しさん
NGNGcout << flush; sleep (1); boost::timer t743;
for (size_t k (0); k < BUNDLE_SIZE; ++ k) {
double *B = AA743(MATRIX_SIZE); delete B;}
cout << t743.elapsed () << endl;
cout << flush; sleep (1); boost::timer t744;
for (size_t k (0); k < BUNDLE_SIZE; ++ k) {
double** B = AA744(MATRIX_SIZE);
for (size_t i = 0; i < MATRIX_SIZE; i++) delete [] B[i];
delete [] B;}
cout << t744.elapsed () << endl;
cout << flush; sleep (1); boost::timer t750;
for (size_t k (0); k < BUNDLE_SIZE10000; ++ k)
Matrix B = AA750 (3);
cout << t750.elapsed () << endl;
return 0;}
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNGなんぬぅ!
環境
model name: Pentium III (Coppermine)
cpu MHz: 853.221
cache size: 256 KB
MemTotal: 515256 kB
g++ 3.3.4 on Linux 2.4.26
コンパイルフラグ -O3 -march=pentium3 -msse -mfpmath=sse -fforce-addr -fomit-frame-pointer
結果
5.71
7.5
3.47 <-10000倍回してるのに
0764デフォルトの名無しさん
NGNGgetメソッドをポインタのポインタで返せばいいんだね
0765デフォルトの名無しさん
NGNGMatrix B = AA750 (3);
逝って来ます
0766759
NGNG750の測定回数を743,744と揃えるために
-for (size_t k (0); k < BUNDLE_SIZE10000; ++ k)
- Matrix B = AA750 (3);
+for (size_t k (0); k < BUNDLE_SIZE; ++ k)
+ Matrix B = AA750 (MATRIX_SIZE);
のように修正し測定し直しました.
結果
5.67
7.4
5.23
0767デフォルトの名無しさん
NGNG>>744のコードって遅いですかね?
0768759
NGNG766の結果は
1000x1000の行列を100回生成したときの実行に要した時間(秒)で,
上から743,744,750の場合なのですが,
うちの環境だと御覧の通り744は他の2つに比べ若干遅いみたいです.
(他の環境だとどんな感じなんでしょ? >>all)
ただ,システムをトータルで見たときに律速段階になってないようであれば,
気にするのはあんまり意味のないことだと思いますよ.
0769デフォルトの名無しさん
NGNGしかし、ボールの当たり判定はできているのですが稀にボール同士がめり込んでしまってこまっています。
以下にソースとバイナリ置いておきます
http://homepage3.nifty.com/selten/list.cpp
http://homepage3.nifty.com/selten/num7.exe
よろしければ見てやってください。
よろしくお願いします。m(_ _)m
0770デフォルトの名無しさん
NGNGだってnewの回数もdeleteの回数も一番多いんだから。
そうしないとdouble**が作れないわけでもあるが…
0771デフォルトの名無しさん
NGNGmに("0",100)から("9",100)までのペアを挿入したいんですが、
for分でまわして、'0'+i とかを使おうとしても、stringにキャストできないから困っています。
どうしたら良いですか?
0772デフォルトの名無しさん
NGNGbuff[0]+i;
とか
0773デフォルトの名無しさん
NGNG0774デフォルトの名無しさん
NGNG実際に使うときには動的だったり、1-99コくらい会ったりするので・・・
123.ToString()みたいな関数は用意されていないんですか?
0775デフォルトの名無しさん
NGNGsprintf
0776デフォルトの名無しさん
NGNGboost::lexical_cast
0777デフォルトの名無しさん
NGNGユーザーからの要求で処理を中断したりしたいのですがどうしたらいいでしょうか?
windowsのコールバック関数とかが検索で引っかかるのですが、環境非依存にしたいのです。
0778デフォルトの名無しさん
NGNG無理
0779デフォルトの名無しさん
NGNG0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNG独自のコールバック関数を定義して、
その関数ポインタを受け取るようにすれ。
コールバッククラスでもいいけど。
0782デフォルトの名無しさん
NGNG中断チェックをする関数を渡してあげればよいちうことでしょうか
int hoge( int (*mycallback)() )
{
int id;
for (){
//処理
……
id = (*mycallback)();
if (id==1) return 1; //ループを途中で抜ける
}
return 0; //正常終了
}
int chk_abort()
{
if(abortボタンが押されたら)
return 1;
else
return 0;
}
で、呼び出すときは
//処理
hoge(chk_abort);
//処理
みたいな?
0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNGものすごくてきとーな説明だったのによく解ったな。そんな感じ。
0785777
NGNGこれでint chk_abort();を処理系ごとに用意すれば、int hoge( int (*mycallback)() );
に関しては手をつける必要がなくせますね。早速試してみます。ありがとうございました。
0786デフォルトの名無しさん
NGNGint main(){
double pi=0;
int l,h;
char tmp[10];
printf("第何項まで? \n");
fgets(tmp,sizeof(tmp),stdin);
sscanf(tmp,"%d",&l);
for(h=1; h <= l ; h += 2){
if( h % 4 == 1){
pi=1.0/h + pi;
}
if( h % 4 == 3){
pi= - 1.0/h + pi;
}
printf("%d乗の項まで pi = %1.80lf\n",h,4*pi);
}
}
興味本意でこのようなプログラムを作ってみました。
piを求めると言うより,arctan1のテイラーの収束の遅さを知るためのものです。
これをコンパイルして実行すると,48桁までしか正しい数字が出て来なく,
以下は0が並んでしまいます。
手元の資料にdoubleの上限値が1.7E+308,精度が15桁とあるのですが,
なぜ,48桁程度までしか正しく計算できないのでしょうか?
0787786
NGNG0788デフォルトの名無しさん
NGNGMyclass &Myclass::operator=(Myclass& original)
{
cout << "My operator" << endl;
if(this==&original)
{
return *this;
}
name = original.name;
return *this;
}
という感じで、if文で自分自身にオブジェクトの代入を行わないようにするとあるのですが
if文でtrueでもfalseでも*thisを返しているのだからobj1 = obj1 や obj1 = obj2というようなコードを書いても
どちらも呼び出したオブジェクトobj1が返ってくることにならないですか?
0789デフォルトの名無しさん
NGNG呼び出したオブジェクト自身が返ってくるということは自分自身にオブジェクトの代入を行わないようにする意味がないのではと思ったのです。
if文のところを消してobj1 = obj1としてもとくにエラーが出たりするわけでもなかったのでなぜこのようにするかがわかりません。
どうかご指導お願いいたします。
0790デフォルトの名無しさん
NGNGよく判らんけど、1.0/hがpiに比べて小さすぎる値になってしまい、
(1.0/h + pi) == pi になってしまってるんじゃないの?
>788
obj1 = obj2 は
obj1.operator=(obj2) という関数に置き換わり、
その関数の返値がobj1(の参照)になるということ。って違うのか。
メンバにポインタを持っていて、newとdeleteが絡んだときに問題が発生する。
0791デフォルトの名無しさん
NGNGいやだから、精度が15桁しかないんだからそれ以上の桁に意味なんてないんだってば。
0792デフォルトの名無しさん
NGNGその場合の返り値はどこへいくのでしょうか。。
上のobj1.operator=(obj2)という文に置き換わることはわかるのですが、これはobj1.関数名(引数)という感じの関数ですよね。
と、するとその戻り値を格納する場所がないのでいったいどこへ行ってしまうんだろうと。。。
返り値を入れる変数など = 関数名(引数)という形のように 返り値を入れる変数など = obj1.operator=(obj2)という感じでないといけない気がして。。
0793デフォルトの名無しさん
NGNG自分自身への代入のときに、nameメンバをコピーしないことに意味があるんだろ。
nameメンバがポインタで、コンストラクタでnewしていれば当然の要請だね。
で、代入結果は obj1 = obj2では単純に捨てられる。
戻り値に*thisが必要な理由は、obj3 = obj1 = obj2のような場合に備えて。
0794デフォルトの名無しさん
NGNG>790、>791の指摘している通り、実際100000000までと1000000000までとでは値が変わらなくなってくる。
試してみたが、この時点で、累積誤差の所為で12桁程度の精度しかなくなってしまっている。
#真面目に誤差を計算しなくてもこんなもの。昔はこんな計算一々試せなかったなぁ。
0795デフォルトの名無しさん
NGNGということはこのようなポインタを使用しない場合は特にif文を使用する必要はなく、
仮にobj3 = obj1 = obj2というようなイコールを続けて使うことをしない場合は*thisを返す必要はないのでしょうか?
0796786
NGNG御解答ありがとうございます。
doubleの精度が15桁とはいえ、48桁程度までは数字が出てきているため、
意味があるのだろうかと思っていたのですが、信用できない数字なのですね。
0797デフォルトの名無しさん
NGNGもひとつ質問で、obj1 = obj1のような同じオブジェクトを代入した場合はどのようなことが起こるのでしょうか?
予想ではif(this==&original){return *this;}でreturn *thisをするが同じように格納する場所がないから捨てられる・・・と思うのですが。。
0798デフォルトの名無しさん
NGNGマンドクセからEffectiveC++でも買ってこい。
0799デフォルトの名無しさん
NGNG絶対熊田曜子の写真集のほうがヌケルぞ
0800デフォルトの名無しさん
NGNG別にヌキたいわけではない
0801デフォルトの名無しさん
NGNG0802デフォルトの名無しさん
NGNGVC++でコンパイル実行すると、結果はちゃんとでるんですが、
エディタ画面に戻って「prod」と入力するとエディタが
ハングアップ状態になってしまいます。
こんな現象にであった人いませんか?
環境 Windows XP Home Edition, VC++ NET 2003 Standard, boost_1_31_0
0803デフォルトの名無しさん
NGNGint*int=int64で結果を受け取りたいのですが、
何か良い方法無いでしょうか?
0804デフォルトの名無しさん
NGNGintじゃ無理
キャストするなどしてint64にしないと無理。
0805デフォルトの名無しさん
NGNGVCなら専用の関数があるけどな。
0806デフォルトの名無しさん
NGNG以前はCDialogの派生だったと思いますが、これからはこっちの方が正しいのでしょうか?
あと、作るたびにCDialogの派生に変更するのが面倒なのですが、デフォルトで
CDialogの派生で作るようにすることはできないでしょうか?
.netが以前のVisualStudioに比べてあまりに変わりすぎてるのでどうもわかりません。
教えてください。
0807デフォルトの名無しさん
NGNG自己解決です。作るときにたまたまリストのトップであるCDHtmlDialogが選ばれてただけでした。
0808デフォルトの名無しさん
NGNG> ということはこのようなポインタを使用しない場合は特にif文を使用する必要はなく、
メンバにポインタが無くても,他にユーザ定義のクラス(Aとしましょう.)がメンバにあって,
Aが同じ問題を抱えていた場合に問題になります.
Aを変更できるならAを修正するだけですが,
Aが変更できない場合はAを保持してるクラスで対処する必要があります.
> 仮にobj3 = obj1 = obj2というようなイコールを続けて使うことをしない場合は*thisを返す必要はないのでしょうか?
OKです.その場合宣言では返値の型にvoidを指定しましょう.
ただ組み込み型と互換がなくなるのでお薦めしません.
それと,代入演算子の引数(コピーコンストラクタもですが)はconstを付けましょう.788の例だと
Myclass &Myclass::operator=(const Myclass& original) {...}
こんな感じ.
0809デフォルトの名無しさん
NGNGclass Vector {
double* data; int n;
public:
Vector(int n0) {
data = new double[n0];
for (int i=0;i<n0;i++){
data[i]=0;
}
n = n0;
}
void put(int i, double d) {
data[i] = d;
}
};
class anime{
public:
static Vector tt(3); //static double m;
};
main(){
anime::tt.put(0,4); //m=10;
}
上記のように、class animeの中でVector classのインスタンスttを、staticにして、それを
別のところで操作しようとしたら、「構文エラー:定数」というエラーがでてしまいます。
double だとエラーがでないのに、上記Vectorでエラーがでる理由とエラーの意味がわかりません。
javaではこういうことはできてて良くやっていたのですが、c++だとできないのでしょうか?
0810デフォルトの名無しさん
NGNGclass anime {
public:
static Vector tt;
anime() : tt(3) {}
};
それよりVectorはoperatorを使えよ。
0811デフォルトの名無しさん
NGNGそれだとC2438
「静的なクラスデータを初期化するのに、コンストラクタが使われています。」
になったぞ。
class anime{
public:
static Vector *tt;
};
Vector *anime:ptt = new Vector(3);
int main()
{
anime::tt->put(0,4);
return 0;
}
俺にはこれしか思いつかない…
0812811
NGNGVector *anime:tt = new Vector(3);
0813デフォルトの名無しさん
NGNG-class anime{
-public:
-static Vector tt(3); //static double m;
-};
+class anime{
+public:
+ static Vector tt;
+};
+Vector anime::tt(3); //static double m;
0814811
NGNGありがとう、勉強になりました。
0815デフォルトの名無しさん
NGNGありがとうございます
0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNGあるよ
0818デフォルトの名無しさん
NGNG0819デフォルトの名無しさん
NGNGリンカならあるけど。
0820デフォルトの名無しさん
NGNGdo {
int a = ...;
} while(a);
が通るんだけど、これっておかしくない?
0821デフォルトの名無しさん
NGNGおかしくない書き方をこちらがやればいいだけだ。
0822デフォルトの名無しさん
NGNG0823デフォルトの名無しさん
NGNGdo {
int a = 1;
} while (a);
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNGおとなしく.txtよみこんでろlwkじぇっあwks
0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNGFILE*とかメモリとか、リソースじゃないんですか?
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNG0832デフォルトの名無しさん
NGNG/___|ミ ガッ
.|| ヾ ミ 、 ガッ
∩_∧/ヾヽ
| ,| ゚∀゚). .| |;, ガッ
/ ⌒二⊃=| |∵.
.O ノ %`ー‐'⊂⌒ヽ ガッ
) ) ) )~ ̄ ̄()__ ) ←>>830
ヽ,lヽ) (;;;;;;;;;;;;;;;;;)(_(
0833デフォルトの名無しさん
NGNG:public
static double* a;
};
double* A::a=new double[3];
a[0]=1;
上のコードのように、静的なメンバ定数であるaという配列を初期化する際に
そのaの成分a[0]をある値に初期化したいのですが、a[0]=1の部分でエラーになります
どうしても上のクラスの中でa[0]の成分を設定したいのですが、無理でしょうか?
0834デフォルトの名無しさん
NGNGclass A{
public:
static double* a;
};
double* a_init (){
double* result=new double[3];
result[0]=1;
return result;
}
double* A::a=a_init ();
0835デフォルトの名無しさん
NGNGclass SputterProcess
{
...
public:
virtual SputterProcess operator=(const SputterProcess&);
};
ってのがある。
virtualなoperator=()ってなに?
0836デフォルトの名無しさん
NGNG× virtual SputterProcess operator=(const SputterProcess&);
○ virtual SputterProcess& operator=(const SputterProcess&);
0837デフォルトの名無しさん
NGNGそういう方には
「この腐ったイカめ。私の床に落ちた精液でも舐めてなさいよ」
と、いってやればいい。
0838デフォルトの名無しさん
NGNG0839デフォルトの名無しさん
NGNGひょっとして派生側で挙動を変えてるとか
0840デフォルトの名無しさん
NGNGC++の入門書を読み直しましょう
0841デフォルトの名無しさん
NGNG0842デフォルトの名無しさん
NGNGなんで?
0843デフォルトの名無しさん
NGNGはじめて意味があるんだよ
0844デフォルトの名無しさん
NGNG>virtuaなメンバ関数はポインタを通して呼び出されて
>はじめて意味があるんだよ
?????????
0845デフォルトの名無しさん
NGNGusing namespace std;
struct A {virtual A &operator = (const A &p) {cout << "A" << endl; return *this;}};
struct B: A {A &operator = (const A &p) {cout << "B" << endl; return *this;}};
int main () {
A *p0 (new B ());
A *p1 (new B ());
*p0 = *p1;
return 0;
}
0846デフォルトの名無しさん
NGNG#include <stdio.h>
#include <math.h>
double kyori(double a[9],double b[9])
{
int i;
double k,k2=0;
for(i=0;i<9;i++)
{
k2+=pow(a[i]-b[i],2);
}
k=sqrt(k2);
return(k);
}
void main(void)
{
double x[]={1,2,3,4,5,6,7,8,9},y[]={9,8,7,6,5,4,3,2,1};
printf("%f\n",kyori(x,y));
}
これを一般化してN次元での2点間の距離を算出するのはどうすればいいですか
0847デフォルトの名無しさん
NGNGどうしたらいいでしょうか?
char str[256];
sprintf(str,"%s","aaaaa");
TextOut(hdc,0,20,str[1],1);
0848デフォルトの名無しさん
NGNG入門書を読んでいてif(pstr)のような変数名だけしかない条件判断が出てきて、いったいどういう意味なのかわからず困っています。
どういうときにtrueやfalsになるのかよろしければ下のソースを見てやってください。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_30/const.txt
0849デフォルトの名無しさん
NGNGif(pstr!=0)と同じ。
0850デフォルトの名無しさん
NGNG君、Cスレにいなかった?
template<std::size_t N>
double kyori(double (&a)[N],double (&b)[N])
{
int i;
double k,k2=0;
for(i=0;i<N;i++)
{
k2+=pow(a[i]-b[i],2);
}
k=sqrt(k2);
return(k);
}
0851デフォルトの名無しさん
NGNGそこまで判ってて何故C++?
0852デフォルトの名無しさん
NGNGN次元空間の場合はどうなるのでしょうか
0853デフォルトの名無しさん
NGNGTextOut(hdc,0,20,&str[1],1);これでいいはず。
>>852
もしかして一般化の答えは下記のようなのをお求めですか。
#include <stdio.h>
#include <math.h>
#define DIMENSION 9 /* N次元 */
double kyori(double a[],double b[])
{
int i;
double k,k2=0;
for(i=0;i<DIMENSION;i++)
{
k2+=pow(a[i]-b[i],2);
}
k=sqrt(k2);
return(k);
}
void main(void)
{
double x[]={1,2,3,4,5,6,7,8,9},y[]={9,8,7,6,5,4,3,2,1};
printf("%f\n",kyori(x,y));
}
0854デフォルトの名無しさん
NGNGどうもです
0855847
NGNGありがとうございます。更に質問なんですが…
↓のように文字列を返したいんですが、
コンパイルエラーは出ないもののうまくいってないようです。
どうしたらいいでしょうか。
class foo
{
private:
char str[256];
public:
char* Getstr();
};
char* foo::GetStr()
{
strcat(str,"aaaaa");
strcat(str,"\r\n");
return str;
}
///////////////////////
foo myfoo;
main()
{
char Buf[256];
sprintf(Buf,myfoo.GetStr);
TextOut(hdc,0,20,Buf,strlen(Buf));
}
0856デフォルトの名無しさん
NGNGなにがしたいのこのばか?
小学生?
0858デフォルトの名無しさん
NGNGコンストラクタでstrの内容の初期化はしてるのか
0859847
NGNGstrcatの使い方にひどいとかうまいとかあるんですか?
今後恥をかかないように良かったらどう酷いのか教えてください。
sprintfのところは
sprintf(Buf,"%s",myfoo.GetStr);
の間違いでした。
こうするのとstrcpy(Buf,myff.GetStr);
とするのでは違いがあるんでしょうか。
>>858
一応、str[256]="";
とかしてありますが、これで初期化はできてないんでしょうか…
0860デフォルトの名無しさん
NGNG0861デフォルトの名無しさん
NGNG> 一応、str[256]="";
コンパイルできないだろ。テキトーなこといってんじゃねーよ。
0862デフォルトの名無しさん
NGNG0863デフォルトの名無しさん
NGNGtp://cgi.www5f.biglobe.ne.jp/~fortune7/ccnp/daken/type.cgi
0864847
NGNGszLog[0]='\0'でした。
他の部分でchar text[256]="";とか
してあったんでそれと間違えました。
ここに書き込むために構造以外を変えてあるので混乱しました、すいません。
それで、結局どうすれば。。。
0865847
NGNGstr[0]='\0'でした。
0866デフォルトの名無しさん
NGNG{
char str[256];
public:
foo();
char *Getstr();
};
foo::foo()
{
strcpy(str, "aaaaaa");
strcat(str, "\r\n");
}
char *foo::Getstr()
{
return str;
}
0867デフォルトの名無しさん
NGNGヌルな文字列にstrcatしても追加できないです。
だから、文字列のはじめに終端文字\0を入れるか
strcpyをして文字列そのものを移すなど
0868847
NGNGありがとうございます。でもなんかうまくいってないです・・・
>>867
なるほどそういうことですか。ありがとうございました。
多分省略してあるほかの部分が変な風に作用してるのかもしれません。。
とりあえずこの問題は放置して他の事やることにします。
色々ありがとうございました。
0869デフォルトの名無しさん
NGNG867は(ry
0870デフォルトの名無しさん
NGNGうまくいかないのはDOSプログラムでTextOut関数を使っているから。
strcat以前の問題。
0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNGついでにここも参考までに
http://www.kumei.ne.jp/c_lang/sdk/sdk_05.htm
"\r\n"は使えない。
0873お願いします
NGNGクラスで、qsort関数を使おうとしたのですが、比較関数のところでエラーが出るんですがなぜ出るのか、
皆目検討つきません。
どう間違っているのか、教えてもらえないでしょうか?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1094377310&res=1
お願いします。
0874デフォルトの名無しさん
NGNG警告読んでこんなこと買いいるのであれば別の言語に乗り換えた方が吉
0875デフォルトの名無しさん
NGNGすみません。ですが、自分なりに検討してみたんですがわからなくて・・・。
それで、ココに来たんです。
教えてもらえないでしょうか?
0876デフォルトの名無しさん
NGNGだから警告嫁っt(ry
int compare(const void* p1, const void* p2);→static int compare(const void* p1, const void* p2);
とするか、
namespace
{
AAA* g_aaa = NULL;
}
AAA::AAA()
{
g_aaa = this;
}
inline int
compare_stub(const void* p1, const void* p2)
{
return g_aaa->compare(p1, p2);
}
qsort(wpaaa, IT, sizeof *wpaaa, compare_stub);
ってしろ
0877デフォルトの名無しさん
NGNG0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNGそれで、教えていただいた通りに書いてみたのですが、
二つとも、
データ整理.obj : error LNK2001: 外部シンボル ""public: void __thiscall AAA::Addresses(class AAA * *,class AAA *,int)" (?Addresses@AAA@@QAEXPAPAV1@PAV1@H@Z)" は未解決です
Debug/データ整理.exe : fatal error LNK1120: 外部参照 1 が未解決です。
っていうエラーが出たんですが・・・。
0880デフォルトの名無しさん
NGNGプログラムやめろ
0881デフォルトの名無しさん
NGNGvoid Addresses(AAA** wpA, AAA* pA, int n)
{
for(int i = 0; i < n; i++)
wpA[i] = &pA[i];
}
これがクラススコープになってないっすw
0883デフォルトの名無しさん
NGNGメンバー関数は無理っしょ
0884デフォルトの名無しさん
NGNGなら、普通にクラスに入れずに考えればいいんですね。
0885デフォルトの名無しさん
NGNG0886デフォルトの名無しさん
NGNG0887デフォルトの名無しさん
NGNGすみません。そこまで進んでいなくて。。。
最近始めたので。
0888デフォルトの名無しさん
NGNG0889デフォルトの名無しさん
NGNGいろいろ修正させていただきました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1094377310&res=2
0890デフォルトの名無しさん
NGNG0891887
NGNGそれで、さらに質問で申し訳ないのですが、
>>876氏が教えて頂いたところで、staticを使う理由を教えてもらえないでしょうか?
できれば、初心者でもわかるように説明をお願いします。
重ね重ね、すみません。
0892デフォルトの名無しさん
NGNGここで聞くより自分で調べたほうが早い。
あえて教えるなら・・・・。
うるさい方々が現れるから。
0893デフォルトの名無しさん
NGNG本当にありがとうございました!!
0894デフォルトの名無しさん
NGNGクラスのインスタンスに使うのは個人的にスキじゃないです。
0895デフォルトの名無しさん
NGNGスキじゃないとか好みの問題じゃなくて、memcpyでコピーできないクラスには使っちゃダメだろ。
0896893です
NGNGstaticをつけるのは、クールバック関数だから。
と、調べたら書いていたのですが、
それであっているのでしょうか?
0897デフォルトの名無しさん
NGNG0898896です
NGNGすみません。ギブです。
教えてもらえませんか?
0899デフォルトの名無しさん
NGNGどんな関数か考え込んでしまった
0900898です
NGNG読み間違いです。
で、コールバック関数だからでしょうか?
0901デフォルトの名無しさん
NGNGstaticをつけないと関数を呼び出すときにthisポインタを渡す必要がある。
普通のコールバック関数だとそんなことしない(できない)。
staticをつけた静的メンバ関数はthisポインタを受け取る関数ではないのでコールバック関数として使える。
0902900です
NGNGありがとうございます。理解できました!
本当にありがとうございました!
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNGこれは具体的にはどうのようなもんでっしょうか?
stringはたぶんSTLで、arrayって????
0905デフォルトの名無しさん
NGNGjavaでいう、isStringのような
0906デフォルトの名無しさん
NGNGないと思うがな。
javaってそういう関数あるのか。便利やぁ。
じゃヴぁ勉強してみよかな?
0907デフォルトの名無しさん
NGNGbool string::isString()
{
return true;
}
これで代用してください。
常に正しい値を返します。
0908デフォルトの名無しさん
NGNGネタなんですか?
本気でおもしろくないんですが・・・
0909デフォルトの名無しさん
NGNGこういうものが欲しいのじゃないんですか?
0910デフォルトの名無しさん
NGNG文字のクラスを返す関数は作れても、
文字列であるかどうかを判定することはかなり難しいと思うのですが・・・
例えばCの文字列か判定する関数があったとして許せる?
0911デフォルトの名無しさん
NGNG0912906
NGNGあきらめます。ありがとうございました。
0913デフォルトの名無しさん
NGNGいや、待て。
君には説明の義務が有る。
何故必要になったんだ?
漢字だと先行バイトが漢字の範囲に入っているか、とか調べないといけない。
ShiftJISとか文字コードを限定したら簡単には作れそうな気はするな。
でも本当に文字列かどうかを判断する事はできない。
0915デフォルトの名無しさん
NGNGint isString(const char *s,size_t n)
{
return memchr(s,0,n)?1:0;
}
0916デフォルトの名無しさん
NGNGisStringじゃおかしいだろ。
0917デフォルトの名無しさん
NGNGえ?
0918デフォルトの名無しさん
NGNG0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNGどのクラスにあるんだ?
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNGJ2SE1.4には無いようだから、1.5からの新機能に対応して出来たのかな?
0923デフォルトの名無しさん
NGNG0924デフォルトの名無しさん
NGNG0925デフォルトの名無しさん
NGNG0926デフォルトの名無しさん
NGNG>1010をご確認ください。
0928デフォルトの名無しさん
NGNG0929デフォルトの名無しさん
NGNGオープンソースなクラスライブラリ(GUIツールキットじゃなくて)でメジャーな
のってありませんか? Stringとかxml周りとかjavaのクラス並に充実してるやつ。
0930デフォルトの名無しさん
NGNG0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNGちょうどよかった。
その質問に答えるから、JavaのisStringについて教えてもらえないっすか?
交換条件とかせこすぎw
持ってる情報は出しなされw
0934デフォルトの名無しさん
NGNGいや、それがさ、isString誰も教えてくれないんだよ。
WideStudioとかどうよ?
俺?俺は使わないよ。
だってJavaみたいだもん。
0935デフォルトの名無しさん
NGNGその引数の中身を例としてint{0,1,0,1,0}のように
操作するにはどうすればいいですか?
void __fastcall TCard::GetCards(int c[50])
{
d = Cards;
return;
}
だとうまくいかないみたいなんで
0936デフォルトの名無しさん
NGNGO c = Cards;
0937935,936
NGNGC++ ですね。
Cards はクラスの変数 int Cards[50] だけどこの際無視で。
935のコード関係無しで答え希望。
ようするに配列データを関数に渡して、関数の中でデータをいじりたいってことか?
int buf[255];
foo(buf, 255);
void foo(int *data, int size) {
data[1] = 0;
}
普通は配列ごと関数に渡すなんてことはしない。データコピーが発生するから重い。
0939デフォルトの名無しさん
NGNGこれがよくわからない。
配列のコピーならmemcpyでできるけど
0940デフォルトの名無しさん
NGNG>普通は配列ごと関数に渡すなんてことはしない。データコピーが発生するから重い。
ためになります。
>>939
わかりにくくてですみません。
memcpy で出来ました。
0941デフォルトの名無しさん
NGNG{
char procName[32];
void (*EvtProc)(LPRDATA,DWORD,DWORD);
LPPROC lastProc;
LPPROC nextProc;
}PROCUDURE;
typedef PROCUDURE * LPPROC;
typedef struct tagRunData
{
PROCUDURE sProc;
BOOL (*AddSubclass)(LPRDATA,void*,const char[32]);
BOOL (*DelSubclassAll)(LPRDATA,void);
BOOL (*DelSubclass)(LPRDATA,const char*);
}RUNDATA;
typedef RUNDATA * LPRDATA;
以上のような定義を行いたいのですが、LPRDATA,LPPROCがシンタックスエラーとなってしまいます。
よくよく考えれば、上から順に解釈されるのだからこうなることは理解できました。
しかしその後、どう考えても解決策が分かりません。VC6で開発しております。ご教授ください。
typedef struct tagProcudure
{
char procName[32];
void (*EvtProc)(LPRDATA,DWORD,DWORD);
struct tagProcedure lastProc;
struct tagProcedure nextProc;
}PROCUDURE;
typedef PROCUDURE * LPPROC
これじゃ駄目か?(´・ω・`)
スマートな書き方じゃないのは分かるが
0945デフォルトの名無しさん
NGNGあとはLPRDATAとLPPROCの相互参照をどうにか出来ればよいのですが・・
0946デフォルトの名無しさん
NGNG変数名の頭のLPってどういう意味で付けられているんですか?
0947デフォルトの名無しさん
NGNG当然コメントの意味も分からず、ただ猿真似的に名前をつけているのですが
恐らくLocal pointerの略なのではないかと思っております。
0948 デフォルトの名無しさん
NGNGMicrosoftの趣味だな。Long Pointer の略。
LPCTSTRとか Long Pointer Const Tchar String とかだぜ。ヒデー
0949デフォルトの名無しさん
NGNGstruct tagProcudure;
typedef struct tagProcudure PROCUDURE;
typedef PROCUDURE* LPPROC;
struct tagRunData;
typedef struct tagRunData RUNDATA;
typedef RUNDATA* LPRDATA;
struct PROCUDURE
{
char procName[32];
void (*EvtProc)(LPRDATA,DWORD,DWORD);
LPPROC lastProc;
LPPROC nextProc;
};
struct RUNDATA
{
PROCUDURE sProc;
BOOL (*AddSubclass)(LPRDATA,void*,const char[32]);
BOOL (*DelSubclassAll)(LPRDATA,void*);
BOOL (*DelSubclass)(LPRDATA,const char*);
};
0950デフォルトの名無しさん
NGNG0951デフォルトの名無しさん
NGNGthx
習って頭に型付けてるけど
プログラムの規模が小さいから
ただ長ったらしくなるだけで
俺にはあまり意味がないようです。
0952949
NGNGLP〜というポインタのtypedefはお勧めしない。
LPをつけたせいでPROCEDUREがPROCに、
RUNDATAがRDATAに省略されるなんてデメリット大きすぎ。
意味もわからずに付けてるなら即やめておけ。
あと、構造体のタグ名とtypedef名は同じでいい。
普段使う名前をタグ名にしておけば、
struct PROCEDURE;
などと前方宣言して struct PROCEDURE* を関数引数の型、
構造体メンバの型として使えるようになる。
コンパイル時のヘッダの依存関係を軽減するのに有効。
0953デフォルトの名無しさん
NGNGどうもありがとうございます!下のタグ名のほうを直したらコンパイル通りました。
更にご指摘まで頂き感謝します、参考にし書き直します。本当にお世話になりました。
0954デフォルトの名無しさん
NGNGmyclass3 = myclass2のような代入ではmyclass3のstirng* pstrがあらかじめ指していたオブジェクトを破棄して新しくオブジェクトを作成する理由はわかるのですが。。
myclass3 = myclass3という処理を可能にしたらmyclass3のインスタンスがメモリ上に2できるってことなんでしょうか。。?
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_31/des.txt
0956デフォルトの名無しさん
NGNG防がずに処理したら、delete pstr で破棄したポインタに original.pstr でアクセスすることになるだろ。
うpされてるソースだと、 pstr = new string した時点で original.pstr にも同じ値が入る。
どちらも望む処理結果にはならないだろう。
0957929
NGNGBoostってSTLの補完的な感じですよね。
求めてるのはQtからGUIを除いたような、javaの標準ライブラリくらいはそろってる
ような高級な奴なんですが・・・。やっぱそんなのないですか?
0958デフォルトの名無しさん
NGNG↓のような感じに一文字ずつ正しく表示するにはどうすればいいでしょうか。
for(i=0;i<strlen(buff);i++){
if(buff[i]=='\0')return;
TextOut(hdc,i*16,0,&buff[i],???);
}
0959デフォルトの名無しさん
NGNGfor(i=0; buff[i] != '\0'; i+=IsDBCSLeadByte(buff[i]) ? 2 : 1) {
TextOut(hdc, i*16, 0, buff+i, IsDBCSLeadByte(buff[i]) ? 2 : 1);
}
0961デフォルトの名無しさん
NGNGカウンタ制御やってて下にある初期化フェーズのカウンタを1にする事に納得がいきません。
0だと思い、試しにやってみたら11回カウントしちゃうし・・・・何故なんでしょ?
#include<stdio.h>
main()
{
int counter, grade, total, average;
/*初期化フェーズ*/
total = 0;
counter = 1;
/*処理フェーズ*/
while (counter <= 10)
{
printf("成績を入力して下さい。:");
scanf("%d",&grade);
total = total + grade;
counter = counter + 1;
}
/*終了フェーズ*/
average=total / 10;
printf("平均は%d\n",average);
return 0; /*プログラム正常終了をお知らせ*/
0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNGwhile (counter < 10)
0から9まで10回
counter = 1;
while (counter <= 10)
1から10まで10回
0964デフォルトの名無しさん
NGNGはじめたばかりなので言ってる事がわかんないっす。
>963
ありがとうございます。知りたい事とちょっとずれてましたがヒントになってわかりました。
0965デフォルトの名無しさん
NGNGそれなら頭の中で変数の値を記録しながら一行ずつ実行してみたらどうでしょうか?
0966デフォルトの名無しさん
NGNG協力ヨロシク、みなの衆。
0967デフォルトの名無しさん
NGNG面倒なんだよな
0968デフォルトの名無しさん
NGNGただ,C++でどういうコードを書いていたのでそれが欲しくなったのかを知りたい気はする.
0969デフォルトの名無しさん
NGNGJava isString の検索結果のうち 日本語のページ 約 14 件中 1 - 12 件目 (0.06 秒)
ここから何を読み取れと??
0970968
NGNGJavaのじゃの字も知らないのでハズしてるかもしれないんだけど,
検索すると
boolean isString(java.lang.Object o)
ってのをよく目にする.これなのでは?
Objectって全てのクラスの先祖で,Javaって参照渡しなんでしょ.
間違ってたらゴメンなさい.
920,929を見るにまだ何も書いてないのかなという気はします.
stringは標準ライブラリ+boostで十分として,
あとはクロスプラットホームなxmlライブラリを紹介したらすむのでは?
0971デフォルトの名無しさん
NGNGどのページですか?
たぶんはずしてると思う。
0972デフォルトの名無しさん
NGNGって参照へのポインタでよろしかったでしょうか?
0973デフォルトの名無しさん
NGNGHoge**とほぼ等価。
0974968
NGNGこのへんとか.
http://www.jajakarta.org/struts/struts1.1/documentation/ja/targetWP/api/org/apache/struts/validator/FieldChecks.html
やっぱ違いますか? (汗)
0975デフォルトの名無しさん
NGNGstrutsは違うだろw
0976デフォルトの名無しさん
NGNG宜しければ良い見本コードを見せてもらえませんか?
int main(void){
bool flag = true;
int play = 0, comp = 0;
string te[] = { "グー", "チョキ", "パー" };
int check[3][3] = { { 2, 1, 0 }, { 0, 2, 1 }, { 1, 0, 2 } };
srand((unsigned int)time(NULL));
cout << "グー = 1, チョキ = 2, パー = 3" << "\n" << endl;
while(flag){
cout << "ジャンケン... ";
comp = rand() % 3;
play = getch() - 0x31;
if(play > 2){ play = 2; }
cout << "ポン !" << endl;
cout << "player " << te[play] << " vs " << te[comp] << " comp" << endl;
switch(check[play][comp]){
case 0:
cout << "you lose...\n" << endl;
cout << "retry? y/n ";
if(getch() != 'y'){ flag = false; } cout << "\n" << endl;
break;
case 1: cout << "you win!!\n" << endl; break;
case 2: cout << "even\n" << endl; break;
}
}
return 0;
}
0977デフォルトの名無しさん
NGNG手のクラスを作り、数値を隠蔽化する。
勝ち負けのenum値を作り、上記手のクラスの比較関数の戻り値として使用する。
それやるだけで随分とプログラムの意図は読みやすくなるんで内科医?
全部をmain()でやろうとせずに、機能を関数として分けるだけで随分違うと思う。
0979デフォルトの名無しさん
NGNGC++に関する質問があります。
template <class T> class mylist
{
public:
typedef list<T> L;
typedef L::iterator I;
L list;
};
このクラス定義内のL::iteratorを、以下のようにクラス外部で使いたい場合はどうすればいいのでしょうか。
mylist<int>::Iという形ではなく、インスタンス.I iter; のように、パラメーター化された型を除外できたらなと考えています。
int main()
{
mylist<int> list;
list.I iter;//mylist::I iter;
〜
}
よろしくお願いします。
0980デフォルトの名無しさん
NGNGmylist<int>::I を main() の中で typedef すれば終いでは?
そういう話じゃないのかな
0981デフォルトの名無しさん
NGNGよくわかんないよねえ。
俺も一応答えたんだけど、一言の返事も無いまま
> mylist<int>::Iという形ではなく
とかいって却下されてるしw
0982デフォルトの名無しさん
NGNGmylist<int> il; iter = il.begin();
mylist<double> dl; iter = dl.begin();
とかやりたいのか?
無理だ。
0983デフォルトの名無しさん
NGNGおまいじゃ無理だろうねw
0984979
NGNG>>980
ありがとうございます。
現状では、namespaceでtypedefを隔離して利用しています。
C++学習中なんで、実際には瑣末な事だろうと思うのですが
せっかく型付きで宣言したインスタンスがあるのだから、イテレーターの利用において、再度同じ宣言をするのはスマートじゃない気がして。
FAQ的な部分に感じたので、何か方法があるのではと考えています。
>>981
ttp://pc5.2ch.net/test/read.cgi/tech/1092665695/611
の方でしょうか。
却下されてるというか、返事が遅くなってしまった点については、あやまります。
昨日の時点で、以下の発言において、返事自体は行っています。
ttp://pc5.2ch.net/test/read.cgi/tech/1092665695/622
0985979
NGNGありがとうございます。
mylist<int> il;
mylist<int>::iterator iter;
を、
mylist<int> il;
il.iterator iter;
mylist::iterator _iter;
としたいのです。
typedef mylist<int> mylistint;
mylistint::iterator iter;
とするのと同じ効果を、typedef無しでもできるのではと(r
すいません、学習中なんですorz
0986デフォルトの名無しさん
NGNG標準じゃないけどtypeof演算子が欲しいってことでしょうね.
0987976
NGNGenum judge{ lose = 0, win = 1, even = 2, };
class cte{
protected:
string m_type[3];
judge m_judgelst[3][3];
int m_play, m_comp;
public:
void select(void){
m_comp = rand() % 3;
m_play = getch() - 0x31;
if(m_play > 2){ m_play = 2; }
}
void show(void){ cout << "player " << m_type[m_play] << " vs " << m_type[m_comp] << " comp" << endl; }
judge check(void){ return m_judgelst[m_play][m_comp]; }
cte(){
srand((unsigned int)time(NULL));
m_type[0] = "グー"; m_type[1] = "チョキ"; m_type[2] = "パー";
m_judgelst[1][2] = m_judgelst[2][0] = m_judgelst[0][1] = win;
m_judgelst[0][0] = m_judgelst[1][1] = m_judgelst[2][2] = even;
m_judgelst[2][1] = m_judgelst[0][2] = m_judgelst[1][0] = lose;
}
~cte(){}
};
0988976
NGNG{
bool flag = true;
cte te;
while(flag){
cout << "ジャンケン... ";
te.select();
cout << "ポン !" << endl;
te.show();
switch(te.check()){
case lose: cout << "you lose...\n" << endl; flag = false; break;
case win: cout << "you win!!\n" << endl; break;
case even: cout << "even\n" << endl; break;
}
}
return 0;
}
0989デフォルトの名無しさん
NGNG一行目の時点で既に不可能だし、型を限定しない静的でタイプセーフなコンテナは作れない。
0990デフォルトの名無しさん
NGNG自分で前よりよくなったと思う?
先ずはそれが一つのポイント。
#ごちゃごちゃさ加減が減ったかどうかね。
で、次はそれで充分かどうかを検討してみましょう。
処でこの問題の場合、「手」をクラス化しました。
しかし、コンピュータの手とオペレータの手を纏めてしまったために
オペレータ同士の対戦にしたりコンピュータ同士の対戦にすることができません。
このような改修に耐えられるように手はそれぞれ独立したオブジェクトとして扱えた方が面白いでしょうね。
0991デフォルトの名無しさん
NGNG>>986 の言うとおり、 typeof ほしいって話だね。
残念ながら現状では(イテレータのインスタンスを直接定義する限り)型名を書かざるを得ない。
STL のアルゴリズムみたいなイテレータを引数に受け取る関数テンプレートに
関数の戻り値を直接渡してコンパイラに型推論してもらうときれいにできるんだけどねえ。
0992デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG勝手に詰められませんか?
0995992
NGNGerase(itr);
itr++
とかしてておかしなことになってました。
0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000976
NGNGどうにかまた出来ました! でももうこのスレ終わりですね。。。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。