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


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

C/C++小心者スレッドPart1



1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ]
プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2以降。

■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
 ・ぐぐる
 ・マニュアルで探す 
 ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html
質問には以下を書くこと。へたくそな質問は再提出を要求される。
 ・詳しい内容(「動きません」「うまくできません」では回答しようがない)
 ・エラーメッセージ(なるべくそのままで)
 ・実行環境(OS名、コンパイラ名)
 ・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。

■回答する人へ 
相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって小心者スレだもん)。
 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。


宗教的な話題は禁止します。


75 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 13:22:42 ]
そうなんか?

そう書き間違えた場合の、文法チェックとか、メモリリーク調査とか、可能?

76 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 13:25:37 ]
>>74
ダウト
処理系によってはコア吐くぞ

77 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 08:54:58 ]
intならデストラクタが無いからどっちも同じ

78 名前:デフォルトの名無しさん [2008/08/20(水) 08:56:18 ]
どっちも同じってことはない。


79 名前:デフォルトの名無しさん [2008/08/20(水) 09:57:39 ]
Visual C++ 2008 ではC++でなくCのコンパイルできないの?

80 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 10:38:50 ]
できるよ

81 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 10:48:53 ]
CLRにするとC++/CLI専用になるから *.c はコンパイルできない。
Win32のプロジェクトならできる。

82 名前:デフォルトの名無しさん [2008/08/20(水) 11:53:10 ]
サンクス

83 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 13:17:31 ]
>>74
未定義じゃない?ANSIの仕様とか読んでないけど
処理系によってはdeleteとdelete[]が等価だったりするし



84 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 01:12:31 ]
PCモニタをオフにするようなコードって,どうやって書けば良いんでしょうか?
下のフリーソフト,アセンブラで見たらWindowsAPIのKernel32.Sleep呼んでるみたいですけど・・・

ttp://hp.vector.co.jp/authors/VA036558/app/dispoff.zip

85 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 03:01:07 ]
>>83
うん。未定義。

86 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 09:12:35 ]
>>84
うろ覚えだが
PostMessage(HWND_BROAD_CAST, WM_COMMAND, MONITOR_OFF)みたいな感じで。

87 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 12:26:14 ]
>>86
ありがとうございます!やってみます。

88 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 12:32:13 ]
>>86
SendMessageで出来ました。引数はもろにそんな感じでした。
Sleepは一休みしてから電源オフに持ってくためだったんですね。。。

あと,モニタ電源オフの状態からオンに復帰するときに,
マウスの移動は無視して,
マウスのクリックやキーを押すときのみに反応するコードはどんな風に書けばいいんでしょうか?
誰かやさしい人おしえてください。

89 名前:86 mailto:sage [2008/08/22(金) 20:34:20 ]
>>88
ちょうどそんなフリーソフトを作った。(でもしばらく公開予定はない。)
自分は以下のような方法を使ってる。

・モニタをオフに
・グローバルフックでマウスの操作を監視
・マウスの移動を検地した場合はモニタをオフにする

90 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 22:35:59 ]
>>89
一体いつモニタをオンにするんだ?

91 名前:86 mailto:sage [2008/08/23(土) 00:05:54 ]
>>90
プログラムでオンにする必要はない。マウスのボタン押下やキー押下で勝手にオンになるから。

92 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 11:31:45 ]
int main()
{
unsigned char *s; // 文字列用ポインタ用意

s = "Test";

・・・・
・・・
・・

このようなプログラムがあるのですが、二つほど質問があります。
unsignedでchar型を宣言すると、何かいいことがあるのでしょうか?
また、参考本には載っていなかったのですがこのような文字列の
代入方法は正しいのでしょうか?文字配列を用意して、strcpyで代入するとしか載ってなかったので…

93 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 13:19:11 ]
>>91
>・マウスの移動を検地した場合はモニタをオフにする
オンではなくてオフ?



94 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 13:29:57 ]
>>93
>90、>91

>>92
sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。
# つまり、s = "Test"の後でs[0] = 't'とはしてはいけない。
尚、charをunsignedで宣言しておくと、標準関数を呼ぶたびに(厳密には)キャストが必要になるので巧くない。
その代わり、2バイト文字などを扱うときに多少扱いやすくなる。

95 名前:86 mailto:sage [2008/08/23(土) 15:17:23 ]
>>93
>>88
>>あと,モニタ電源オフの状態からオンに復帰するときに,
>>マウスの移動は無視して,

マウスの移動があるとオンになっちゃうからオフにする。

96 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:42:47 ]
>>92
実質的な違いはない。後の処理の関係でどっちにするか選ぶとかその程度。

>>94
>sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。
ちがうよね?

97 名前:96 mailto:sage [2008/08/23(土) 19:44:58 ]
>>92
さっきのは「unsignedでchar型を...」のみの回答でした。

>このような文字列の代入方法は正しいのでしょうか?
正しいです。

98 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:52:38 ]
正しいし便利なのでオススメ

99 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 23:12:12 ]
>>89
モニターの電源切っておけばいいんじゃね?

100 名前:86 mailto:sage [2008/08/24(日) 11:33:50 ]
>>99
マウス・キーボード操作でONにならない状態にするってことだよね。
調べた範囲では無理そうだった。
もしかしたら低レベルな方法であるのかも知れないけど。

それにこの場合マウスの移動だけ無視したいので、
マウス操作の監視は必須で、手間は変わらないと思う。

101 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 20:41:41 ]
一時的にマウスのドライバを無効にしとくのはどう?
クリックも無視していい状況だよね?

102 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:02:48 ]
難しそうだお

103 名前:86 mailto:sage [2008/08/24(日) 21:24:58 ]
>>101
>>88
クリックは無視しちゃだめ



104 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 22:19:27 ]
そうか、マウスのクリックでもモニタの電源ONになるのか
知らなかった

105 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 22:32:36 ]
>>95
>マウスの移動があるとオンになっちゃうからオフにする。
な〜るほどね!うまい。


106 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 01:15:51 ]
俺はCoolMonitorOffってソフトを使ってて>>86はその作者かと思ったんだけど、
>>89で(でもしばらく公開予定はない。) とあるから別人か。

Pauseキーに割り当てて愛用してるよ。作者さんありがとーね。見てないだろうけど。

107 名前:86 mailto:sage [2008/08/25(月) 18:57:42 ]
>>106
うん。別人。CoolMonitorOffは知らなかったんだけど似てるな。
コマンドライン引数でモニタオフにするまでの時間の指定やWindowsのロック、
マウス移動での復帰有無などを指定できるようにしてる。

公開して色んな人に使ってもらいたいんだけど、
やり方知らないのと、面倒そうなんでやってないんだよね。
そのうち自分のホームページ作って公開しようかなと考え中。

欲しかったらよかったらあげるよ。ソースもつけて。

108 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:28:21 ]
>>107
ソース見てみたいです。ください。

109 名前:86 mailto:sage [2008/08/26(火) 10:31:42 ]
>>108

アップしました。

ttp://a-draw.com/uploader/upload.html
ミニアップローダ(〜20MB)の up4006.zip
pass:dispoff

110 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 23:49:05 ]
>>109
ありがとう。
「アプリケーションが初期化できませんでした。エラー0xc015002〜」
とでるんですが,原因はなんでしょうか。

111 名前:86 mailto:sage [2008/08/27(水) 20:22:16 ]
>>110
dllとexeでリンクするランタイムのタイプが違ってた。これかな。なぜか自分の環境では動くけど。

修正して再アップしました。

ttp://www.hsjp.net/upload/index.html
up38638.zip
パスワード:なし

112 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:04:33 ]
>>111
な〜るほどね!ソースみて納得。勉強になりました。ありがとう。

113 名前:デフォルトの名無しさん [2008/09/02(火) 21:57:31 ]
Windows用USBデバイスのインストーラ及びアンインストーラをVCで
作ってます。
汎用性を持たせるためにinf及びdelファイルを書き換えるだけで
インストーラ、アンインストーラは再コンパイル不要とした作りに
したいと思っています。
そこで、特定のINFファイルから"USB\VID_xxxx&PID_xxxx"を
抜き出して行うような方式としたいとおもうのですがなにか
方法(Win32 API)は無いでしょうか。




114 名前:113 [2008/09/02(火) 22:28:12 ]
デバドラ板で質問してみます。

115 名前:デフォルトの名無しさん [2008/09/06(土) 22:55:49 ]
C#がWindowsプログラミングし易いのはわかっているけど、
もうC++にどっぷり浸かっているから。

Javaは演算子のオーバーロードがないから、複素数計算では
致命的だし。

でも、C++0xでまた仕様が大幅にかわるのかな。もういいかげ
んにしてほしいな。

116 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:13:09 ]
C++のことだし、建前としては今までのプログラムも
そのままコンパイルできるってことになっているはず。

117 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:17:27 ]
std::string name = "unko";
std::cout << "name = " << name << std::endl;

error C2679: 二項演算子 '<<' : 型 'std::string' の右オペランドを扱う演算子が見つかりません (または変換できません)。

コンパイルできません。なにこれ。

118 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:18:58 ]
>>115
仕様が大きく変わった場合、書き直しを辞さないほどのよっぽど有益なメリットが無い限り普及なんてしない。安心して良し。


119 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:22:55 ]
>>117
1行目を読んで、続きを読む気力が失せた

120 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:27:56 ]
>>117
#include <string> 抜けてない?

121 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:32:05 ]
>>120
書いてないですが、std::string はコンパイルエラーになってないので大丈夫です。

122 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:35:42 ]
>>121
「書いてないですが」とかそういう問題じゃない。書け。

123 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:37:27 ]
>>121
現に<<でエラーになっているじゃないか。全然大丈夫じゃないだろ。



124 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:43:05 ]
あまりいじめないでsください

125 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:55:34 ]
つ[s]

126 名前:デフォルトの名無しさん [2008/09/07(日) 07:55:24 ]
C++はまったく糞だな

127 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 10:13:52 ]
おまえがな

128 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:15:09 ]
char c[ 12 ]; // ok

const int dim = 12;
char c[ dim ]; // ok

int x = 12;
const int y = x;
char c[ y ]; // error !

「配列の要素数はコンパイル時に決められていなければならない」
っていうのの意味がわからん・・・ ・_・

129 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:29:05 ]
>>128
コンパイラの気持ちになって出力するアセンブリコードを考えないと、確かにわかんないだろうねぇ。
そういう制約が嫌なら std::vector を使っておけばいいよ。

130 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:06:26 ]
newって中でなにやってるの?
APIでメモリ確保してコンストラクタ呼んでるだけ?

131 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:08:23 ]
>>130
そう思って差し支えない。もっと詳しく知りたければアセンブリの出力を見れ。

132 名前:デフォルトの名無しさん [2008/09/08(月) 15:04:21 ]
ググるのにも限界感じたので、教えてください。
BCB 6.0 Personal でTWAIN.DLLを読んで、画像をスキャンするものを作っています。
OSはWindows XPです。

画像をスキャンしてImageコンポーネントに貼り付けるところまで書いたのですが、
Imageに表示される画像が縦に2分割されて、左右反対になってしまうので困って
います。何か考えられる原因はないでしょうか?

TWAINにアクセスする部分はVectorでダウンロードしたフリーのVC++向けライブラリ
を使っていて自作ではないのですが、TWAIN本家サイトの説明書と比べて、取り立
てて変わったことをしてるとは思えません。Imageに貼り付けるのは下のようにしてい
ます。

HANDLE dib;
mTwainManager.Scan(Handle,&dib); //フリーのライブラリに
if ( dib == 0 ) return;
LPBITMAPINFO bmi = (LPBITMAPINFO)::GlobalLock(dib);

ImageScan->Picture->Bitmap->Height = bmi->bmiHeader.biHeight;
ImageScan->Picture->Bitmap->Width = bmi->bmiHeader.biWidth;
SetDIBits(
ImageScan->Picture->Bitmap->Canvas->Handle,
ImageScan->Picture->Bitmap->Handle, 0,
(UINT) bmi->bmiHeader.biHeight,
(Byte*)((Byte*)bmi + sizeof(BITMAPINFOHEADER)),
bmi, DIB_RGB_COLORS );

::GlobalUnlock( dib );
::GlobalFree( dib );



133 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:21:54 ]
あー、一つだけ言えることができる。
ANSI Cあたりまではなんとかなったんだが、C++3.0くらいになると
かなり複雑。あまり触りたくなかった。



134 名前:デフォルトの名無しさん [2008/09/09(火) 12:49:51 ]
>>132です。自己解決。
ハンドルとか初期化しまくったら、良く分からないけど直りました。
お騒がせしました。

135 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 19:35:07 ]
いままでソース分割してコンパイルでなんとも無かったんですが
template入れたとたんソース分割コンパイルが通らなくなってしまいました
分割したファイルをコピペでひとつにするとコンパイルできるのでコードが間違ってるわけではないと思います
templateを使うとソース分割できなくなる仕様なんでしょうか?
コンパイラはBCCを使ってます


136 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 20:05:48 ]
d.hatena.ne.jp/shizu9/20080726/1217092697
ここでも読んでみ

137 名前:デフォルトの名無しさん [2008/09/15(月) 15:29:33 ]
500000までの素数を判定して、出力するプログラムを作っているのですが、実行するとカーソルが点滅したまま止まってしまいます。
どのようにすればよろしいでしょうか。よろしくお願いします。
#include<stdio.h>

long i=0,j=0,primecounter=0,chk_prime[500000],x=0,y=0;

int main (void)
{

for(i = 2;i < 500000;i++){
for(j = 1;j < i;j++){
if(i % j == 0){
primecounter++;
}
if(primecounter == 2){
printf("%ld",chk_prime[x]);
chk_prime[x] = i;
x++;
primecounter = 0;
}
else{
primecounter = 0;
}
}
}

for(y = 0;y <= x;y++){
printf("%ld",chk_prime[y]);
}
return 0;
}


138 名前:137 [2008/09/15(月) 15:39:38 ]
すみません。環境を書き忘れてました。
環境は
OS Mac OS X 10.5.4
コンパイラ GCC4.2
です。
すみませんでした。

139 名前:デフォルトの名無しさん [2008/09/15(月) 16:05:26 ]
C++オセロ完成したよー\(^o^)/
www8.uploader.jp/user/vipprog/images/vipprog_uljp00538.txt
www8.uploader.jp/dl/vipprog/vipprog_uljp00539.zip.html

後はあれだ、COMの頭脳を書いていくだけだ・・・。
みんなでCOMクラスのselectメソッドを書き換えて勝負させようぜ!!

140 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 16:07:16 ]
C言語で素晴らしいオセロを作らないか?
pc11.2ch.net/test/read.cgi/tech/1087979678/
こっちでもないか

141 名前:デフォルトの名無しさん [2008/09/15(月) 16:07:17 ]
>>139
zipの方にはソースとexeファイルが入ってる。
exeファイルの方は、>>139にテキストでうpしたソースの最後に
system("pause");を足したものをコンパイルしただけ。
心配なら自分でコンパイルしてね!!

142 名前:デフォルトの名無しさん [2008/09/15(月) 16:10:00 ]
>>140
俺はこのスレで4日前くらいからC++でオセロを作ってるんだ・・・(´・ω・`)
ム板なんて!!ム板なんて・・・!!時々行くけどね。

C++の勉強がしたいだけだからそのスレには用はないかな・・・。
オセロのアルゴリズムを考えるには参考になりそうだけどね。

143 名前:デフォルトの名無しさん [2008/09/15(月) 16:10:50 ]
ごめん、激しく板違いでしたwwww
恥ずかしい誤爆したぜ!!ww

VIPに帰ります。。。



144 名前:デフォルトの名無しさん [2008/09/15(月) 16:18:07 ]
次はWindows GUIに挑戦だ

145 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 16:26:16 ]
>>137
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7726.c
見るの面倒だったので、てきとうに作ってみた。
無駄が多いけどね。

146 名前:デフォルトの名無しさん [2008/09/15(月) 16:30:52 ]
char prime[500000]; を1で初期化して、

n=2 → √500000と動かして
prime[n]==1ならば、nの倍数の配列すべてに0を入れる

するとprimeが1のもの

147 名前:デフォルトの名無しさん [2008/09/15(月) 16:32:29 ]
エラトステネスのふるい
でググれ

148 名前:デフォルトの名無しさん [2008/09/15(月) 16:42:35 ]
コンピュータの対戦できるソフト

BearRev Professional Edition
www.vector.co.jp/magazine/spotlight/010531/sl01053111.html

149 名前:デフォルトの名無しさん [2008/09/15(月) 16:43:45 ]
まぁついでなので>>139のソースに関して何かコメントあれば下さい。
C++まだ初めて4日目(多分)なので、オブジェクト指向的なプログラミングになれてません。
ここはこうした方がいいぜ!!ってのあればよろしくお願いします。

>>144
もちろんそのつもりだよん

150 名前:デフォルトの名無しさん [2008/09/15(月) 16:46:31 ]
動けばいい 動かなかったら何言語使っていてもだめ

151 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 16:51:58 ]
>>137
ループの終了条件
{}の位置
ついでにprintの位置


152 名前:137 [2008/09/15(月) 17:02:14 ]
>>145
ありがとうございます
参考になります
>>146
ありがとうございます。
チェックしてみます。

>>147
ありがとうございます。
その方法でも試してみたいと思います。

>>151
具体的な指摘ありがとうございます。
終了条件がどのように間違っているか指摘していただきたいのですが、よろしければお願いします。

153 名前:デフォルトの名無しさん [2008/09/15(月) 17:11:17 ]
>>137
デバッガ



154 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 19:12:51 ]
>>152

for(j = 1;j < i;j++){
if(i % j == 0){
primecounter++;
}

1とそれ自身で割れるかどうかをチェックしてるのにj < iだと自身で割ることなく終了する
j <= iに変えれば自分で割ったときもチェックできる

155 名前:トミー ◆xb8eIST5.k [2008/09/15(月) 21:51:15 ]
初めまして。質問させていただきます。
C言語を始めようと思い、いろいろなページを見てみたら、ほとんどにおいて
「まずコンパイラをダウンロードしましょう」と書いてあり、中でも例として
Borland C++ 5.5がよく書いてあったので、これをダウンロードしてみようと
思いました。
www.codegear.com/jp/downloads/free/cppbuilderで「C++ Compiler
5.5/Turbo Debugger」をクリックし、個人情報も登録しましたが、最後に出てき
たダウンロードボタンを押してみると、「サーバーが見つかりません」と出てしま
いました。
見ると、「上記のダウンロードサイトにアクセスできないときは、CodeCentral の
ダウンロードページをお試しください。CodeCentralのダウンロードページを利用
するには、CDNへのログインが必要です。」と書いてあるので、「CDNへのログイン」
の文字をクリックしてみましたが、英語のページで、Login nameやpasswordを入力
する欄が出てきました。(日本語のページもあるようです。)
わたしはCDNには会員登録していません。CDNに登録しないと、C++ Compiler 5.5/
Turbo Debuggerをダウンロードすることはできないのでしょうか。

回答お願いします。

156 名前:デフォルトの名無しさん [2008/09/15(月) 22:02:22 ]
以下のコードでコンパイルエラー(C2440)が出るのですが、何が間違っているのでしょうか?
環境は、VC++6.0です。

class CBase
{
public:
CBase& operator=(int val) {}
};

class CDerived : public CBase {};

int main()
{
CDerived val = 1; // この行で、コンパイルエラー
return 0;
}

エラーメッセージは、
C2440: 'initializing' : 'const int'から'class CDerived'に変換すrことはできません。
 コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。

157 名前:137 [2008/09/15(月) 23:29:29 ]
>>154
ありがとうございます
肝心なところですね

カーソルが点滅したまま終了しないですが、、
何度も申し訳ございませんが、何が問題か分かる方お願いします。

158 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:33:54 ]
>>156
operator =はCDerivedで定義される暗黙のやつがCBaseのを隠してしまう。
だから、CDerivedで定義し直すなどしないといけない。

もっとも、CDerived val = 1で行われるのは代入ではなく初期化なので、
そういうことをやりたければ、CDerivedにint型の引数を取るコンストラクタを作る必要がある。

159 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:59:55 ]
>>137,157
回している回数じゃないかな
Sigma[i=1...499998]i = 499998*(1+499998)/2 = 124999250001
待っていればいつか終わると思うよ

160 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 00:05:22 ]
>>157
{}の位置が悪い
自分より小さい数で割るたんびにcountを0に戻してる
自分より小さい数で全部割りおわってからcountが2であるかどうか調べないと


161 名前:156 mailto:sage [2008/09/16(火) 00:21:21 ]
>>158
なるほど、そういうことか。
確かに、operator=を定義していなくても、オブジェクトの代入とか出来ますからね。
あれは暗黙で定義されているからってことか。一つ賢くなりました。
ありがとうございます。

162 名前:137 [2008/09/16(火) 01:03:17 ]
>>159
ありがとうございます。
デバッガで見てみると回ってはいるようなので、しばらく待ってみることにします。

>>160
基本的なアルゴリズムが間違っていたのですね、、
ありがとうございます!

163 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:09:12 ]
引数にリファレンスを渡すとオーバーヘッドが小さくなるんですか?




164 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:42:16 ]
値のサイズがリファレンス(=ポインタ)のサイズに比べてかなり大きければなる

165 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:05:01 ]
 今勉強のために文字列クラスを自作しています。
それでoperator+=で文字列の代入結合まではなんとかできたのですが、
operator+の定義がうまくできません。

CString a, b, c;
a = "abc";
b = "def";
c = a + b; //"abcdef"にならない

デバッガで確認したところ、
CString CString::operator+(CString& str)
{
CString temp(*this);
temp += str; //ここまではうまくいっている。
return temp; //ここでデストラクタが呼び出されて、正しい結果を返せない。
}

一応デストラクタはこんな感じです。
CString::~CString()
{
if(ptr) delete[] ptr;
}

tempをstatic宣言したら、結合はうまくいったのですが、プログラム終了時に例外が出るようになってしまいました。
どうすればうまくいくのかどなたか教えて下さい。


166 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:14:22 ]
>>165
コピーコンストラクタとoperator=作ってる?

167 名前:デフォルトの名無しさん [2008/10/04(土) 23:16:07 ]
いろいろと辺

168 名前:165 mailto:sage [2008/10/05(日) 08:09:11 ]
>>166
operator=は作っていたのですが、コピーコンストラクタは作っていませんでした。
(operator= を定義しておけば必要ないと思っていたもので・・・)
コピーコンストラクタを作ったところ、うまく動作するようになりました。
どうもありがとうございました。

169 名前:デフォルトの名無しさん [2008/10/05(日) 08:46:10 ]
CString::operator+で、足し算定義しているのに、なんでその関数内部で
足し算が出来るんだよ? コンパイル通るのかよ

170 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:41:38 ]
+ と += は別物だよ

171 名前:デフォルトの名無しさん [2008/10/05(日) 11:27:46 ]
べつなのはわかっている ここはなぜいいんだよ

temp += str; //ここまではうまくいっている。

172 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:38:20 ]
// 実は勘違い

173 名前:デフォルトの名無しさん [2008/10/05(日) 11:40:14 ]
すまん間違えた



174 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:08:04 ]
単純な事質問するんだけど

型の宣言って複数の関数をまたいでするって出来ないのかな?
うまく説明出来ないんで悪いんだけど
例えば
read.cpp
global.h
test.cpp
の3つがあった場合。

read.cpp内でint型を宣言するとread.cppで宣言した型を使った関数を作る(ここで代入)。
次にglobal.h内でread.cppで作った関数をextern void 何々();とする。
そして、test.cppでglobal.hをインクルードして、test.cpp内でread.cppで作った関数内で代入されたint型を読み込ませたい。

記述は間違ってないと思うんだけど、ビルドするとtest.cppで読み込んだはずの代入されたint型が読み込まれてなくて、定義されてないと出る

・・・初歩的な事で悪いんだけど、根本が違うのかな?ご教授お願いします。

175 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:11:48 ]
>>174
「int型を宣言」とか「int型を読み込む」とか、かなり奇怪な話になっててよくわからん。
どうせ単純なミスかなんかだろ。実際のコード晒してみるのがいいよ。






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

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

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