C/C++小心者スレッドPart1
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2007/08/05(日) 06:18:18関連スレやURLは>>2以降。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す
・FAQを読む 例えば http://www.bohyoh.com/CandCPP/FAQ/index.html
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、コンパイラ名)
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって小心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
宗教的な話題は禁止します。
0002デフォルトの名無しさん
2007/08/05(日) 07:14:37/__.))ノヽ
.|ミ.l _ ._ i.)
(^'ミ/.´・ .〈・ リ このスレはわしが育てる
.しi r、_) |
| `ニニ' /
ノ `ー―i´
0003デフォルトの名無しさん
2007/08/05(日) 20:58:500004デフォルトの名無しさん
2007/08/05(日) 22:20:30スレを勃てるまでもないC/C++の質問はここで 2
http://pc11.2ch.net/test/read.cgi/tech/1178503366/l50
0005デフォルトの名無しさん
2007/08/11(土) 16:46:20と
#include <string>
と
#include <string.h>
の違いを教えてください
0006デフォルトの名無しさん
2007/08/11(土) 17:01:51cstringというファイルをincludeする
#include<string>
stringといf(ry
それぞれのファイルの中見てみればきっといい勉強になるに違いない。
0007デフォルトの名無しさん
2007/08/11(土) 17:52:10<cstring>は、Cの<string.h>相当のヘッダで、
中の宣言はstd名前空間に入っている。
<string>は、basic_string<>のヘッダ。
<string.h>は、内部で<cstring>をインクルードしており、
個々の識別子に対して大域名前空間上でusing std::strcpy;などのように
using宣言がなされていることになっている。
実際には、<cstring>が<string.h>をインクルードして、
std名前空間上でusing宣言を書いている実装がほとんど。
0008デフォルトの名無しさん
2007/08/26(日) 14:20:200009デフォルトの名無しさん
2007/08/26(日) 14:24:28rdbufメンバ関数でそのストリームに関連付けられたバッファが得られる。
その中のメンバにそれっぽいものがあるはず。
0010デフォルトの名無しさん
2007/08/27(月) 16:00:38i = (char*)malloc(sizeof(char) * 256);
でメモリ領域を確保したのですが、256バイト以上使用することができます。
なぜでしょうか?教えてください。
0011デフォルトの名無しさん
2007/08/27(月) 16:05:01std::streambuf::pubsetbuf()がお望みのものだが、
実装によってはopen済みのストリームに対して実行しても無視されるので注意
0012デフォルトの名無しさん
2007/08/27(月) 16:08:030013デフォルトの名無しさん
2007/08/27(月) 16:12:170014デフォルトの名無しさん
2007/08/27(月) 21:42:16memcpy(0x00,1,1)
これでいい
0015デフォルトの名無しさん
2007/08/27(月) 22:16:240016デフォルトの名無しさん
2007/08/28(火) 07:38:45OutOfRange を誰も発行しないから。
0017デフォルトの名無しさん
2007/08/29(水) 03:39:55拡張子がたくさんあるみたいですけど
どれが一番メジャーで、どれを使用するべきですか?
0018デフォルトの名無しさん
2007/08/29(水) 03:45:310019デフォルトの名無しさん
2007/08/29(水) 10:32:50.c++
.cxx
.cpp
.cc
バリエーションはこれくらいかな。
0020デフォルトの名無しさん
2007/08/29(水) 11:35:05環境
XP
visual C++
for(t=0;t<T;t++){
pw=pow(exp,(1.0*t)/25.0);
printf("pw=%f\n",pw);
}
といった感じで計算結果を表示させていきたいのですが、実行結果が
pw=1.000000
pw=1.#INF00
pw=1.#INF00
pw=1.#INF00
と2番目から#INFというのが表示されてしまいます。計算結果を正しく出力させるにはどうしたらいいのでしょうか?
0021デフォルトの名無しさん
2007/08/29(水) 11:38:42pwに代入している行のカンマの位置が怪しいけど、要はオーバフローしているんだろ。
それから、"%f"ではなく"%g"推奨。
0022デフォルトの名無しさん
2007/08/29(水) 11:39:45002320
2007/08/29(水) 12:03:41ありがとうございます。
expは下記のように定義し、2.71828としています。
#include <stdio.h>
#include <math.h>
#define T 30
#define exp 2.71828
void main(){
int t=0;
float pw;
0024デフォルトの名無しさん
2007/08/29(水) 12:27:45こんな具合にきちんと出力されていくぞ。
pw=1.000000
pw=1.040811
pw=1.083287
ところで、1.0をかけるのは意味がない。やるならせめてdoubleへのキャストにしろ。
float使うなdoubleにしろ。
eの累乗ならexp関数にしろ、こっちのほうが精度も速度もいい。
002520
2007/08/29(水) 12:50:12レスありがとうございます。
exp関数を用いたところ
error C2064: 1 引数を取り込む関数には評価されません。
とエラーが出てしまいます。
他の部分がおかしいのでしょうか・・・。
fpout=fopen("outputvoltage.txt","w");
p1=vout;
for(t=0;t<=T;t++){
if(0<=t&&t<=t1){
pw=exp(t/25.0);
inver=1.0/pw;
vt=-1.0*vin*(1-inver);
printf("V=%g\n",pw);
*p1=vt;
++p1;
fprintf(fpout,"output voltage = %g\n",vout);
}
として、累乗計算の時点で前述のような計算結果になってしまい質問した次第です。
0026デフォルトの名無しさん
2007/08/30(木) 00:20:56「C2064」でググれ…と言いたいトコだが。
「exp」っていう名前の変数使ってないか?
こういうのはアウトだぞ
int printf = 0;
printf("Hello world!"); // C2064 error
解決するには
1:関数名にスコープ解決演算子をつける
int printf = 0;
::printf("Hello world!"); // ok
2:変数名を変える
int count = 0;
printf("Hello world!"); // ok
関数名と同じ変数名を使うとロクな事が無い。留意の事。
0027デフォルトの名無しさん
2007/08/30(木) 00:34:01そのままにしているだけだろう。
0028デフォルトの名無しさん
2007/09/07(金) 15:06:58hogeのn番目の文字を取り出してcharに入れたいんですが
どうすれば出来ますか?
0029デフォルトの名無しさん
2007/09/07(金) 15:13:430030デフォルトの名無しさん
2007/09/29(土) 08:13:39うまくいきました。本当にありがとうございました。
0031デフォルトの名無しさん
2007/10/02(火) 21:49:320032デフォルトの名無しさん
2007/10/02(火) 22:01:020033デフォルトの名無しさん
2007/10/02(火) 23:23:200034デフォルトの名無しさん
2008/01/16(水) 23:54:590035デフォルトの名無しさん
2008/02/19(火) 11:59:220036デフォルトの名無しさん
2008/02/19(火) 12:05:46じゃ駄目かい
0037デフォルトの名無しさん
2008/02/21(木) 20:09:38processing
って表示して
processing.
processing..
processing...
みたいに一文字ずつ書き足していきたいんだけどまじめにどうしたらいい?
cout<<"."とかputchar('.')で実行すると、改行がくるまでターミナルに表示されなくて困ってます。
0038デフォルトの名無しさん
2008/02/21(木) 20:16:230039デフォルトの名無しさん
2008/02/21(木) 20:17:390040デフォルトの名無しさん
2008/02/23(土) 02:43:53>>39
エラー出力とバッファリングのメンバー変数(?)ですよね。
勉強になりました。�dクス
0041デフォルトの名無しさん
2008/03/29(土) 13:33:030042デフォルトの名無しさん
2008/03/29(土) 15:49:32cの標準ライブラリ(strcatとかstrcpy)が宣言されている
前者は大域名前空間になる
stringはC++の文字列ライブラリで<string>に宣言されている
CStringはまた別のライブラリ
で、だいたいあってると思うw 確認してないが
それぞれの使い方は調べれ
0043デフォルトの名無しさん
2008/04/29(火) 19:07:22独自にテーブルを持っているのでしょうか?
それともOSから取得できるのでしょうか?
0044デフォルトの名無しさん
2008/04/30(水) 00:46:51<やりたいこと>PC(WinXP pro)の特定ソフトを特定のIPアドレスにアクセスさせたくない。
<前提条件>ルーターではなにもしてはいけない(ソフトで解決すること)
<調べたこと>IPHLPAPIでルーティングテーブルをいじって対応? ルーティングテーブルのゲートウェイをありえないところにする?
これだとすべてのソフトでIPアドレスにアクセスできなくなるが、、、。
上記、ヒントなりをいただければと思います。
0045デフォルトの名無しさん
2008/04/30(水) 00:58:42・まともなセキュリティソフトをインストールして個別設定でそのアプリの動作を制御する。
・そのアプリを改修する。
・諦める。
0046デフォルトの名無しさん
2008/04/30(水) 01:07:24早速の返信ありがとうございます。
>・まともなセキュリティソフトをインストールして個別設定でそのアプリの動作を制御する。
セキュリティソフトについてはすでに導入しているのですが、
設定しても恐らく、"その設定自体をユーザーが変えてしまう"ことが予想されます。
>・そのアプリを改修する。
現状問題となっているアプリケーションは、P2Pソフトだったり、ゲームだったりと多岐にわたります。
(説明不足で申し訳ありません)
>・諦める。
orz
0047デフォルトの名無しさん
2008/04/30(水) 01:14:52お前の作るソフトウェアも同じだろ。
設定を変えられないとしても、強制終了されればおしまい。
ただ、ユーザが管理者 (Administrators)でないと仮定できるなら、
どのソフトでも結構いける。その手のソフトは
たいてい管理者しか設定をいじれないようにできるはずだから。
サービスなんかにしてしまえばただのユーザは終了させることもできない。
0048デフォルトの名無しさん
2008/04/30(水) 01:44:48返信ありがとうございます。
>お前の作るソフトウェアも同じだろ。
おっしゃる通りです、、、orz
>ただ、ユーザが管理者 (Administrators)でないと仮定できるなら、
ユーザーはAdminです、、、orz
すでにこの段階で問題なのかも知れません。
もう少しなにかいい方法がないか思案してみます、、、。
0049デフォルトの名無しさん
2008/04/30(水) 03:53:28最近は、ログ解析だけを定期的に行なうなんてことをするコンサルもあることだし。
0050デフォルトの名無しさん
2008/04/30(水) 14:25:35返信ありがとうございます。
コンサル入れたりするのも1つかもしれません。
検討してみます。
現状、IPHLPAPIを使用して
GetTcpTableを使い、定期的に監視して、
あらかじめ用意したブラックリストと照らし合わせ、SetTcpTableでアクセスできないようにすることをやってみます。
(サービス用アプリとして作成して様子をみます)
0051デフォルトの名無しさん
2008/05/03(土) 13:36:21using namespace std;
を使うにはどうしたら良いのでしょうか。
stdafx.hに書くと「C2871: 'std' : この名前を指定された名前空間は存在しません。」と怒られます。
ソールファイルに
std::cout << "orz" << endl;
などど書いても「C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。」と怒られます。
空のプロジェクトで一から書くと出来るようですが、Unicodeアプリにならないので困っています。
0052デフォルトの名無しさん
2008/05/03(土) 13:49:42標準C++ライブラリをなにかインクルードしてるか?
005351
2008/05/03(土) 14:50:25初歩過ぎる質問に答えていただき本当にありがとうございました。
#include <iostream>
using namespace std;
0054デフォルトの名無しさん
2008/07/13(日) 19:48:300055デフォルトの名無しさん
2008/07/13(日) 19:59:03ひらめきが大事だね。
0056デフォルトの名無しさん
2008/08/05(火) 15:26:30例としては無効な引数、〜が見つからない、致命的なエラーなどです。
クラス毎に static const 〜 としてもいいのですが、同じ値に保つのが面倒になりそうだし、、、
専用のクラスを作り下記のようにしようかと考えたのですが、スマートではない気がしています。
皆さんはどうされていますか? よろしくお願いします。
class CResultCode {
static const int s_success = 1;
static const int s_falal_error = -1;
static const int s_invalid_param = -2;
static const int s_file_not_found = -10;
static bool IsSuccessful(int in_result) { return in_result > 0; };
};
class CHoge {
int Hoge(){ return CResultCode::s_successed; };
};
void main() {
CHoge hoge;
int res = hoge->Hoge();
if ( !CResultCode::IsSuccessful(res)){
エラー処理
}
}
0057デフォルトの名無しさん
2008/08/05(火) 15:52:09extern PGDLLIMPORT double seq_page_cost;;
を含むヘッダーファイルがあり,PGDLLIMPORTはべつのヘッダーで
#define PGDLLIMPORT __declspec (dllexport)
と定義されてます
これをcostsize.cというファイルにインクルードしてるんですが.
extern PGDLLIMPORT double seq_page_cost;;
ってどういう意味なのかわかりません
どういう意味を持つのか教えてください.
お願いします.
ちなみに __declspec (dllexport)で調べてもようわかりませんでした
0058デフォルトの名無しさん
2008/08/05(火) 18:19:110059デフォルトの名無しさん
2008/08/05(火) 18:21:13> ちなみに __declspec (dllexport)で調べてもようわかりませんでした
↓このサイトがおすすめ。
http://www.google.co.jp/search?q=declspec+dllexport
0060デフォルトの名無しさん
2008/08/05(火) 18:39:280061デフォルトの名無しさん
2008/08/05(火) 18:45:50それ以上の説明がここでできるとは思わない。
006256
2008/08/05(火) 19:11:19ありがとうございます。 度々すいませんが、その場合は専用のnamespaceを設けてという事でしょうか?
それともヘッダ1つ増やして個々にインクルードするだけで良いのですか?
となると、成否判定に#defineマクロを使いたくなってしまうのですが許されるのでしょうか。。。
「C++ならdefine使うな」って怒られたりしませんか…? よろしくお願いします。
0063デフォルトの名無しさん
2008/08/05(火) 21:20:07レスどうも
すでに試してまして・・・
で,いかんせん,どこの何というDLLから何を
エクスポートしてるのか,てんでわからんのです
0064デフォルトの名無しさん
2008/08/05(火) 21:22:11ResultCodeクラスを作るなら、戻り値を整数型にしないでResultCode型にしちゃえばいいじゃん。
で、適当なキャストオペレータを用意しておけば成否判定に使えるし。
0065デフォルトの名無しさん
2008/08/05(火) 21:23:14>57と>63で質問していることが全然違うわけだが。
0066デフォルトの名無しさん
2008/08/05(火) 21:32:06自分初心者なもので
質問に一貫性が無いのは,すいません
なんというか両方答えて頂ければと思うんですが…
0067デフォルトの名無しさん
2008/08/05(火) 21:48:21>どういう意味を持つのか教えてください.
どこぞの何とかいうDLLから何ぞやをエクスポート
>>63
>で,いかんせん,どこの何というDLLから何を
>エクスポートしてるのか,てんでわからんのです
costsize.cで作られるDLLからseq_page_costを
006856,62
2008/08/05(火) 23:44:56ありがとうございます。そうしていこうと思います。
値渡しで返して嫌がられたりする事はあるのでしょうか? ← ここが一番心配なのです。
最適化すれば一時オブジェクトは作られないのかなあ…
0069デフォルトの名無しさん
2008/08/05(火) 23:51:25そんなもん値渡ししたって参照よりもコンパクトなくらいだ。
0071デフォルトの名無しさん
2008/08/18(月) 08:29:05の時
delete [] p;
delete p;
って使い分けないといけないの?
0072デフォルトの名無しさん
2008/08/18(月) 08:39:40new[] の場合は delete[]
使い分けないといけない
0073デフォルトの名無しさん
2008/08/18(月) 08:45:23さんくす
0074デフォルトの名無しさん
2008/08/18(月) 13:19:15だと1個目しか消せない。
0075デフォルトの名無しさん
2008/08/18(月) 13:22:42そう書き間違えた場合の、文法チェックとか、メモリリーク調査とか、可能?
0076デフォルトの名無しさん
2008/08/18(月) 13:25:37ダウト
処理系によってはコア吐くぞ
0077デフォルトの名無しさん
2008/08/20(水) 08:54:580078デフォルトの名無しさん
2008/08/20(水) 08:56:180079デフォルトの名無しさん
2008/08/20(水) 09:57:390080デフォルトの名無しさん
2008/08/20(水) 10:38:500081デフォルトの名無しさん
2008/08/20(水) 10:48:53Win32のプロジェクトならできる。
0082デフォルトの名無しさん
2008/08/20(水) 11:53:100083デフォルトの名無しさん
2008/08/20(水) 13:17:31未定義じゃない?ANSIの仕様とか読んでないけど
処理系によってはdeleteとdelete[]が等価だったりするし
0084デフォルトの名無しさん
2008/08/21(木) 01:12:31下のフリーソフト,アセンブラで見たらWindowsAPIのKernel32.Sleep呼んでるみたいですけど・・・
ttp://hp.vector.co.jp/authors/VA036558/app/dispoff.zip
0085デフォルトの名無しさん
2008/08/21(木) 03:01:07うん。未定義。
0086デフォルトの名無しさん
2008/08/21(木) 09:12:35うろ覚えだが
PostMessage(HWND_BROAD_CAST, WM_COMMAND, MONITOR_OFF)みたいな感じで。
0087デフォルトの名無しさん
2008/08/21(木) 12:26:14ありがとうございます!やってみます。
0088デフォルトの名無しさん
2008/08/22(金) 12:32:13SendMessageで出来ました。引数はもろにそんな感じでした。
Sleepは一休みしてから電源オフに持ってくためだったんですね。。。
あと,モニタ電源オフの状態からオンに復帰するときに,
マウスの移動は無視して,
マウスのクリックやキーを押すときのみに反応するコードはどんな風に書けばいいんでしょうか?
誰かやさしい人おしえてください。
008986
2008/08/22(金) 20:34:20ちょうどそんなフリーソフトを作った。(でもしばらく公開予定はない。)
自分は以下のような方法を使ってる。
・モニタをオフに
・グローバルフックでマウスの操作を監視
・マウスの移動を検地した場合はモニタをオフにする
0090デフォルトの名無しさん
2008/08/22(金) 22:35:59一体いつモニタをオンにするんだ?
0092デフォルトの名無しさん
2008/08/23(土) 11:31:45{
unsigned char *s; // 文字列用ポインタ用意
s = "Test";
・・・・
・・・
・・
このようなプログラムがあるのですが、二つほど質問があります。
unsignedでchar型を宣言すると、何かいいことがあるのでしょうか?
また、参考本には載っていなかったのですがこのような文字列の
代入方法は正しいのでしょうか?文字配列を用意して、strcpyで代入するとしか載ってなかったので…
0093デフォルトの名無しさん
2008/08/23(土) 13:19:11>・マウスの移動を検地した場合はモニタをオフにする
オンではなくてオフ?
0094デフォルトの名無しさん
2008/08/23(土) 13:29:57>90、>91
>>92
sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。
# つまり、s = "Test"の後でs[0] = 't'とはしてはいけない。
尚、charをunsignedで宣言しておくと、標準関数を呼ぶたびに(厳密には)キャストが必要になるので巧くない。
その代わり、2バイト文字などを扱うときに多少扱いやすくなる。
009586
2008/08/23(土) 15:17:23>>88
>>あと,モニタ電源オフの状態からオンに復帰するときに,
>>マウスの移動は無視して,
マウスの移動があるとオンになっちゃうからオフにする。
0096デフォルトの名無しさん
2008/08/23(土) 19:42:47実質的な違いはない。後の処理の関係でどっちにするか選ぶとかその程度。
>>94
>sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。
ちがうよね?
009796
2008/08/23(土) 19:44:58さっきのは「unsignedでchar型を...」のみの回答でした。
>このような文字列の代入方法は正しいのでしょうか?
正しいです。
0098デフォルトの名無しさん
2008/08/23(土) 19:52:380099デフォルトの名無しさん
2008/08/23(土) 23:12:12モニターの電源切っておけばいいんじゃね?
010086
2008/08/24(日) 11:33:50マウス・キーボード操作でONにならない状態にするってことだよね。
調べた範囲では無理そうだった。
もしかしたら低レベルな方法であるのかも知れないけど。
それにこの場合マウスの移動だけ無視したいので、
マウス操作の監視は必須で、手間は変わらないと思う。
0101デフォルトの名無しさん
2008/08/24(日) 20:41:41クリックも無視していい状況だよね?
0102デフォルトの名無しさん
2008/08/24(日) 21:02:480104デフォルトの名無しさん
2008/08/24(日) 22:19:27知らなかった
0105デフォルトの名無しさん
2008/08/24(日) 22:32:36>マウスの移動があるとオンになっちゃうからオフにする。
な〜るほどね!うまい。
0106デフォルトの名無しさん
2008/08/25(月) 01:15:51>>89で(でもしばらく公開予定はない。) とあるから別人か。
Pauseキーに割り当てて愛用してるよ。作者さんありがとーね。見てないだろうけど。
010786
2008/08/25(月) 18:57:42うん。別人。CoolMonitorOffは知らなかったんだけど似てるな。
コマンドライン引数でモニタオフにするまでの時間の指定やWindowsのロック、
マウス移動での復帰有無などを指定できるようにしてる。
公開して色んな人に使ってもらいたいんだけど、
やり方知らないのと、面倒そうなんでやってないんだよね。
そのうち自分のホームページ作って公開しようかなと考え中。
欲しかったらよかったらあげるよ。ソースもつけて。
0108デフォルトの名無しさん
2008/08/25(月) 21:28:21ソース見てみたいです。ください。
010986
2008/08/26(火) 10:31:42アップしました。
ttp://a-draw.com/uploader/upload.html
ミニアップローダ(〜20MB)の up4006.zip
pass:dispoff
0110デフォルトの名無しさん
2008/08/26(火) 23:49:05ありがとう。
「アプリケーションが初期化できませんでした。エラー0xc015002〜」
とでるんですが,原因はなんでしょうか。
011186
2008/08/27(水) 20:22:16dllとexeでリンクするランタイムのタイプが違ってた。これかな。なぜか自分の環境では動くけど。
修正して再アップしました。
ttp://www.hsjp.net/upload/index.html
up38638.zip
パスワード:なし
0112デフォルトの名無しさん
2008/08/28(木) 02:04:33な〜るほどね!ソースみて納得。勉強になりました。ありがとう。
0113デフォルトの名無しさん
2008/09/02(火) 21:57:31作ってます。
汎用性を持たせるためにinf及びdelファイルを書き換えるだけで
インストーラ、アンインストーラは再コンパイル不要とした作りに
したいと思っています。
そこで、特定のINFファイルから"USB\VID_xxxx&PID_xxxx"を
抜き出して行うような方式としたいとおもうのですがなにか
方法(Win32 API)は無いでしょうか。
0114113
2008/09/02(火) 22:28:120115デフォルトの名無しさん
2008/09/06(土) 22:55:49もうC++にどっぷり浸かっているから。
Javaは演算子のオーバーロードがないから、複素数計算では
致命的だし。
でも、C++0xでまた仕様が大幅にかわるのかな。もういいかげ
んにしてほしいな。
0116デフォルトの名無しさん
2008/09/07(日) 00:13:09そのままコンパイルできるってことになっているはず。
0117デフォルトの名無しさん
2008/09/07(日) 00:17:27std::cout << "name = " << name << std::endl;
error C2679: 二項演算子 '<<' : 型 'std::string' の右オペランドを扱う演算子が見つかりません (または変換できません)。
コンパイルできません。なにこれ。
0118デフォルトの名無しさん
2008/09/07(日) 00:18:58仕様が大きく変わった場合、書き直しを辞さないほどのよっぽど有益なメリットが無い限り普及なんてしない。安心して良し。
0119デフォルトの名無しさん
2008/09/07(日) 00:22:551行目を読んで、続きを読む気力が失せた
0120デフォルトの名無しさん
2008/09/07(日) 00:27:56#include <string> 抜けてない?
0121デフォルトの名無しさん
2008/09/07(日) 00:32:05書いてないですが、std::string はコンパイルエラーになってないので大丈夫です。
0122デフォルトの名無しさん
2008/09/07(日) 00:35:42「書いてないですが」とかそういう問題じゃない。書け。
0123デフォルトの名無しさん
2008/09/07(日) 00:37:27現に<<でエラーになっているじゃないか。全然大丈夫じゃないだろ。
0124デフォルトの名無しさん
2008/09/07(日) 00:43:050125デフォルトの名無しさん
2008/09/07(日) 03:55:340126デフォルトの名無しさん
2008/09/07(日) 07:55:240127デフォルトの名無しさん
2008/09/07(日) 10:13:520128デフォルトの名無しさん
2008/09/07(日) 15:15:09const int dim = 12;
char c[ dim ]; // ok
int x = 12;
const int y = x;
char c[ y ]; // error !
「配列の要素数はコンパイル時に決められていなければならない」
っていうのの意味がわからん・・・ ・_・
0129デフォルトの名無しさん
2008/09/07(日) 15:29:05コンパイラの気持ちになって出力するアセンブリコードを考えないと、確かにわかんないだろうねぇ。
そういう制約が嫌なら std::vector を使っておけばいいよ。
0130デフォルトの名無しさん
2008/09/07(日) 23:06:26APIでメモリ確保してコンストラクタ呼んでるだけ?
0131デフォルトの名無しさん
2008/09/07(日) 23:08:23そう思って差し支えない。もっと詳しく知りたければアセンブリの出力を見れ。
0132デフォルトの名無しさん
2008/09/08(月) 15:04:21BCB 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 );
0133デフォルトの名無しさん
2008/09/08(月) 21:21:54ANSI Cあたりまではなんとかなったんだが、C++3.0くらいになると
かなり複雑。あまり触りたくなかった。
0134デフォルトの名無しさん
2008/09/09(火) 12:49:51ハンドルとか初期化しまくったら、良く分からないけど直りました。
お騒がせしました。
0135デフォルトの名無しさん
2008/09/14(日) 19:35:07template入れたとたんソース分割コンパイルが通らなくなってしまいました
分割したファイルをコピペでひとつにするとコンパイルできるのでコードが間違ってるわけではないと思います
templateを使うとソース分割できなくなる仕様なんでしょうか?
コンパイラはBCCを使ってます
0136デフォルトの名無しさん
2008/09/14(日) 20:05:48ここでも読んでみ
0137デフォルトの名無しさん
2008/09/15(月) 15:29:33どのようにすればよろしいでしょうか。よろしくお願いします。
#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;
}
0138137
2008/09/15(月) 15:39:38環境は
OS Mac OS X 10.5.4
コンパイラ GCC4.2
です。
すみませんでした。
0139デフォルトの名無しさん
2008/09/15(月) 16:05:26http://www8.uploader.jp/user/vipprog/images/vipprog_uljp00538.txt
http://www8.uploader.jp/dl/vipprog/vipprog_uljp00539.zip.html
後はあれだ、COMの頭脳を書いていくだけだ・・・。
みんなでCOMクラスのselectメソッドを書き換えて勝負させようぜ!!
0140デフォルトの名無しさん
2008/09/15(月) 16:07:16http://pc11.2ch.net/test/read.cgi/tech/1087979678/
こっちでもないか
0141デフォルトの名無しさん
2008/09/15(月) 16:07:17zipの方にはソースとexeファイルが入ってる。
exeファイルの方は、>>139にテキストでうpしたソースの最後に
system("pause");を足したものをコンパイルしただけ。
心配なら自分でコンパイルしてね!!
0142デフォルトの名無しさん
2008/09/15(月) 16:10:00俺はこのスレで4日前くらいからC++でオセロを作ってるんだ・・・(´・ω・`)
ム板なんて!!ム板なんて・・・!!時々行くけどね。
C++の勉強がしたいだけだからそのスレには用はないかな・・・。
オセロのアルゴリズムを考えるには参考になりそうだけどね。
0143デフォルトの名無しさん
2008/09/15(月) 16:10:50恥ずかしい誤爆したぜ!!ww
VIPに帰ります。。。
0144デフォルトの名無しさん
2008/09/15(月) 16:18:070145デフォルトの名無しさん
2008/09/15(月) 16:26:16http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7726.c
見るの面倒だったので、てきとうに作ってみた。
無駄が多いけどね。
0146デフォルトの名無しさん
2008/09/15(月) 16:30:52n=2 → √500000と動かして
prime[n]==1ならば、nの倍数の配列すべてに0を入れる
するとprimeが1のもの
0147デフォルトの名無しさん
2008/09/15(月) 16:32:29でググれ
0148デフォルトの名無しさん
2008/09/15(月) 16:42:35BearRev Professional Edition
http://www.vector.co.jp/magazine/spotlight/010531/sl01053111.html
0149デフォルトの名無しさん
2008/09/15(月) 16:43:45C++まだ初めて4日目(多分)なので、オブジェクト指向的なプログラミングになれてません。
ここはこうした方がいいぜ!!ってのあればよろしくお願いします。
>>144
もちろんそのつもりだよん
0150デフォルトの名無しさん
2008/09/15(月) 16:46:310151デフォルトの名無しさん
2008/09/15(月) 16:51:58ループの終了条件
{}の位置
ついでにprintの位置
0152137
2008/09/15(月) 17:02:14ありがとうございます
参考になります
>>146
ありがとうございます。
チェックしてみます。
>>147
ありがとうございます。
その方法でも試してみたいと思います。
>>151
具体的な指摘ありがとうございます。
終了条件がどのように間違っているか指摘していただきたいのですが、よろしければお願いします。
0153デフォルトの名無しさん
2008/09/15(月) 17:11:17デバッガ
0154デフォルトの名無しさん
2008/09/15(月) 19:12:51for(j = 1;j < i;j++){
if(i % j == 0){
primecounter++;
}
1とそれ自身で割れるかどうかをチェックしてるのにj < iだと自身で割ることなく終了する
j <= iに変えれば自分で割ったときもチェックできる
0155トミー ◆xb8eIST5.k
2008/09/15(月) 21:51:15C言語を始めようと思い、いろいろなページを見てみたら、ほとんどにおいて
「まずコンパイラをダウンロードしましょう」と書いてあり、中でも例として
Borland C++ 5.5がよく書いてあったので、これをダウンロードしてみようと
思いました。
http://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をダウンロードすることはできないのでしょうか。
回答お願いします。
0156デフォルトの名無しさん
2008/09/15(月) 22:02:22環境は、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ことはできません。
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。
0157137
2008/09/15(月) 23:29:29ありがとうございます
肝心なところですね
カーソルが点滅したまま終了しないですが、、
何度も申し訳ございませんが、何が問題か分かる方お願いします。
0158デフォルトの名無しさん
2008/09/15(月) 23:33:54operator =はCDerivedで定義される暗黙のやつがCBaseのを隠してしまう。
だから、CDerivedで定義し直すなどしないといけない。
もっとも、CDerived val = 1で行われるのは代入ではなく初期化なので、
そういうことをやりたければ、CDerivedにint型の引数を取るコンストラクタを作る必要がある。
0159デフォルトの名無しさん
2008/09/15(月) 23:59:55回している回数じゃないかな
Sigma[i=1...499998]i = 499998*(1+499998)/2 = 124999250001
待っていればいつか終わると思うよ
0160デフォルトの名無しさん
2008/09/16(火) 00:05:22{}の位置が悪い
自分より小さい数で割るたんびにcountを0に戻してる
自分より小さい数で全部割りおわってからcountが2であるかどうか調べないと
0161156
2008/09/16(火) 00:21:21なるほど、そういうことか。
確かに、operator=を定義していなくても、オブジェクトの代入とか出来ますからね。
あれは暗黙で定義されているからってことか。一つ賢くなりました。
ありがとうございます。
0162137
2008/09/16(火) 01:03:17ありがとうございます。
デバッガで見てみると回ってはいるようなので、しばらく待ってみることにします。
>>160
基本的なアルゴリズムが間違っていたのですね、、
ありがとうございます!
0163デフォルトの名無しさん
2008/09/17(水) 14:09:120164デフォルトの名無しさん
2008/09/17(水) 14:42:160165デフォルトの名無しさん
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宣言したら、結合はうまくいったのですが、プログラム終了時に例外が出るようになってしまいました。
どうすればうまくいくのかどなたか教えて下さい。
0166デフォルトの名無しさん
2008/10/04(土) 23:14:22コピーコンストラクタとoperator=作ってる?
0167デフォルトの名無しさん
2008/10/04(土) 23:16:070168165
2008/10/05(日) 08:09:11operator=は作っていたのですが、コピーコンストラクタは作っていませんでした。
(operator= を定義しておけば必要ないと思っていたもので・・・)
コピーコンストラクタを作ったところ、うまく動作するようになりました。
どうもありがとうございました。
0169デフォルトの名無しさん
2008/10/05(日) 08:46:10足し算が出来るんだよ? コンパイル通るのかよ
0170デフォルトの名無しさん
2008/10/05(日) 10:41:380171デフォルトの名無しさん
2008/10/05(日) 11:27:46temp += str; //ここまではうまくいっている。
0172デフォルトの名無しさん
2008/10/05(日) 11:38:200173デフォルトの名無しさん
2008/10/05(日) 11:40:140174デフォルトの名無しさん
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型が読み込まれてなくて、定義されてないと出る
・・・初歩的な事で悪いんだけど、根本が違うのかな?ご教授お願いします。
0175デフォルトの名無しさん
2008/10/06(月) 14:11:48「int型を宣言」とか「int型を読み込む」とか、かなり奇怪な話になっててよくわからん。
どうせ単純なミスかなんかだろ。実際のコード晒してみるのがいいよ。
0176デフォルトの名無しさん
2008/10/06(月) 14:19:44ReadingFile.cpp
int enemy_img;
void readingfile(){
enemy_img = LoadGraph("date/img/enemy.bmp");
}
GlobalM.h
extern void readingfile(); //全ての素材
enemy_move.cpp
void enemy_move_02(){
move02.enx+=sin(PI*move02.eny/80)*5;
move02.eny+=1.5f;
DrawGraph( move02.enx , move02.eny , enemy_img , TRUE ) ;
↑ここでReadingFile内の関数で指定したのを読み込ませたい。
DeleteGraph( enemy_img ) ;
}
0177デフォルトの名無しさん
2008/10/06(月) 14:28:55extern int enemy_img;
0178デフォルトの名無しさん
2008/10/06(月) 14:35:16ありがとおおお
でもどうしてintも読み込ませないといけないんだ?
既にReadingFile.cppで読み込んでいるし、多重定義になるかと思ってた。
0179デフォルトの名無しさん
2008/10/06(月) 14:47:41他のソースに何か書いてあっても、
今コンパイルしてるソース (と、そのインクルード先) に書いてなければ、コンパイラには判らない
0180デフォルトの名無しさん
2008/10/06(月) 15:15:44コンパイラはその「あるはず」という仮定をオブジェクトファイルに埋め込む。
そしてリンカが全部のオブジェクトファイルからその変数を探して、実際のアドレスに直す。
(見つからなかった場合はリンクエラーになる)
0181デフォルトの名無しさん
2008/10/16(木) 01:38:42どなたかお答えいただけませんか?
0182デフォルトの名無しさん
2008/10/16(木) 02:10:05ttp://www.microsoft.com/japan/msdn/vstudio/Express/
これじゃだめなの?
0183デフォルトの名無しさん
2008/10/16(木) 03:47:20先週C++を始めたばかりなので色々と書き方が解りません;;
考え方は解るのですが……
二乗や平方根などなど……
0184デフォルトの名無しさん
2008/10/16(木) 04:27:08//
// 2つの円の重なりをチェックする。
//
// 引数
// x1, y1, r1 円1の中心x座標、中心y座標、半径
// x2, y2, r2 円2の中心x座標、中心y座標、半径
//
// 戻り値
// 0: 接する 正: 離れている 負: 重なる
//
int circle_check(int x1, int y1, int r1, int x2, int y2, int r2)
{
return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) - (r1+r2)*(r1+r2);
}
0185デフォルトの名無しさん
2008/10/16(木) 15:19:36srandのソースコードってどこにありますか?
0186デフォルトの名無しさん
2008/10/16(木) 16:02:430187181
2008/10/16(木) 19:24:11参考書を買って勉強しようと思っているのですが、その参考書で
『C++ Compiler 5.5/Turbo Debuggerをダウンロードして、それを使って勉強』
なものだったので、別のソフトだと操作方法がわからないんじゃないかと不安だったのです・・・。
とりあえずこれでやってみます!回答ありがとうございました。
0188デフォルトの名無しさん
2008/10/16(木) 20:24:04・CString 形式のデータで""hogehoge""というデータが入っていた場合、
前後のダブルクォーテーションを簡単に除去する方法はありませんか?
・char buff[255][3][255] のようなデータをファイルで入出力したいのですが、
何か良い方法はありませんか?
0189デフォルトの名無しさん
2008/10/16(木) 21:18:55メモリマップドファイルとstd::stringならsubstr
0190デフォルトの名無しさん
2008/10/16(木) 21:36:55特定のコード上で右クリックすると確実にフリーズするんですが
似たようなケースさらには対処法あったら教えてください。。
ググったけどほとんど情報が無く、似たような質問がされている所も未だ解答がなかったとです。。
原因は調査中です。ヘッダーファイルを適当にインクルードしまくったから無限ループ起きたか?
と思って全部コメントアウトしてみたけど無意味でした。。
他の情報としては、
普通はマウス乗せたらメンバの情報が出てきますが、そのコードではそれすら出てきません。
一応左クリックおよびファイルの編集はできます。
右クリックだけ永久砂時計が発動します。
他も何か手がかりになりそうな所あれば探したいんで
アレがひっかかってるんじゃね? とか言っていただけると助かります。
0191190
2008/10/16(木) 22:42:32ちょっと他のところで聞いてみます。
0192デフォルトの名無しさん
2008/10/16(木) 22:44:030193デフォルトの名無しさん
2008/10/16(木) 22:51:43と思ったらこんなタイミングで……なるほど。
しかしDream SparkでDLした奴なんでもう一度isoをDLできるかどうか……?
MSに報告したほうがいいんでしょうかね。
0194190
2008/10/16(木) 23:35:13別件ですがついでにこちらで質問してみたいことが。
bool b1,b2,b3,b4;があって、
if(b1 && b2 && b3 && b4)
{ 〜〜 }
のようにやることは
if(b1){
if(b2){
if(b3){
if(b4){
〜〜
}
}
}
}
のようにやる事と同じように働いてくれるんでしょうか?
それとも前者はb1〜b4をすべて求めてから論理積を計算し、
後者はfalseがあった時点で処理をやめる、という違いが生じるんでしょうか?
前々から疑問に思っていました。
0195デフォルトの名無しさん
2008/10/16(木) 23:42:58分岐予測より、論理積のコストは少ない
0196デフォルトの名無しさん
2008/10/16(木) 23:46:47短絡評価と言って、左から順に見ていきfalseが出てきたら残りは評価されない。
だから上と下のどっちの書き方でも同じ意味になる。
もちろん、実際にコンパイラがどういうコードを吐くかは別として。
0197190
2008/10/16(木) 23:51:54本当ですか、安心しました。
短絡評価、まぁ考えてみたら、してくれないとスマートじゃないですよねw
実測とかしたことない……やっぱそういう経験も役に立つんですね。
ありがとうございましたm(__)m
0198デフォルトの名無しさん
2008/10/17(金) 00:54:32亀レスだけどサンクス、調べてみるよ。
0199デフォルトの名無しさん
2008/10/17(金) 02:49:46str.trim('\"')でできそう!
0200デフォルトの名無しさん
2008/10/17(金) 09:01:45メルセンヌツイスターのソースを使えば良いジャマイカ
0201デフォルトの名無しさん
2008/10/17(金) 14:06:39商用に組み込んだとしても問題にならないのでは
0202デフォルトの名無しさん
2008/11/04(火) 18:46:54具体的にソースを挙げて教えてください。
よろしくお願いします。
0203デフォルトの名無しさん
2008/11/04(火) 18:58:54char buf[適当な長さ];
fgets(buf, sizeof(buf), stdin);
0204デフォルトの名無しさん
2008/11/04(火) 19:18:29返信ありがとうございます。
0205デフォルトの名無しさん
2008/11/05(水) 14:47:28typedef DWORD wBuffer[32];
bBuffer A;
wBuffer B;
AからBにキャストするにはどうすればよいのでしょうか?
でるぴだと B:= wBuffer(A); なんですけど
0206デフォルトの名無しさん
2008/11/05(水) 15:24:37代入したいのならmemcpy()でも使う。
それにしてもObjectPascalは、型が緩いんだろうか。
0208デフォルトの名無しさん
2008/11/07(金) 16:14:41ttp://www.thinkit.co.jp/cert/article/0711/2/5/2.htm
に載ってるところ探しても無いんですが
0209デフォルトの名無しさん
2008/11/07(金) 23:43:090210デフォルトの名無しさん
2008/11/08(土) 01:32:35ここですね
ttp://wiiyourself.gl.tter.org/
どうもです
0211デフォルトの名無しさん
2008/11/08(土) 02:14:04スレチならごめん
今、ユーグリット云々つかって最大公約数を求めるプログラム作ってて
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7968.txt
ってとこまではできたんです。2つはできるんですけど
問題は3つ以上の数を調べるときなんです。普通に文字数を増やして計算させるだけじゃできないようで、
いろいろしたんですけど詰まってしまいまして
どこをどう変更すれば、3つ以上の数の最大公約数をしらべるプログラムになるのでしょうか
0212デフォルトの名無しさん
2008/11/08(土) 02:15:220213デフォルトの名無しさん
2008/11/10(月) 19:33:43¥r¥nかよ!
ゲイツのバカヤロー!
0214デフォルトの名無しさん
2008/11/10(月) 19:58:35何をいまさら。 UNIX原理主義者は始末に終えんな。
それは、デジタルリサーチのCP/M-80(CP/M-86)との互換性を保つために
そうなっている。 文句があるなら、墓の下で眠るゲイリーキルドールに
言え。
ちなみに、OS-9の行末コードは'\r'のみだ。
0215デフォルトの名無しさん
2008/11/10(月) 20:31:530216デフォルトの名無しさん
2008/11/11(火) 07:09:03staticはどう言った変数や関数に付ければ良いのでしょう。
staticの働き事態はわかるのですが・・・
0217デフォルトの名無しさん
2008/11/11(火) 08:44:01・関数
外部に公開しない全ての関数につける。
単一ソースファイルでプログラムを作るのなら、staticをつけないのはmain()だけでいい。
・変数
自動変数で事が足りない場合。
関数外部で宣言したい場合で、外部に公開する必要がない場合。
0218デフォルトの名無しさん
2008/11/11(火) 12:09:23例:
String^ variable = "C:ファイル名";
Bitmap^b = gcnew Bitmap(variable); // エラー
0219デフォルトの名無しさん
2008/11/11(火) 13:04:540220デフォルトの名無しさん
2008/11/11(火) 15:47:57_declspec(align('16'))の仮引数は配置されません
とエラーが出てしまいました。vectorのせいだと思うのですが、このエラーは
どういったときに出るのでしょうか・・・
0221デフォルトの名無しさん
2008/11/11(火) 17:35:36usleep が無いと言われたのですが、usleep は unistd.h に入ってるはずですよね?
ちなみに Darwin の cc でコンパイルしたときはうまくいきました
/usr/include/unistd.h をみてみると
#if defined(__USE_BSD) || #defined (__USE_XOPEN_EXTENDED)
...
#endif
で囲まれてました。そこで cc に -D__USE_BSD オプションをわたしてみたものの
やっぱり定義されてないと言われます。
ubuntu の cc で usleep を使うときはなにかしらやり方があるのでしょうか?
0222デフォルトの名無しさん
2008/11/11(火) 17:49:13> POSIX.1-2001 では、この関数は過去のものと宣言されている。代わりに nanosleep(2) を使うこと。
> POSIX.1-2008 では、 usleep() の規定が削除されている。
とか書いてあるので、代わりに nanosleep を使ってみたらどうだろう
0223デフォルトの名無しさん
2008/11/11(火) 18:07:14ansi cにusleep()などない!
0224デフォルトの名無しさん
2008/11/11(火) 23:26:53まさかとは思うが、"C:\\ファイル名"とかいうオチじゃないだろうなw
0225221
2008/11/12(水) 09:58:31情報どうもです。
とりあえず
#ifndef __USE_BSD
# define __USE_BSD
# include <unistd.h>
# undef __USE_BSD
#else
# include <unistd.h>
#endif
としてその場をしのいだんですが、そのうち nanosleep を使うように書き直したいと思います
0226デフォルトの名無しさん
2008/11/14(金) 03:21:41以下のように書いたのですがリンクエラーが出ます
#include <crtdbg.h>
・
・
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// メモリリーク検出
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
・
・
・
}
エラー内容
Game�T error LNK2019: 未解決の外部シンボル __CrtSetDbgFlag が関数 _WinMain@16 で参照されました。
他にも何かインクルードする必要がありますか
開発環境はVS2003で、OSはWinXP_SP3です
0227デフォルトの名無しさん
2008/11/14(金) 08:05:07リンクエラーと自分で書いてるだろ
するべきことはインクルードではない
0228デフォルトの名無しさん
2008/11/14(金) 12:54:300229デフォルトの名無しさん
2008/11/14(金) 20:37:240230226
2008/11/14(金) 23:40:50なぜゲ製板とわかるのでしょうか
>>228
DebugかReleaseのとこですよね
Debugにしています
よくわからないので新規プロジェクトで試したらできました
これに少しづつ作ったものを貼り付けていって原因を探してみる
0231デフォルトの名無しさん
2008/11/15(土) 23:28:04例として、
「2 3 5 6」
「2 3 1 3 4 5 2」
というスペースで区切られた数があり、これらをそれぞれ別の配列に格納したいのです。
入力は
2 3 5 6(ここでエンター)
2 3 1 3 4 5 2
となります。
コードと一緒に解説してくださるとありがたいです。
0232デフォルトの名無しさん
2008/11/16(日) 00:16:280233デフォルトの名無しさん
2008/11/16(日) 00:52:12C++で、コンパイラのように構文解析をする処理などを勉強できる書籍はないでしょうか?
プログラム板に初めてくるので、このスレでいいのか判断に迷いますが、、、
よろしくお願いします。
0234デフォルトの名無しさん
2008/11/16(日) 01:03:270235デフォルトの名無しさん
2008/11/16(日) 01:12:08以下の様に書いてみましたが、インライン関数MUSTOKの行数でエラーが起こった、もしくは、assert関数がある行が
表示されてしまいます。できればこの関数MUSTOK(0==1);がある行が知りたいのですが、どうしたらよいでしょうか?
実行環境
gcc バージョン 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
ubuntu8.4
ソースコード
==
#include <cassert>
#include <iostream>
inline void MUSTOK(bool cond)
{
if(!cond)
{
std::cout<<"file=:"<<__FILE__<<"\tlie=:"<<__LINE__<<std::endl;
}
assert(cond);
}
int
main(int argc,char *argv[])
{
MUSTOK(0==1);
return 0;
}
==
実行結果
file=:assert_test.cpp lie=:7 assert_test: assert_test.cpp:9: void MUSTOK(bool): Assertion `cond' failed. Aborted
0236デフォルトの名無しさん
2008/11/16(日) 01:21:33MUSTOKをマクロで実装するしか。
0237デフォルトの名無しさん
2008/11/16(日) 01:23:50backtrace,backtrace_symbolsってのを使うとどこから呼び出されてるか表示出きるみたいだよ。
0238デフォルトの名無しさん
2008/11/16(日) 10:42:04233です。ありがとうございました。
書泉に行ったときに探してみます。
0239デフォルトの名無しさん
2008/11/16(日) 12:33:25その実行の終了を待って、hogeのmain関数が返した値を取得したいのですが、
どうすればよいでしょうか?標準のC関数だけでできますか?
0240デフォルトの名無しさん
2008/11/16(日) 12:40:350241デフォルトの名無しさん
2008/11/16(日) 12:50:22メモ帳で開くにはどうすればよいでしょうか?
ご教授お願いします。
0242デフォルトの名無しさん
2008/11/16(日) 12:58:13あとは
http://www.google.co.jp/search?q=C%8C%BE%8C%EA+system
から探しなー
0243デフォルトの名無しさん
2008/11/16(日) 13:06:03馬鹿も休み休み言ってください。
>>239
一般的に、アプリはsystem()で起動すればmain()の戻り値を回収できる。
但し、GUIアプリなどで動いているにも拘らずすぐに戻ってきてしまう場合は、
コマンドインタプリタ(command.comとかbashとか)の支援が必要になる。
コマンドインタプリタを介在させたくなければ、そこでやっと>240の言うようなAPIの出番となる。
>>241
system("notepad any.txt")でいいとして、そのテキストファイル名を可変にしたいなら
文字列を組み立てればいい。
0244デフォルトの名無しさん
2008/11/16(日) 13:36:09たとえば
「File %1 is too long.」 ⇒ 「File "C:\hogehoge.foo" is too long.」
みたいな。
変換先文字列分拡張して memmove で必死に頑張ってもいいんだけど、
ATL/WTL 使ってるのでそれらのライブラリで便利なのがあればいいなぁと
思って…
教えてエロい人><
0245デフォルトの名無しさん
2008/11/16(日) 13:39:01%1を適当に変換してから、sprintf()
0246デフォルトの名無しさん
2008/11/16(日) 13:40:180247デフォルトの名無しさん
2008/11/16(日) 13:40:470248デフォルトの名無しさん
2008/11/16(日) 13:48:57そうか、%1 じゃなくて別にいいんだもんね。
「File %s is too long. (sizeof: %s. current: %s)」
とかにして順番に sprintf の引数に積めばいいのか!
>>247
STLワカンネ・・・orz
でもせっかくなので勉強してくるYO!
即レスthx!!!
みんな優しいね。大好き。
0249デフォルトの名無しさん
2008/11/16(日) 21:02:140250デフォルトの名無しさん
2008/12/17(水) 02:15:02for(;;)
{
scanf("%c",&input);
if(input == 'S' || input == 's')
{
printf("GAME START!¥n);
}
else if(input == 'Q' || input == 'q')
{
printf("GAME QUIT¥n");
return 0;
}
else
{
printf("input failed¥nPlease input again¥n");
}
}
どこを変更すれば、2度表示されなくなるでしょうか。
よろしくお願いします。
0251デフォルトの名無しさん
2008/12/17(水) 02:35:15scanf()の後に、
if ( input != '\n' ) {
while ( (c = getchar()) != '\n' ) {
; /* 意図した空文 */
}
}
こういうの追加しておくとか。
scanf()で文字ではなく文字列受け取って、最初の要素だけ利用するとか。
fgets(,,stdin)で、上記と同じようにするとか。
ゲーム作っているみたいだから、がんばってとしか言えないけど。
0252デフォルトの名無しさん
2008/12/17(水) 07:48:350253デフォルトの名無しさん
2008/12/17(水) 23:46:16・誤って内容を変更するコードを書いた場合エラーになる。
・(条件が揃えば)定数として使える。
0254デフォルトの名無しさん
2008/12/18(木) 08:59:45弄っていたら、
scanf("%c",hoge);
を
scanf("%s",hoge);
にしたら出来ました。
ありがとうございました。
0255デフォルトの名無しさん
2008/12/19(金) 08:36:18後処理さえすれば、コンストラクタで例外を投げても良いと聞いたんですが、
自分自身(this)がリークすることはないんでしょうか?
0256デフォルトの名無しさん
2008/12/19(金) 11:35:370257デフォルトの名無しさん
2008/12/19(金) 11:55:39これで安心して例外投げれます。
0258デフォルトの名無しさん
2008/12/19(金) 12:10:50これだね。
http://www.kijineko.co.jp/tech/superstitions/memory-leak-at-dynamic-creation-fail.html
0259デフォルトの名無しさん
2008/12/19(金) 15:58:08スッキリしました^^
0260デフォルトの名無しさん
2008/12/19(金) 16:07:060261250
2008/12/19(金) 17:56:15scanfで各配列に入れた文字を書き込むにはよいのですが、a[i][j] = '*';という入れ方で書き込むとtxtファイルが開けなくなってしまいます。
何が問題なのでしょうか。
よろしくお願いします。
0262デフォルトの名無しさん
2008/12/20(土) 02:21:57ソースと結果を示してください。
fopen() を使っているなら perror() してみるとか。
0263デフォルトの名無しさん
2008/12/20(土) 02:40:07たぶんfprintf(fp, "%s", a[i]);とかやって、ナル文字('\0')が見付からなくてメモリの適当なところまでファイルに書き込んだためにメモ帳などでテキストファイルとして開けない。
とエスパーしてみる。書き込みがSJISっぽいから、Windowsと仮定するけど。
最初から、バイナリで書き込んでバイナリで読み込むといいかも知れない、ゲーム作ってんだろ。
fwrite(a, sizeof(a[0][0]), sizeof(a), fp); foo型配列a
fread(a, sizeof(a[0][0]), sizeof(a), fp); foo型配列a
その代わりメモ帳では開くなよ。開いてもなんとかなるかもしれないけど。
0264デフォルトの名無しさん
2008/12/20(土) 18:50:18ファイルサイズが想定以上なら263で正解だと思う。
0265250
2008/12/20(土) 19:20:53すみません。改行が多すぎるそうで、書き込みができませんでした。
>>263
ありがとうございます。
バイナリで開いて書き込んだら、できました。
>>264
そのような確認の仕方もあるのですね。
勉強になりました。ありがとうございました。
0266デフォルトの名無しさん
2008/12/24(水) 09:35:35コンストラクタで例外投げるのってどういう時に使うんだ?
分岐にでも使うのか?
0267デフォルトの名無しさん
2008/12/24(水) 14:08:45エラー通知に決まってるだろ。コンストラクタでも普通の関数でも同じ。
0268デフォルトの名無しさん
2008/12/24(水) 21:19:490269デフォルトの名無しさん
2009/02/10(火) 18:39:30168 名前:よしよし ◆2U93Cmvv1o [sage] 投稿日:2009/02/10(火) 07:02:42 ID:???
おいハゲどもポインタの質問だ
------
p は指し示す先のアドレス
&p はポインタ変数pそのもののアドレス
*p は指し示す先の値
------
だよな?なのにポインタ配列の解説のところで
------
data+i がそのもののアドレス
data[i] が指し示す先の値
*(data+i) が指し示す先のアドレス
------
ってことになってんだよ
俺は本の書き間違えだと思って実際にプログラム打ち込んで
コンパイル、実行してみたらあってるんだよ
どういうことだ説明しろ
「*」はポインタが指し示す先の値を出力するんじゃねーのかよ
0270デフォルトの名無しさん
2009/02/10(火) 18:43:213番目の"*(data+i)が指し示す先のアドレス"は間違ってるな。
ハゲの理解が正しい。どこの糞入門書だ。さらせ。
171 :よしよし ◆2U93Cmvv1o :2009/02/10(火) 11:50:38 ID:???
>>169ありがとう。ハゲじゃないが言ったようにコンパイルすると
結果は入門書どおりになるんだよ。俺が何か間違っているはず。
#include <stdio.h>
int main (void){
char* data[4]={"par","birdie","eagle","albatross"};
int i;
printf("data[i] 値 アドレス :ポイント先の値\n");
for(i=0;i<4;i++){
printf("data[%d] %10d %10d %10s\n",i,*(data+i),data+i,data[i]);
}
return 0;
}
-------------------------------------
C:\Source>point.exe
data[i] 値 アドレス :ポイント先の値
data[0] 4235576 1245052 par
data[1] 4235580 1245056 birdie
data[2] 4235587 1245060 eagle
data[3] 4235593 1245064 albatross
-------------------------------------
0271デフォルトの名無しさん
2009/02/10(火) 18:44:48177 名前:よしよし ◆2U93Cmvv1o [sage] 投稿日:2009/02/10(火) 14:48:08 ID:???
要するに
int i=5;
int *p;
とかと
char* data[4]はそもそも違うっちゅーことだな?
*pってのは「指し示す先の値」のことだけど、
* data[4] ってのは「指し示す先のポインタ」のことなんだな?
* data[4]様はポインタ様*(data + i )やdata[i]のさらに違う場所
(メモリの)にいる奴なんだな?
メモ-----------
*(data + i )とdata[i]はまだポインタなの。
「ポインタの配列」→「ポインタ」→「指し示す先の値」
* data[4]→ *(data + i )とdata[i]→ *(*(data+i))または*data[i]
char* data[4]=
--------------
0272デフォルトの名無しさん
2009/02/11(水) 08:43:54VC++ Expressでウインドウアプリを作っています。
(ファイル A.h)
class A{
public:
A();
vertial ~A();
};
(ファイル B.h)
#include ゙A.h゙
class B:public A{
public:
B();
~B();
};
(ファイル C.h)
#include ゙A.h゙
class C:public A{
public:
C();
~C();
};
この時、Aが再宣言されたとか、Aが未定義だとかでコンパイラに怒られます。なぜ
0273デフォルトの名無しさん
2009/02/11(水) 08:56:550274デフォルトの名無しさん
2009/02/11(水) 09:47:54というのがあったのでこれを参考に簡単なプログラムを作っていたのですが
コンパイルエラーはでないのですが、最後の部分を入力するとエラーで落ちます
何がいけないのでしょうか?
Source PW:c
http://www1.axfc.net/uploader/He/so/193956
0275274
2009/02/11(水) 10:01:04ここは >= にしていました
0276274
2009/02/11(水) 10:02:21>最後の部分を入力
プログラムを実行して順番に進んでいって最後の部分を入力
0277デフォルトの名無しさん
2009/02/11(水) 10:41:14scanf("%d", movieb);
0278デフォルトの名無しさん
2009/02/11(水) 13:03:11virtual A();の間違うぃ
スマネm(_ _)m
0279デフォルトの名無しさん
2009/02/11(水) 13:25:47実際のコードをきちんと再現できているとはとても思えない。
従って、再現するソースとエラーメッセージを貼るか、帰れ。
0280デフォルトの名無しさん
2009/02/11(水) 13:41:40そっから推測できる間違いが指摘できねーんならそれこそカエレだ
0281デフォルトの名無しさん
2009/02/11(水) 13:48:51別にあなたが指摘なさっても宜しくってよ。それとも、あなたご自身が指摘もできないで書いてらっしゃるとでも仰るのかしら?
0282デフォルトの名無しさん
2009/02/11(水) 14:15:150283デフォルトの名無しさん
2009/02/11(水) 14:17:360284デフォルトの名無しさん
2009/02/11(水) 14:40:16こうじゃね?
#ifndef _A_
#define _A_
class A{
public:
A();
virtual ~A();
};
#endif
0285デフォルトの名無しさん
2009/02/11(水) 15:15:46神!
正直、#include ゙A.h゙してれば逝けるとおもてました。
(BCCでは#includeしてれば逝けてたから)
ありがとうございますた。
0286デフォルトの名無しさん
2009/02/11(水) 16:30:160287デフォルトの名無しさん
2009/02/11(水) 18:54:220288デフォルトの名無しさん
2009/02/11(水) 20:22:41scanf("%d", movieb);
という箇所が間違っているということでしょうか?
または、ある部分を上のように書き直せということでしょうか?
0289288
2009/02/11(水) 20:28:46&が抜けているということですね
スレ汚しすみませんでした
また、回答ありがとうございました
0290デフォルトの名無しさん
2009/02/11(水) 20:31:43_A_ はプリプロセッサの識別子。C/C++の予約識別子には該当しないよ
0291デフォルトの名無しさん
2009/02/11(水) 20:40:50ライブラリの実装に _A_ 使ってるところがあったらぶっ壊れるだろうが。
0292デフォルトの名無しさん
2009/02/11(水) 20:45:530293デフォルトの名無しさん
2009/02/11(水) 20:54:32何を根拠にそんなことを言うのかね。
ISO C (draft n1336)
7.1.3 Reserved identifiers p2 にはマクロ定義についても明示的に禁止されてる。
> If the program declares or defines an identifier in a
> context in which it is reserved (other than as allowed by 7.1.4), or defines a reserved
> identifier as a macro name, the behavior is undefined.
ISO C++ にはマクロ定義について明示的な記述は無いようだけど、 >291 があるから
やっぱりダメだろう。
0294デフォルトの名無しさん
2009/02/11(水) 22:11:000295デフォルトの名無しさん
2009/02/12(木) 05:49:25#define _A_
:
#endifと、
#pragma onceは同じ意味じゃないの?
0296デフォルトの名無しさん
2009/02/12(木) 05:55:300297デフォルトの名無しさん
2009/02/12(木) 05:57:16VC厨はこれだから・・・
0298デフォルトの名無しさん
2009/02/12(木) 07:53:330299デフォルトの名無しさん
2009/02/12(木) 09:08:54gccでもCodeWarriorでも使えるし
PC向けのメジャーなコンパイル環境で使えないのはbccくらいなんだが
ポータビリティ意識して書くのは当然としても、
>VC厨はこれだから…
ってどういうこと?
0300デフォルトの名無しさん
2009/02/12(木) 22:48:59CodeWarriorってタダで使えるの?
wikipediaで見たらかなりのプラットホームをサポートしてるみたいだから
使ってみたいのだが
0301デフォルトの名無しさん
2009/02/13(金) 00:16:57コンシューマゲームの開発やってると、無料でダウンロードできる場合もある
俺が使ったのはこのパターン。
すまんが小売してるかどうかは知らん。
とりあえず使いにくいことは確か。
0302デフォルトの名無しさん
2009/02/13(金) 00:18:57#pragma onceがおそらくVC発祥だからでしょ。
#ifdef _MSC_VER >= 1020で囲むコードを良く見かけるし、
まだまだVC限定のイメージが拭いきれていないと思う。
0303デフォルトの名無しさん
2009/02/13(金) 09:03:50> #ifdef _MSC_VER >= 1020で囲むコードを良く見かけるし、
すまんが意味がわからない。
コンパイラによってifdefとpragma onceを切り替えるコードがあるって話?(なわけないか)
VC限定のイメージとの関係は?
0304デフォルトの名無しさん
2009/02/13(金) 09:08:11とは思った。
>>303
pragma onceは厳密には全く違う意味に解釈される可能性もあるから、
使えるコンパイラを限定することに意味はないわけでもない。
0305デフォルトの名無しさん
2009/02/13(金) 14:55:58意味ないだろ
それならifdefだけで十分なんだから。
0306デフォルトの名無しさん
2009/02/13(金) 15:26:48古い MSC には #pragma once がなかったんじゃないの?そのための比較だと思うけど。
0307デフォルトの名無しさん
2009/02/13(金) 15:59:56ごめん間違えた。正しくはこんな感じ。見ない?
#if _MSC_VER >= 1020
#pragma once
#endif
0308デフォルトの名無しさん
2009/02/13(金) 18:14:42全く答えになってないんだがww
0309デフォルトの名無しさん
2009/02/13(金) 22:15:100310デフォルトの名無しさん
2009/02/13(金) 22:50:41#define _strcpy
int _strcpy(){return 0;}
#endif
0311赤西仁
2009/02/13(金) 22:57:03アークザラッド�Uというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。
◆試してダメだったこと
ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
(ちなみに他のゲームはほとんど抽出可能)
◆教わったこと
・アークザラッド�Uは独自の画像形式を使っているから抽出できない。
・PS上で表示されてるということは絶対に摘出はできるはず。
◆抽出は不可能ではないということを知ったとき
2ちゃんねるで質問したところ、
ある方が実際にキャラクターの歩行画像を抽出して
私が立てたスレにアップしてくださいました。
スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
0312デフォルトの名無しさん
2009/02/13(金) 23:44:150313デフォルトの名無しさん
2009/02/14(土) 00:00:30コンパイラの種類/バージョンチェック云々以前の話なんだが、わかってるか?
VCでifdefやifndefが使えないわけじゃあるまいし、
あえてpragma onceを混ぜる理由が無いだろ
0314デフォルトの名無しさん
2009/02/14(土) 00:05:42#pragma onceがあたかもVC限定かのように思わせるのではないかと言いたいんだけど
0316306
2009/02/14(土) 04:46:01マクロによるインクルードガードでは2回目もファイルを開いて少なくともインクルードガードを
読む必要がある。 #pragma once なら2回目以降ファイルを開かずにスキップするような実装が
考えられる。
そのため、インクルードガードを置いて移植性を持たせつつ、特定のコンパイラでの
コンパイル時間を短縮する目的で #pragma once を置くことが考えられる。
http://en.wikipedia.org/wiki/Pragma_once
0317デフォルトの名無しさん
2009/02/14(土) 12:32:24._,,,,,,。,,、 广'x、 ,,、._ 」'゙''i、
,,,,,_.,,,,、广゚┐ .,,,v―冖"~゛ ゙'i、 .ト ,|,_ riゃ .} .,i´ '冖i、
.] ` f゙,l° ,i´ .゙l_ .y-┐ 'や'゙"゙’ _,,,vr" .゙ト.゙'x,,,,广 ィ・'''゙~ .._,,v・゚ヒ''''・x、
入、rУ ,iレ-v,,,、 .,r°."'''l゙ ,|√゙゚'i、 匸 ._ .y・'゙゚,,,v―-, .:゚ーa .√ ._,rll_ :}
.,r''y|゛゙゙l..,i´ ,i"゙l, .゙ト ,r°,,, .., ._,,vぐ .`√ .,i´l广._,,,,,,,,i´ ,,i´ ,i´ ,「 .:| .~''''″
.r″ .|゙l、 “ .,i″.yi入-イ il∠i、.` .,メ| | 」'ト .,,i´ .,i´ ,, ̄ .[ .,i´.,,,,,,! .]_
.゙l_,i´,レ .'�_,,,,レ ~''┐ .,r°.,i´.| .| ,l゙ :゙l、 ,,i´ ,i´ l゜.゚L__ .:―ヤ゚″_ :~''=、
.,r″.,x=,, .,i´ ,x'".,,x'″ .゙l、 ゙冖''″ .] | .,i´ .゙l, .~1 .゚L '゙〃 ,n, .,,}
.,l彡'''″ .゙~"''''''''''"゜ .テ''~゛ .:゚'―---―・° ―″ .~''¬―'″ .:゚=_,r
0318デフォルトの名無しさん
2009/02/16(月) 17:47:44VC++ ExpressEditionでのリーソスの事について質問させてくダサイ。
(Resource.h)
#define GAZOU000 1000
#define GAZOU001 GAZOU000 + 1
: :
: :
#define GAZOU030 GAZOU001 + 030
(Resource.rc)
GAZOU000 BITMAP "bmp000.bmp"
: :
: :
GAZOU030 BITMAP "bmp030.bmp"
これでビルドしようとしたら
.\Resource.rc(5) : error RC2135 : file not foundみたいなのが
ズラズラズラ〜〜〜っと出てきました。
仕方が無いのでResource.hの、
#define GAZOU030 GAZOU000 + 30みたいに記述しているのを
全部#define GAZOU030 1030のように書き直したらビルドできました。
なぜ最初の書き方でダメだったんですか
0319デフォルトの名無しさん
2009/02/16(月) 21:07:15GAZOU001 BITMAP "bmp001.bmp"
のGAZOU001をマクロ展開すると、
1000 + 1 BITMAP "bmp000.bmp"
になるだろ?リソースファイルはスペースを区切りと扱うので、正しく認識できなくなる。
0320デフォルトの名無しさん
2009/02/16(月) 21:57:46えー!そうなんですか〜
初歩的ミスだったのですね。お恥ずかしい・・・
でも、お蔭様で、またひとつ勉強になりました。
ありがとうございました。
0321デフォルトの名無しさん
2009/02/16(月) 22:04:41大抵の場合、フルビルドを立て続けにやることはなく、プリコンパイルヘッダの効果で意味がないと思われ
0322デフォルトの名無しさん
2009/02/16(月) 22:37:19cppファイルの無名名前空間の使用は推奨されてたのですが
理由はなぜでしょうか。cppファイルは別に何をやってもいいような。
cppファイルですらusing使うのは駄目なの?
0323デフォルトの名無しさん
2009/02/16(月) 23:46:37ほかのcppファイルから見える必要のないものを隠すために使えという意図だと思う。
同じ目的で、名前空間上のstaticも使えるけど、
一般的に、この意味ではstaticより無名名前空間のほうが推奨されている。
0324デフォルトの名無しさん
2009/02/16(月) 23:57:52名前空間上の関数定義だったら別だけど
クラスのメンバ定義だけしか書かない分には
気にしなくてもいいのかな。
>staticより無名名前空間のほうが推奨されている。
これは等価だと理解してましたが、なぜでしょう。
どっちも他のファイルからは見えないのに?
0325デフォルトの名無しさん
2009/02/17(火) 00:39:05もともとC/C++のstaticに静的記憶期間とファイル内って2つ意味があるのはややこしいから、
後者の意味を分離しようという動機で無名名前空間が導入されたという経緯がある。
だから大事に使ってあげてねと言うわけ。
0326デフォルトの名無しさん
2009/02/17(火) 03:30:11C++ ではオーバーロードやテンプレートの関係で、クラス名などもグローバルな定義の
識別に使われるので、関数や変数以外に class, struct, enum も別々の .cpp で同じ
名前空間内に同じ名前のものを定義するとマズイ。これが無名名前空間で解消できる。
0327デフォルトの名無しさん
2009/02/21(土) 02:20:15ISO/IEC 14882:2003とXLib、Win32APIの範囲内でスクラッチからエディタを作る。
Win32、XLibともに標準C++ライブラリとかぶる機能があるが、この場合
標準C++を優先して使う。
これは、少しでも移植性を高めるための努力と考えてほしい。
また、拡張性の担保ともなりうる。
これは時間かかるけど、やりがいあるよ?
0328デフォルトの名無しさん
2009/02/21(土) 02:56:400329デフォルトの名無しさん
2009/02/21(土) 03:02:01→XlibかWin32?どうせなら両立できるwxだろと意気込むがインストール失敗して挫折
→そもそも標準C++が分からなくて挫折
→努力なんかできなくて挫折
→わたるが死んじゃう!(自殺)
0330デフォルトの名無しさん
2009/04/11(土) 22:30:51CとC++を実践の中で学びたいのですが
なにを作ればいいか、というよりなにをその言語で作れるのか漠然として・・・
JavaやC#のようなオブジェクト指向言語ならイメージ浮かびやすいんですけど
コンソールだとコントロール等がないのでどうしても・・・
0331デフォルトの名無しさん
2009/04/12(日) 00:19:130332デフォルトの名無しさん
2009/04/12(日) 09:37:070333330
2009/04/12(日) 10:24:27まだイメージができないあたり、ライブラリの知識が不足しているようですね。
0334デフォルトの名無しさん
2009/04/12(日) 10:29:320335デフォルトの名無しさん
2009/04/12(日) 11:54:22ポトペタでさくさく作っている間は必要のない知識だ
0336デフォルトの名無しさん
2009/04/12(日) 12:45:190337デフォルトの名無しさん
2009/04/12(日) 19:33:18ポトっと落とすとペタっと張り付く機能やそれを備えたIDEのこと
0338デフォルトの名無しさん
2009/04/13(月) 00:50:39まさにコントロールじゃない目に見えないクラスオブジェクト。
0339トミー ◆xb8eIST5.k
2009/04/25(土) 20:19:22ぼくもそれをダウンロードして使ってみました。
うまくいきそうです。
どうもありがとうございました!
0341デフォルトの名無しさん
2009/05/10(日) 22:02:480342デフォルトの名無しさん
2009/06/07(日) 16:31:54負の数も含めて、四捨五入をする場合、どのようなコードを書けばよいのでしょうか?
0343デフォルトの名無しさん
2009/06/07(日) 19:14:53VC++EEとBCCどっちが作り易いですか?
また言語自体はどちらも同じですか?
0344デフォルトの名無しさん
2009/06/07(日) 19:20:100345デフォルトの名無しさん
2009/06/07(日) 19:21:35ATL/WTLなどもあり対応しているライブラリも多い。
0346デフォルトの名無しさん
2009/06/07(日) 19:22:570347デフォルトの名無しさん
2009/06/07(日) 22:30:11x=(int)(x+.5-(x<0));
でよいか?
0348デフォルトの名無しさん
2009/06/07(日) 22:35:28VC++使うことにします。
ありがとうございました。
>>346
C++は以前触ったことがあります。昔すぎて何も覚えてませんが…
0349デフォルトの名無しさん
2009/06/07(日) 22:41:43abs関数はどうですか
0350デフォルトの名無しさん
2009/06/08(月) 10:46:27なんで cast なんか四捨五入で使うの?round とか使わない?
cast なんてそんなに無闇に振り回すものじゃないと思うけど。
0351デフォルトの名無しさん
2009/06/08(月) 11:31:01round()なんて関数ないぞ
0352デフォルトの名無しさん
2009/06/08(月) 12:44:07すまん。ちょっと説明不足だったかも。厳密にいえば round/lround/rint/lrint
等々は C99 の規格みたい(といっても今や 2009 だが)。
プラットフォームによってはいまだに使えないのかも。
0353デフォルトの名無しさん
2009/06/08(月) 18:55:43このケースは真っ当な使い方だし問題ない
が、>>350みたいにそういう判断ができないなら使うべきではないな
0354デフォルトの名無しさん
2009/06/08(月) 22:18:130355デフォルトの名無しさん
2009/06/08(月) 22:28:06BASICでも同じようなことしてたと思うし。
0356デフォルトの名無しさん
2009/06/08(月) 23:45:37「これは真っ当」というけど、intでoverflowの心配はしなくていいの?
別に一般にcastが良いか悪いかは別としてこの場合の素朴な疑問。
0357デフォルトの名無しさん
2009/06/09(火) 00:33:410358デフォルトの名無しさん
2009/06/09(火) 00:35:52それなら今回のケースは情報不足で
> このケースは真っ当な使い方だし問題ない
と言い切る根拠は無いように思うが。
0359デフォルトの名無しさん
2009/06/09(火) 02:53:47根掘り葉掘り前提を聞かないと、うかつにコメントしちゃいけないのもどうかと思うが。
0360デフォルトの名無しさん
2009/06/12(金) 00:09:27>浮動型の値を整数型に変換するときには、小数部分は無視される
とあるんだけど、実数xの少数分 x-[x] なので、例えば-2.3の整数部分は-3となり、
(床関数:http://ja.wikipedia.org/wiki/%E5%BA%8A%E9%96%A2%E6%95%B0)
結局、int a = -2.3 の結果は -3であるべきかな?かなかな?
0361デフォルトの名無しさん
2009/06/12(金) 00:34:11いや、それは-2になる。
ここで言う小数部分を無視というやり方は、数学的定義とは関係なく
(絶対値が)0に近づく方向へ切り捨てるということ。
ここまで書いてから気付いたが、その記事の下の方にC言語の場合もきちんと書いてあるじゃないか。
0362デフォルトの名無しさん
2009/06/12(金) 00:41:50>『独自研究』に基づいた記述
と書かれていますね。
0363デフォルトの名無しさん
2009/06/12(金) 00:50:033.2.1.3 Floating and integral
There was strong agreement that floating values should truncate toward zero when converted to an integral type,
the specification adopted in the Standard. Although the Base Document permitted negative floating values to
truncate away from zero, no Committee member knew of current hardware that functions in such a manner.
[Footnote: We have since been informed of one such implementation.]
整数型への変換時に浮動小数点数はゼロに向かって切り捨てるように強く言われた。
規格でも標準で採用した。でも、元にしたドキュメントでは負の浮動小数点数は
ゼロから離れる方に切り捨てることを認めていた。当時の委員の誰一人として現行のハードウェアがこのように振る舞うとは知らなかった。
[注釈: 我々委員会はそのような実装を伝えられていた。]
適当に訳したので間違っているかもしれない。
元にしたドキュメントは、負数の時はどっちでも良かったけど、
この規格では、ゼロに向かって切り捨てますよん。ってことだと思われる。
0364デフォルトの名無しさん
2009/06/12(金) 01:01:57これで安心して負数を丸められる。
0365デフォルトの名無しさん
2009/06/12(金) 01:02:05きちんと英語版のノートでは、規格で0方向への丸めだと指摘されている。
0366デフォルトの名無しさん
2009/06/14(日) 01:49:25#include <string>
#include <fstream>
using namespace std;
int main(){
string str;
fstream file;
file.open("test.txt",ios::in);
file>>str;
file.close();
int h=str.length();
cout << h<<endl;;
const char *seq1 = new char[h];
seq1=str.data();
delete[] seq1;
}
これどこか悪いですかね?実行時に強制終了になってしまう。
削っていって原因の箇所を特定したところ、delete[] seq1; の一行が悪いみたいなんですが、正直何が悪いかが理解できんのです。
bcc5.5で作業中です。
0367デフォルトの名無しさん
2009/06/14(日) 02:04:06これじゃよ。data() や c_str() の仕様をみるのじゃ。
記録するな。使ったらすぐ捨てろ。わかったな、今畜生。
0368デフォルトの名無しさん
2009/06/14(日) 02:05:26やっぱり釣りなのね?
釣りに決まってる。
釣りではないなんていわせない。
釣りでなくちゃおかしい。
釣りだよね?
釣 り だ よ ね?
0369デフォルトの名無しさん
2009/06/14(日) 02:11:52つまりはチンカス以下。チンチンの先っちょについたティッシュのカスを師と崇めて行けというほどの。
ちょっと出直してくる。ありがとうござました。
0370デフォルトの名無しさん
2009/06/14(日) 02:16:22#include <algorithm>
seq1 = str.data(); → std::copy(str.begin(), str.end(), seq1);
別にmemcpyでもいいんだけど。
0371デフォルトの名無しさん
2009/06/14(日) 02:21:00> const char *seq1 = new char[h];
配列 new なんか使うからだ。
std::vector<char> seq1(str.begin(), str.end());
にしとけば int h も delete seq1 も要らない。
0372デフォルトの名無しさん
2009/06/14(日) 02:22:41そもそもstringのまま扱うのでいい気がしてくる。
0373デフォルトの名無しさん
2009/06/14(日) 18:57:00string seq1;
とすればいい。コピーする手間もない
0374デフォルトの名無しさん
2009/06/14(日) 19:40:25vc++なのですが、ダブルクリックするとAP画面を開きだすタイプのexe(コマンドプロンプトが開くタイプではないexe)の
ソースコード内にて『cout文』が記述されています。
コマンドプロンプト以外のどこかに内容が出力されていたりするんでしょうか?
分かりにくいと思いますが、よろしくお願いいたします。
0375デフォルトの名無しさん
2009/06/15(月) 09:27:30恐らく、電子の藻屑と消えています。
0377デフォルトの名無しさん
2009/06/16(火) 09:22:17詳しくは環境依存C/C++スレかWinAPIスレ辺りで。
0378デフォルトの名無しさん
2009/06/30(火) 00:19:00奴は引退したんだな。
0379デフォルトの名無しさん
2009/06/30(火) 00:43:00うちのLinuxはアップデートしてもいなくなってなかったよ
0380デフォルトの名無しさん
2009/06/30(火) 01:06:000381デフォルトの名無しさん
2009/06/30(火) 09:55:510382デフォルトの名無しさん
2009/06/30(火) 19:01:01あるいは%bを
0383デフォルトの名無しさん
2009/06/30(火) 21:09:00それにしてはatoi()にはstrtol()という基数変換関数が用意されているし
いまいち対称性に欠けるよなあ
0384デフォルトの名無しさん
2009/07/01(水) 09:11:550385デフォルトの名無しさん
2009/07/01(水) 10:38:00昔のCは昔のFORTRANと同じく識別子は先頭の6文字しか
認識しなかったからなあ
だから無秩序な切り詰めで読みにくいったらありゃしない
create()かcreat()になっているし
この当たりはK&Rのジョークにも出てくるが
0386デフォルトの名無しさん
2009/07/01(水) 11:17:530387デフォルトの名無しさん
2009/07/01(水) 18:37:21creatについては字数制限だという風に広まった方が彼も喜ぶか
0388デフォルトの名無しさん
2009/07/01(水) 19:48:48win32コンソールアプリでプロジェクトを作ると古いwinbase.hが
インクルード対象になってGetProcessHandleCountなどが
定義されていません。
プラットフォームSDKのwinbase.hだと定義されてます。
これはwin32コンソールアプリでは新しいAPIをサポートしていないと
言うことでしょうか。
無理やり古いwinbase.hに突っ込んだら動くには動いたのですが
別の方法で新しいAPI関数を、コンソールアプリで使う方法は
ないでしょうか?
0389デフォルトの名無しさん
2009/07/01(水) 22:47:350390388
2009/07/02(木) 14:34:04読み込むインクルードファイルのパスを
変えるということでしょうか。
調べてみます。
0391デフォルトの名無しさん
2009/07/02(木) 20:46:04VC++なら設定のとこで上下に動かして優先順位変えられるべ
0392388
2009/07/03(金) 01:03:15設定できるところが見つかりません。
もうちょっと調べてみます。
0393デフォルトの名無しさん
2009/07/03(金) 02:09:35WINVERとかを設定していないだけということはないよな?
0394デフォルトの名無しさん
2009/07/03(金) 10:49:13VCの基本だが、、、ツール - オプション - プロジェクトおよびソリューション - VC++ディレクトリ
プラットフォーム[Win32] ディレクトリを表示するプロジェクト[インクルードファイル]
で該当のインクルードパスを追加、もしあるなら上に移動
0395392
2009/07/03(金) 18:24:08みてみたのですがオプションのプロジェクトとソリューションの下に
VC++の階層がありませんでした。
なぜ出ていないのか調べてみます。
0396デフォルトの名無しさん
2009/07/03(金) 21:28:580397395
2009/07/04(土) 01:24:57見当たらないです。
VBの環境設定と、もう一つなんかしかないんです。
何が悪いのやら・・・
0398デフォルトの名無しさん
2009/07/04(土) 01:38:24変だなあ、、、設定のインポートとエクスポートからリセットしてみては・・・
0399397
2009/07/04(土) 11:12:02設定のインポートとエクスポートはありました。
それで初期化して見ます。
非常に助かります。
結果、ご報告させていただきます。
0400399
2009/07/06(月) 10:06:25設定のインポートとエクスポートで
環境の初期化ができました!
早速ディレクトリを色々いじってみます。
0401デフォルトの名無しさん
2009/07/06(月) 10:49:35いじる前に初期化した状態でビルドしてみたらどう?
0402400
2009/07/06(月) 15:21:49設定初期化後にビルドしても識別子が見つかりませんになりました。
インクルードファイルの上位をSDKにしてもだめでした。
また、コンソールアプリのwinbaseには_WIN32_WINNTの
定数が0500までしかなかったので0501以降のAPIは事実上
未対応なのがコンソールアプリの習いなのでしょうか。
インクルードの優先設定に間違いがないか調べてみます。
0403デフォルトの名無しさん
2009/07/06(月) 16:29:59$(VCInstallDir)atlmfc\include
$(VCInstallDir)PlatformSDK\include
$(FrameworkSDKDir)include
特に変更してない、うちの環境はこんな順になってる。
0404402
2009/07/06(月) 18:02:09自分の環境も同様に無印が一番上でした。
となるとインストールパッケージのせいなんでしょうか。
自分のはプロフェッショナルのSP3でした。
0405デフォルトの名無しさん
2009/07/07(火) 01:33:09それと、ホビープログラマさんがなんでわざわざプロフェッショナル版を買っちゃった(んだよね?)の?
0406デフォルトの名無しさん
2009/07/07(火) 01:55:39自分もお金合ったらプロフェッショナル版ほしかったなぁ。
あの赤いパッケージが3倍開発速度が速くなりそうな感じがしていい。
0407404
2009/07/07(火) 10:14:45visual studio 8フォルダのvcフォルダ直下のincludeフォルダ内のwinbaseです。
ファイルの日付も古いのでコンソールでは新しいAPIは対応してないのかと
思いました。
プロフェッショナルバージョンを購入したのは
おっしゃる通り目標でして。。
今は事務なのですがいつかは開発に行くのが目標なんです。
0408デフォルトの名無しさん
2009/07/07(火) 14:35:05うちはここにはwinbase.hないなあ。
ちゃんと情報出しとけば7/2ぐらいにはいろいろ解決できてただろうね。
0409407
2009/07/07(火) 22:30:29$(VCInstallDir)includeを最上にした状態で、リビルドしたら
上手くいきました!
includeの参照がPlatformSDKに変わってました。
先達の皆様、色々とありがとうございました。
0410デフォルトの名無しさん
2009/07/09(木) 23:29:34#define N 10
int main(void){
int i, j = 1, x, y;
int d[N][N]={};
/* 三角形を作成 */
for (i = 1 ; i < N ; i++, j = 1){
d[i][0] = 1;
while (j <= i - 1){
d[i][j] = d[i-1][j-1] + d[i-1][j];
j ++;
}
}
/* 三角形の表示 */
for (y = 0; y < N; y++) {
for (x = 0; x < N-y-1; x++)
printf(" ");
for (x = 0; x < y; x++)
printf("%5d ", d[y][x]);
printf("\n");
}
return 0;
}
http://pc12.2ch.net/test/read.cgi/tech/1245853701/835
http://pc12.2ch.net/test/read.cgi/tech/1246342847/440
これでどうかな?
0411デフォルトの名無しさん
2009/07/12(日) 09:10:310412デフォルトの名無しさん
2009/07/14(火) 23:10:33・ヘッダファイル名をタイプミスした
のどっちかじゃないかなあ?
http://pc12.2ch.net/test/read.cgi/tech/1244942050/957
http://pc12.2ch.net/test/read.cgi/tech/1245059383/785
0413デフォルトの名無しさん
2009/08/14(金) 17:15:35で作成したVC++のアプリが
Net3.5を入れないと「構成が正しくない…」のエラーで
起動出来なかったのですが
ネイティブなWin32アプリのはずなのに
別途ランタイムが必要だったのはなぜでしょうか?
構成やコードを何度も見直しましたが
Win32 APIしか使用してません
0414デフォルトの名無しさん
2009/08/16(日) 18:45:59Visual Studio 2008なんてC++しか使わない人でも
C#をインストールしなければならないという罠を実装。
0415デフォルトの名無しさん
2009/08/16(日) 20:06:290416デフォルトの名無しさん
2009/08/16(日) 23:59:19/MTでやっとくと解決するかもね
0417デフォルトの名無しさん
2009/08/17(月) 13:28:480418デフォルトの名無しさん
2009/08/17(月) 20:02:59/MTでやったらエラーは出ず
Net3.5を入れなくても動作しました
>>417
もちろんリリースビルドのexeです
VS2008で作ったのをXP SP2で確認したのだけど
特別なAPIを使った訳でもないし
ネイティブなWin32アプリが動かなかった原因は未だ分からず
0419417
2009/08/18(火) 00:27:15状況から察するに別マシンで動かしてるんだよね
もちろんリリースビルド、というのだから、もちろんランタイムDLLも別マシンにインストールしている?
0420デフォルトの名無しさん
2009/08/18(火) 04:20:34クライアント側は他にランタイムは不要じゃないの?
自分は開発したことないから詳しくは知らないけど
0421デフォルトの名無しさん
2009/08/18(火) 09:58:07/MTはスタティックリンク
/MDはダイナミックリンク(DLL)
0422デフォルトの名無しさん
2009/08/19(水) 00:12:37その場合、.NET Frameworkを入れずともVisual C++ランタイムだけをインストールすればいい。
現在、最新のはこれ。
VC++ 2005
http://www.microsoft.com/downloads/details.aspx?FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2&DisplayLang=ja
VC++ 2008
http://www.microsoft.com/downloads/details.aspx?FamilyID=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=ja
0423デフォルトの名無しさん
2009/08/19(水) 02:31:50みんな正解を言っている。
そんで、Win32APIだけしか使っていないのにmsvcrtを入れなければならない理由は何?
というとこまで進んでたんじゃないの?
0424デフォルトの名無しさん
2009/08/19(水) 02:34:32ランタイムをインストールしたが動かない
→Debugビルド版のdllは頒布されていない
という穴にはまりやすいという点で有意義
0425デフォルトの名無しさん
2009/08/19(水) 14:26:00ランタイムから何らかの機能を使っていて
単独では動作不可ということか
そのランタイムは何かと一緒にインストされる事多いし
普段は目に見えない部分だから勉強になるなぁ
0426デフォルトの名無しさん
2009/08/19(水) 17:34:19本当にWin32 APIだけで組めばCランタイムはいらないよ。
printf()もmalloc()もスタートアップルーチンも使えないけどな。
0427デフォルトの名無しさん
2009/08/19(水) 17:39:440428デフォルトの名無しさん
2009/08/19(水) 17:51:200429デフォルトの名無しさん
2009/08/20(木) 21:24:16AfxBeginThreadを使ってマルチスレッド処理をおこなっているのですが、
制御関数の中でreturnして終わらせているはずなのに、
AfxBeginThreadの戻り値のCWinThread*が生きたままになっています。
そこで制御関数の中でおこなっているreturn処理に問題があるのではないかと
考えているのですが、
rerturn 0
と
return -1
ではスレッド終了の動作に何か違いがあるのでしょうか?
0430429
2009/08/20(木) 22:22:31CWinThread* th;
th = AfxBeginThread(func,this);
uint aaa::func(LPVOID lpvThis)
{
〜略〜
if(){
return 0;
}
else{
return -1;
}
}
1.AfxBeginThread内でreturnした時点でスレッド自体は終了しているが、『th』は生成されている。
(th->m_hThreadはnullだがthはnullではない)という認識でよろしいでしょうか?
2.returnされた値が0か-1で動作上違いはあるのでしょうか?
3.returnされた値が0か-1でthの中身は違うのでしょうか?
0431デフォルトの名無しさん
2009/08/20(木) 23:27:28自動で破棄されるようにするには、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームする。
0432429
2009/08/21(金) 10:36:16あれからいろいろ調べました。
430の問について
>>2.returnされた値が0か-1で動作上違いはあるのでしょうか?
ない。GetExitCodeThreadを使って戻り値を判別しようと思えばできる。
>>3.returnされた値が0か-1でthの中身は違うのでしょうか?
違わない。AfxBeginThreadが実行された時点でthは生成される。
制御関数内でreturnされた値によって生成される、されないが決まるものではない
(厳密に言うとreturnされた時点でth->m_hThreadの値が変わるので、違うといえば違うのだが、、、)
というところまでです。
まだ分からないのが1なのですが、
一度生成された『th』が自動的にnullになることはあるのでしょうか?
431さんの言うとおり、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームすれば
『th』は自動的にnullになるのでしょうか?
逆にサスペンド状態で開始せず、リジュームしない状態ならばth』が自動的にnullになることはありえないのでしょうか?
431さん、ありがとうございます。
m_bAutoDeleteなのですが、あれって初期値はtrueですよね。
m_bAutoDeleteがtrueの場合はサスペンド状態で開始、リジューム等の処理をおこなわなくても自動的に破棄されるのでしょうか?
0433デフォルトの名無しさん
2009/08/21(金) 13:48:43{
private:
int a;
public:
setValue(int val); // valをaに格納
};
CTest test;
test.setValue(10);
sprintf(buff,"%d",test);
こうやると10がbuffに出力されるんですが
これはよくないやり方ですよね (稀に不正な結果になりました)
test+=10;
if (test>=10) ...
++test;
int val=(int)test;
こういうのはoperatorを使えばaを対象にさせることができますが
sprintf(buff,"%d",test);
やはりこういうふうにtest単体だけを置いても
実際にはtest.aが返るようにするのは無理でしょうか?
何らかのoperatorが暗黙で呼ばれないかと思ったのですが
どれを使っても駄目でした
0434デフォルトの名無しさん
2009/08/21(金) 13:59:53一応C++ではiostreamを使うべしということになっている
0435デフォルトの名無しさん
2009/08/21(金) 15:49:04intへの変換を定義して
sprintf(buff,"%d",(int)test);
ってやるのは?
0436デフォルトの名無しさん
2009/08/21(金) 17:45:22iostreamって<<とかするやつですよね?
これってあらゆるケースで機能するんでしょうか?
出力以外でも普通の変数のように振舞いたいんです
//void func(int);
func(test); // test.aが渡ってほしい
>>435
もちろんoperator intなどもやってます
でもこの書き方はintという型でほしいからであって
普段は型を意識しないようにしたいんです
0437デフォルトの名無しさん
2009/08/21(金) 17:58:19> //void func(int);
> func(test); // test.aが渡ってほしい
intへの変換が定義されていれば、そのように振る舞う
> 普段は型を意識しないようにしたいんです
プログラマが型を意識せず、引数の型を意識しないprintf系関数を用い、誰が型を判断するのか。
ビャーネはそれが嫌いでiostreamを使うようにすべきと主張しているのではないか
0438デフォルトの名無しさん
2009/08/21(金) 19:34:19>> func(test); // test.aが渡ってほしい
>intへの変換が定義されていれば、そのように振る舞う
おっとすいませんこれは問題なかったですね
型がわからないsprintfなどが問題でした
>ビャーネはそれが嫌いでiostreamを使うようにすべきと主張しているのではないか
うーんなるほど
ちょっとiostreamを考えてみます
0439デフォルトの名無しさん
2009/08/22(土) 00:12:28ポインターを使ってアドレス渡しをする方法以外に
何かないでしょうか?
printfの変数指定する引数のような感じです
0440デフォルトの名無しさん
2009/08/22(土) 01:15:44printf: 可変個引数(1番目の引数、書式文字列で引数の型を判別)
iostream: 想定される型に対して全部多重定義しておく
ほか、場合によってはテンプレートやBoost.Anyという手も使える。
0441デフォルトの名無しさん
2009/08/23(日) 13:24:37なら template が一番自然に思う。swap みたいに。ただ、swap は
定義されてるし、アドレス与えてるけど。
0442デフォルトの名無しさん
2009/08/25(火) 05:41:24C++でオブジェクトを作るとき
1)MyObj = a;
2)MyObj = new MyObj();
上の違いって、1はスタック上にオブジェクトを作っている
2はヒープ上にオブジェクトを作っている
というような解釈でいいのでしょうか?
ということはJavaやC#は、基本的にプリミティブタイプ以外
オブジェクトはすべてヒープ上に作られているということですか?
0443デフォルトの名無しさん
2009/08/25(火) 07:44:101)と2)の例がおかしいし、C++がそうだとしてそれをJavaやC#にも当ては
めるのは論理的ではない。
0444デフォルトの名無しさん
2009/08/25(火) 12:17:33すみません
1)MyObj a;
でした・・・
理論的ではないのでしょうか?
C++でもヒープ上で使われなくなったオブジェクトをガービッジと呼ぶと聞いたので根本的な部分は一緒なのかな、と思いまして・・・
0445デフォルトの名無しさん
2009/08/25(火) 12:37:23・>443は「論理的ではない」と指摘している。「理論的」かどうかは言及していない。
・例がおかしいのは結局直っていない。
・「ヒープ上で使われなくなったオブジェクト」は「ガービッジ」とは呼ばれない。
・JavaやC#の実装がC++と同じである保証はない。
0446デフォルトの名無しさん
2009/08/25(火) 13:00:250447デフォルトの名無しさん
2009/08/25(火) 13:03:02この辺はどれでもまあ通じるからいいかなって思うわ
ガベッジはイマイチ。
0448デフォルトの名無しさん
2009/08/25(火) 14:49:20いやgarbageって呼ばれるから。出直してこい
0449429
2009/08/25(火) 15:55:43AfxBeginThreadにて生成されたスレッドのm_bAutoDeleteの値がtrueであるにもかかわらす
破棄されないことがあるのはなぜでしょうか?
0450デフォルトの名無しさん
2009/08/25(火) 16:02:08で、文意を汲みとってあげると
1) MyObj a;
2) MyObj* a = new MyObj;
だとして、C++でさえ1がスタックで2がヒープとは限らない。
まあ普通に使われるWindowsやUNIXの処理系なら、前者はグローバル変数
やstatic変数じゃない自動変数ならスタックに確保されて、後者は
operator newで変なことしてなければヒープに置かれると思う。
C#やJavaでどうなるかは、処理系のソースを見たことないので何とも言
えない。処理系がじゅうぶん賢ければ、newしてたってスタック上にオブ
ジェクトを置くことは技術的に可能だと思う。
0451デフォルトの名無しさん
2009/08/25(火) 16:52:40逆に、MyObj a;をヒープに置くのは、C++/CLI(VC++で.NET Frameworkを対象にコンパイルしたとき)で行われることがある。
まあ、そんな例外的な事象もある。
0452デフォルトの名無しさん
2009/08/25(火) 16:58:20AfxEndThreadは呼んでるのかな
0453429
2009/08/25(火) 17:27:49制御関数を終わらせるにはreturnとAfxEndThreadの2つの方法が存在するが、
どちらでもOKだという認識です。
これが既に間違っているのでしょうか?
現在は431さんの方法
>m_bAutoDeleteがFALSEの場合はスレッド作成側で破棄しないとダメだよ。
>自動で破棄されるようにするには、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームする。
で試しています。
0454デフォルトの名無しさん
2009/08/25(火) 17:47:03正常終了じゃないのにreturnで終わってるとか。
0455デフォルトの名無しさん
2009/08/25(火) 18:05:37class Test01 {
protected:
int hoge01, hoge02;
public:
Test01();
~Test01();
}
// コンストラクタ
Test01::Test01() : hoge01(10), hoge02(20) {}
の様な部分があるんですがこの Test01::Test01() の後に続く : hoge01(10), hoge02(20) という記述の仕方は一体なんなんですか?
その後のプログラムの動作からメンバ変数に値を代入しているというのは分かるのですが、どうもはっきりしてなくもやもやします。
なのでこの書式の具体的な動作と名称を教えて下さい。
0456429
2009/08/25(火) 18:15:16正常終了じゃないときはreturnで終わらせてはいけないのでしょうか?
あと正常終了かどうかはどうやって判断すればいいのでしょうか?
自分の作った独自のロジックの中での正常かエラーかなんて
AfxBeginThreadの戻り値には関係ないと思うのですが、、、
それとも制御関数の中でエラーが発生してスレッドが落ちてしまった時に
AfxBeginThreadの戻り値はnullに戻らずそのままになってしまうということなのでしょうか?
ついでにそのときに画面には何もエラーが出てこないものなのでしょうか?
0457デフォルトの名無しさん
2009/08/25(火) 18:20:49俺もよく知らないで書いてんだけどね。
これ見ると正常終了以外はreturn使ってはいけないように見えるよね。
http://msdn.microsoft.com/ja-jp/library/2s21xzfe(VS.80).aspx
スレッドで使用しているリソースはすべて解放し終わってから抜けてる?
0458デフォルトの名無しさん
2009/08/25(火) 18:26:11メンバ変数を初期化する初期化子
初期化と代入の違いはメンバ変数がクラス型になるとわかる
0459429
2009/08/25(火) 18:28:09本当ですね。
スレッドの正常終了は
「 AfxEndThread 関数を使うことも、return ステートメントを使うこともできます。」
と書かれているのに対し、
スレッドの中断は
「終了するスレッドから AfxEndThread を呼び出すだけです。」
と書かれていて、returnには一切触れていませんね。
何でもかんでもreturnで返しているのが原因かなぁ、、、
0460デフォルトの名無しさん
2009/08/25(火) 18:35:44ありがとうございます
0461デフォルトの名無しさん
2009/08/25(火) 18:58:49メンバ変数のコンストラクタ呼び出し
作成時にパラメータを必ず受け取る必要のあるクラスオブジェクトや基本クラスがあるときなんかに必要になる
ちなみに変数名(初期化データ)はローカル変数宣言時でも使える, 代入演算処理が不要になるおまけつき
void hoge(){ int a(0); // aを0で初期化 };
0462デフォルトの名無しさん
2009/08/25(火) 19:08:50ご丁寧にどうもありがとうございます、参考になりますm(_ _)m
0463デフォルトの名無しさん
2009/08/25(火) 19:58:05少なくともreturnで終了させる場合はデストラクタも呼ばれ正常終了する。
異常終了とはデストラクタが呼ばれないことを覚悟して強制終了させることだと思う。
http://msdn.microsoft.com/ja-jp/library/2s21xzfe(VS.80).aspx
はAfxEndThreadで終了させる場合にデストラクタが呼ばれるとはどこにも書いてない。
MFCのAfXEndThreadは知らないが、Win32のEndThreadはデストラクタは呼ばれない。
ランタイムの_endthreadExも同様だけど、returnで終了した場合はデストラクタが呼ばれてから_endthreadEx
が呼ばれるので問題ない。
0464デフォルトの名無しさん
2009/08/25(火) 19:59:27Win32のEndThread X
Win32のTerminateThread O
0465429
2009/08/25(火) 20:53:01そうなんですか、詳しい説明、ありがとうございます。。。
原因わけとして、returnで返すことは何も悪くないと。
デストラクタが呼ばれないと、スレッドが生きたままになってしまうことがあるということか、、、
長い間ありがとうございました。
0466デフォルトの名無しさん
2009/08/25(火) 20:58:02Hoge* ptr = reinterpret_cast<Hoge*>(pool);
というコードがあったとして、
delete ptr; よりも delete [] pool; が呼び出された場合、
ptrは解放されずにメモリリークを起こすことになるんでしょうか?
0467デフォルトの名無しさん
2009/08/25(火) 21:03:05delete は new した char[100] に対してのみ行うべき
0468デフォルトの名無しさん
2009/08/25(火) 21:20:330469デフォルトの名無しさん
2009/08/25(火) 21:21:05なるほど。
newはnew、キャストはキャストってことですね。
ありがとうございます。
0470デフォルトの名無しさん
2009/08/26(水) 02:42:25だからといって ptr を用いてdeleteできるとは思わんがね
0471デフォルトの名無しさん
2009/08/26(水) 10:06:160472デフォルトの名無しさん
2009/08/27(木) 19:08:10としてaとbの配列を結合したい場合
新しい配列へ最初にa、次にbと
ループでコピーする以外に良い方法はありませんか?
強引に普通のcharとしてstrcatすると
当然ながら上手く結合されなくて
0473デフォルトの名無しさん
2009/08/27(木) 19:13:320474デフォルトの名無しさん
2009/08/27(木) 20:20:22助かりました
0475デフォルトの名無しさん
2009/08/29(土) 03:00:17先頭から削除領域までをコピーしたファイルを新たに作り
その後前のファイルを消すやりかたではなくて
直接その領域を無効化するにはどうすれば良いですか?
0476デフォルトの名無しさん
2009/08/29(土) 03:15:13対象 OS のファイル操作 API を調べると良いよ。
0477デフォルトの名無しさん
2009/08/29(土) 08:25:48SetFilePointerで削除したいところまで移動させて
SetEndOfFileで切り捨てられる
0478デフォルトの名無しさん
2009/08/29(土) 15:14:49感謝します
0479デフォルトの名無しさん
2009/08/30(日) 01:59:29のように末尾に付く
Lの意味や読み方ってなんでしょう?
0480デフォルトの名無しさん
2009/08/30(日) 02:02:15読み方は「エル」でいいんじゃね?
0481デフォルトの名無しさん
2009/08/30(日) 02:03:45整数リテラルの型を long にする指定。
読み方って、どういうこと?「える」とか、そういうの?
0482デフォルトの名無しさん
2009/08/30(日) 02:04:290483デフォルトの名無しさん
2009/08/30(日) 02:13:270484名無しさん@そうだ選挙に行こう
2009/08/30(日) 03:45:260485デフォルトの名無しさん
2009/09/05(土) 19:54:04自動で最終行へスクロールするようにしたいのですが
LB_GETCOUNTで項目数取得 → LB_SETCURSELでその行へ移動
とやっても上手く行きません
どうやればいいでしょうか?
0486デフォルトの名無しさん
2009/09/05(土) 20:02:23最初から連結したバイト列を保存する配列を用意しておいて、
前半をAとして使って後半をBとして使うのではダメなのか?
>>485
そのあんたの使っているリストボックスとやらが含まれているライブラリのマニュアルを読んでください。
私には、それがどんなものかは想像するくらいしかありませんから。
0487デフォルトの名無しさん
2009/09/05(土) 20:29:28LB_SETCURSELのインデックスは0からのはずなのでLB_GETCOUNTの行は範囲外ではないか?
0488デフォルトの名無しさん
2009/09/06(日) 01:42:00ComboBoxへリストとして追加したいのですが
改行ごとの読み込み処理は皆さんどうやっていますか?
現在C++へ移行中で.NetではReadLineで簡単に出来たのですが
なかなか良い方法が見つからず数日ほど悩んでいます
0489デフォルトの名無しさん
2009/09/06(日) 02:02:460490デフォルトの名無しさん
2009/09/06(日) 09:47:42改行単位で読むだけなら getline じゃないの?
0491デフォルトの名無しさん
2009/09/07(月) 23:05:18大きさを制限する方法なら沢山出てくるのに
矢印自体を無効化する方のが見つからない
案外スタイル指定だけで出来たりするのかな
0492デフォルトの名無しさん
2009/09/07(月) 23:10:160493デフォルトの名無しさん
2009/09/08(火) 16:42:30その通り
0494デフォルトの名無しさん
2009/09/26(土) 03:42:47{
//処理A
//処理B
}
より
for (int i=0;i<N;i++)
{
//処理A
}
for (int i=0;i<N;i++)
{
//処理B
}
と書いた方が速くなるときがあるのですが、何故だかがわかりません。
考えられる理由を教えてください
0495デフォルトの名無しさん
2009/09/26(土) 03:52:151.キャッシュに乗った
2.loop unrollが効いた
0496デフォルトの名無しさん
2009/09/26(土) 13:04:41釣りじゃないなら、Nの値と処理A,Bの内容を示せよ
あと時間測定の方法も
0497デフォルトの名無しさん
2009/09/26(土) 13:09:04QueryPerformanceCounter() を使って自動的に測定させればよい
SetPriorityClassを使うのはバックグラウンドでいらないプロセスが動いて
測定値にバラツキが出るのを防ぐため
測定後に元に戻しておかないと大変な事になる(再起動)
0498デフォルトの名無しさん
2009/09/30(水) 02:44:19どっちかのループでSSEが効いたんじゃない?
0499デフォルトの名無しさん
2009/10/18(日) 10:00:21関数を書きました。そのメソッドはクラスのprivate変数を変更するメソッドです。
デバッグプリントを追加して、メソッドが呼ばれている事や、
メソッドによってprivate変数が変更されている事を確認したのですが。
その関数を実行した次の行でそのprivate変数を確認するともとに戻ってしまっています。
適切に変更したいのですが、よろしくお願いします。
OS:MacOSX 10.6
Compiler: g++ 4.2.1
よろしくお願いします。
0500デフォルトの名無しさん
2009/10/18(日) 10:05:43引数の型はなにかね?
0501デフォルトの名無しさん
2009/10/18(日) 10:19:33独自で作ったHogeクラスのインスタンスです。
void FooBar (Hoge x)
{
x.SetX(10);
}
みたいな感じで使っています。
Hoge baz;
FooBar(baz); //ここでbazのprivate変数Xは10にかわったはず!!
baz.GetX() //なぜかここの返り値がもとのXのまま
といった感じです。
0502デフォルトの名無しさん
2009/10/18(日) 10:23:54bazとxのアドレス確認してごらん。
0503デフォルトの名無しさん
2009/10/18(日) 10:26:00bazのポインタを引数に渡せばいいという事でしょうか?
0504デフォルトの名無しさん
2009/10/18(日) 10:29:530505デフォルトの名無しさん
2009/10/23(金) 09:01:300506デフォルトの名無しさん
2009/10/23(金) 10:22:17std::vector<int> vB;
// vAに値をpush_back
vB.reserv(vA.size());
std::copy(vA.begin(), vA.end(), vB.begin());
としたときに vB.size() でサイズを取得するには何か細工が必要ですか?
0507デフォルトの名無しさん
2009/10/23(金) 10:23:42http://tech.ckme.co.jp/cpp/cpp_round.shtml
0508506
2009/10/23(金) 10:42:220509デフォルトの名無しさん
2009/10/28(水) 05:31:060510デフォルトの名無しさん
2009/10/28(水) 09:06:03それにしても、「実行ファイルのディレクトリ」とは「実行ファイルのあるディレクトリ」なのか
「実行ファイルを起動したときのディレクトリ」なのかはっきりしないもんだな。
0511デフォルトの名無しさん
2009/10/28(水) 22:00:440512デフォルトの名無しさん
2009/10/28(水) 22:40:41やめてくれないか。
0513デフォルトの名無しさん
2009/10/28(水) 23:00:36GetModuleFileName
_fullpath
とか、使って
0514デフォルトの名無しさん
2009/10/28(水) 23:42:32「実行ファイルを起動したときのカレントディレクトリ」と言いたいのだと思う。
0515デフォルトの名無しさん
2009/10/29(木) 02:13:320516デフォルトの名無しさん
2009/10/30(金) 03:42:49ビットコピーをすると教わりましたが
stlコンテナを含む自作クラスについて
それをすると問題が起こりませんか?
大丈夫ですか?
代入してスコープ抜けるとき
コピー先の奴が元のを破棄してしまいませんか?
0517デフォルトの名無しさん
2009/10/30(金) 04:50:35> デフォルトのコピーコンストラクタは
> ビットコピーをすると教わりましたが
それは、うそだ。
0518デフォルトの名無しさん
2009/10/30(金) 06:57:24では全てのメンバオフジェクトに
operator=を適用するのですか?
0519デフォルトの名無しさん
2009/10/30(金) 07:38:15コピーコンストラクタならコピーコンストラクタ。
operator= なら operator= 。
0520デフォルトの名無しさん
2009/10/30(金) 07:40:49アハ!悟った!
あり^^
0521デフォルトの名無しさん
2009/11/13(金) 18:43:32long a = 3210;
double b = 23.456789;
long y = (a*3.1415) - (b+10.5) * 6.28;
例えばこうやって変数yを求めた場合、
「計算の為に見えない変数が確保され、メモリを消費する」という現象は起きるのでしょうか?
もしそうだとするならば、
long a = 3210;
double b = 23.456789;
double c = a*3.1415;
double d = (b+10.5) * 6.28;
long y = c - d;
こうやって(計算式がもっと長ったらしい場合)コードの可視性を良くしておいても
メモリ消費や、処理の負荷は変わらなかったりするのでしょうか?
それとも何かルールが有るのでしょうか。
「このURL読んで来い」とかだけでも何でも構いませんので、
情報を教えて頂けると助かります、よろしくお願いします。 orz
0522デフォルトの名無しさん
2009/11/13(金) 18:47:34気にするな、コンパイラは善きに計らってくれる。
0523デフォルトの名無しさん
2009/11/13(金) 18:50:51どうしても気になるなら、(最適化ありで)コンパイラにアセンブリ出力を出させて較べてみればいい。
>521が全てなら、恐らくはyが即値で得られるだろう。
0524デフォルトの名無しさん
2009/11/13(金) 20:51:29アセンブリ出力・・やってみて確認してみようと思います。
ありがとうございました。 orz
0525デフォルトの名無しさん
2009/11/13(金) 22:05:01「整数同士の割算」の結果が「整数のみ」か「少数を含む」かを見分ける時、
今はintとdouble2つの割算をし、それらが等しいかif判定しているのですが
もっとスマートな方法をご存知な方はいらっしゃられないでしょうか?
0526デフォルトの名無しさん
2009/11/13(金) 22:40:570527デフォルトの名無しさん
2009/11/14(土) 05:12:31あんまりこういうこと言うスレではないかもしれんけど、正直、一瞬で>>526が
浮かばないようだとヤバくね?
0528デフォルトの名無しさん
2009/11/14(土) 16:04:09仕事でC/C++使ってる人間なら確かにヤバい。
0529デフォルトの名無しさん
2009/11/15(日) 11:17:26成る程。何か効率化の方法が有りそうだとは思ってたのですが
526の式にピンとこず、実際数値を当てて試してやっと理解できました。
アマチュアだけど、センスがないなぁ・・自分。
ありがとうございました。
0530デフォルトの名無しさん
2009/11/15(日) 14:31:500531デフォルトの名無しさん
2009/11/15(日) 15:37:13いえ。知っていてほんの数回は使っていたんですが、実際に余った数値そのものが欲しい時ばかりでした orz
普段少数しか扱ってなくて、余り=何かの数値 という先入観が強かったのも有るかもしれません。
ピンと来れず申し訳ないです。 orz
0532デフォルトの名無しさん
2009/11/15(日) 16:12:09FuzzBuzz問題を解けないのが普通、って話も少し実感できた
0533デフォルトの名無しさん
2009/11/15(日) 16:12:490534デフォルトの名無しさん
2009/11/15(日) 23:27:57積めばそのうちピンと来るようになるさ
0535デフォルトの名無しさん
2009/11/17(火) 19:07:57public継承したDerivedクラスがあり、
そのDerivedクラスは代入演算子=をオーバーライドしてあります。
そんなDerivedクラスのコンストラクタ中で、
�@*this=100;
�Athis->operator=(100);
�Boperator=(100);
�CBase::operator=(100);
これらはして良いコードでしょうか?
0536デフォルトの名無しさん
2009/11/18(水) 00:55:291〜4のどれもコンパイルエラーにならないんで、あとはやりたいことを
書いてもらわない限りはそれ以上の良し悪しを判断できない。
0537535
2009/11/18(水) 06:13:06ありがとうございます。
コンストラクタ中で、thisポインタや代入演算子を使用しても大丈夫なのでしょうか?
ということが伺いたかったのです。
0538デフォルトの名無しさん
2009/11/18(水) 08:31:52同じじゃねーか馬鹿。
コンパイルは通る。一定の動作もする。
「大丈夫」かどうかは、少なくともその動作が期待している動作と合致するかどうかによる。
今のところ期待している動作は不明。したがって判別不能。
0539537
2009/11/18(水) 20:03:46ありがとうございました。
0540デフォルトの名無しさん
2009/11/18(水) 23:21:250541デフォルトの名無しさん
2009/11/19(木) 17:39:5910×10のマス目を「0,1,2」で埋める。使わない数字があっても可
それを例
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
0000000000
と言うテキストファイルで出力したい。ファイル名は連番。
すべての可能性を(回転して同一等を排除しない)出力するためのプログラムって
どうやって書いたらいいんでしょうか??
見当が付きません。
0542デフォルトの名無しさん
2009/11/19(木) 17:45:000543デフォルトの名無しさん
2009/11/19(木) 17:49:05100~3だと思ってた…………
えらいことになりますね。
0544デフォルトの名無しさん
2009/11/19(木) 18:07:30今頃気付いた。
0545541
2009/11/19(木) 20:45:31まず10桁の数字を「1,2,3」で埋める。使わない数字があっても可
これなら3^10=59049個で、一つずつファイルに出力は厳しいけど
一覧で表示だけならできそうだ。
1111111111〜3333333333
までの数字で「0,4,5,6,7,8,9」を含む物を削除ってほうがわかりやすいのかな。
まぁそのあとどうやって縦に10桁並べるのかよくわからんけどww
0546デフォルトの名無しさん
2009/11/19(木) 23:10:34char *text;
string str ="testtxt";
int i=0;
int len = str.length();
text = new char[len];
while(i<len){
text[i] = str.at(i);
i++;
}
こうしたんですがもっとこう単純で綺麗に出来ないものでしょうか?
0547デフォルトの名無しさん
2009/11/19(木) 23:44:51whileの代わりにstd::copy(str.begin(), str.end(), text);とかstd::memcpy(text, str.data(), len)とか。
ところで、'\0'の終端がなくていいの?
0548デフォルトの名無しさん
2009/11/20(金) 00:32:490549デフォルトの名無しさん
2009/11/20(金) 01:19:51ループ中の変数 j をファイル名としてテキストファイル"1.txt"〜"8.txt"を
どんどん新規作成していきたいのですが、
「f.open(ji,ios::out)の第一引数は const char*だカス」と怒られます。
こういう場合はどのように行うのでしょうか?
自分で書いてみたものを張ります。
for(int i=0;i<9;i++){
char t_char[10];
sprintf(t_char, "%d", j);
string ji = "";
ji += t_char;
ji += ".txt";
fstream f;
f.open(ji,ios::out)
f.close();
}
0550デフォルトの名無しさん
2009/11/20(金) 01:22:43std::vector<char> text(str.begin(), str.end());
0551デフォルトの名無しさん
2009/11/20(金) 01:23:37ji.c_str()
0552デフォルトの名無しさん
2009/11/20(金) 01:33:49f.open(ji.c_str(),ios::out) かな
0553デフォルトの名無しさん
2009/11/20(金) 03:14:37>>550
ありがとうございます!
0554デフォルトの名無しさん
2009/11/20(金) 12:31:02sprintf(t_char, "%d.txt", j);
fstream f;
f.open(t_char,ios::out)
0555デフォルトの名無しさん
2009/11/21(土) 20:36:18>>552
>>554
ありがとうございます!!
0556デフォルトの名無しさん
2009/11/21(土) 23:20:28char*型 strlen strcpyなどを使いますよね?
UTF-8を扱う場合の変数型や文字列処理の関数はどうなりますか?
0557デフォルトの名無しさん
2009/11/21(土) 23:35:290558デフォルトの名無しさん
2009/11/21(土) 23:42:03UNICODEはワイド文字で、UNICODEとUTF-8は別物ですよね?
0559デフォルトの名無しさん
2009/11/22(日) 01:44:23それはおかしい。
UTF-8はマルチバイト文字に分類される。
UTP-8を直接扱うときはcharとそれを扱う関数を使って問題ない。
0560デフォルトの名無しさん
2009/11/22(日) 01:53:17Unicodeというのはいっぱいある文字を一覧表にしただけだと思ってください。
その一覧表をコンピュータでどのように表現するか、
2バイトで1セットとするコードを使うとか、
4バイトで1セットとするコードを使うとか、
最初の方は1バイトで、大部分は2バイトだけど、いい具合に3バイトとするコードを使うとかetc、etc…
そういうなかのひとつがUTF-8です。UTF-8は可変長バイトです。
Unicodeを扱う場合、localeを正しくセットした上で、
wchar_tとwchar_tを処理するライブラリを使います。
ただし、UTF-8が本当に使えるかどうかは
コンパイラしだいです・・・。
0562デフォルトの名無しさん
2009/11/22(日) 03:26:17UTF-8を単なるバイト列と見なして入力・処理・出力するだけなら、
単なるバイナリデータと同じchar型で扱って何の問題もない。
そのデータ中に'\0'が現れなければ、strlenやstrcpyはうまく動く。
普段使っているマルチバイト文字と改行の扱いが同じならテキストモードでのファイル読み書きもうまくいく。
ここまでlocaleの出番無し。
もちろん、この状態を「本当に使える」と言わないと主張するならそれに賛成するよ。
0563デフォルトの名無しさん
2009/11/22(日) 04:07:31UTF-8はASCII互換部分があるからそういうことができるのかな。
いまいちこの辺はよくわからんです*_*
0564デフォルトの名無しさん
2009/11/22(日) 10:05:16直接文字列操作するなんて考えたくない
0565デフォルトの名無しさん
2009/11/23(月) 15:09:23C言語の基本はとりあえず理解したのですが、実際に自分でプログラムを組もうとした時
はて、真っ黒コンソールで走る、組んでて楽しいプログラムって何だ?と、困っています。
そこで、こんなコンソールのプログラムなら、作ってて面白いし、勉強にもなるんじゃ?といった案をお教えください。
ちなみに、基本情報処理者の資格を一応持っているので、多少のシステム関係の知識はあります。
プログラミング環境は、
・Borland C++ Compiler 5.5.1
・Microsoft Visula Stdio 2005
の二つあります。
どうぞお願いします
0566デフォルトの名無しさん
2009/11/23(月) 15:13:310567デフォルトの名無しさん
2009/11/23(月) 15:19:550568デフォルトの名無しさん
2009/11/23(月) 15:29:160569デフォルトの名無しさん
2009/11/23(月) 16:58:24ハァ?
0570デフォルトの名無しさん
2009/11/23(月) 20:47:18俺も>>564は普通に当然だと思うが
0571デフォルトの名無しさん
2009/11/23(月) 21:21:03テトリスなら2, 30分ぐらいで作れて遊べるから楽しいんじゃない?
昔、流行った頃は電卓に搭載されたぐらいシンプルなものだし
0572565
2009/11/23(月) 21:50:09おぉそうですか。Winプログラムじゃ、"Hello, world"で挫折すると聞いていたもので・・・
窓だと、どのようなプログラムがよいか、よろしければお教えくださいm(_ _)m
>>567
なるほど!いいですね
次の手を思考ルーチンを、自分で考えてみるってのも、楽しいかもしれませんね!
ありがとうございました
>>568
ぐ、やはりWindowsプログラミングですかね、
とりあえずこのソースを打ち込め!的なページを見てみます
>570
テトリスですか!いいですね、、、
mainをぐるぐる回して、関数の戻り値を確認すれば出来るのだろうか…やってみます!
ありがとうございました
0573デフォルトの名無しさん
2009/11/24(火) 00:20:57また、
http://www.amazon.co.jp/gp/product/4797349816/ref=s9_simz_gw_s0_p14_i1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-1&pf_rd_r=0X37K4K5C7P745SGFKF4&pf_rd_t=101&pf_rd_p=463376736&pf_rd_i=489986
この本はCではなくC++を扱ってるように思うのですが、どうなのでしょうか
0574デフォルトの名無しさん
2009/11/25(水) 00:50:20VC++はCも扱える
0575デフォルトの名無しさん
2009/11/25(水) 02:04:41初心者の俺がもってるイメージとしては
c = 関数関数関数関数
cpp = c + クラス他
0576デフォルトの名無しさん
2009/11/25(水) 02:07:32実際のコーディングがまったく違うよ。
0577デフォルトの名無しさん
2009/11/25(水) 19:49:14このまえCだけで全部つくる必要がでたときすごくとまどったな
なんつっても文字列操作が…
0578デフォルトの名無しさん
2009/11/25(水) 23:00:390579デフォルトの名無しさん
2009/11/28(土) 00:24:14class BBB;
class AAA{
BBB *processor;
void do();
}
〜ソース〜
AAA::do(){
BBB &processor = *(this->processor);
processor.execute();
}
プログラミングの出来る友達のソースを見たらこのような記述がありました。
このようにするメリットって何があるのですか?
友達にも聞いたのですが、いまいち理解できませんでした。
0580デフォルトの名無しさん
2009/11/28(土) 03:24:18他のソースからそのヘッダだけインクルードしてAAAを使いたい場合に有効。
AAAのインスタンスを生成するには、AAAのメンバ変数のサイズが全部確定してないと
ならない。プライベートメンバでも何でも。
でも、ヘッダにAAAのプライベートメンバ変数まで全部書くようにしてると糞ソースに
なる。
だから、BBBを名前だけ宣言しといて、AAAのメンバ変数に「BBBへのポインタ」を
置く。ポインタなら中身が分からなくてもサイズは確定するから。
で、プライベートな実装は全部BBBの中に突っ込んで、AAAはBBBに丸投げする。
0581デフォルトの名無しさん
2009/11/29(日) 05:28:36プログラムの内容はsuujiに乱数を入れ、その乱数が〜なら○○を出力する、というものです。
int suuji;
suuji = rand() % 5 ;
printf("\n\n\n\nテストプログラム1\n");
switch (suuji)
{
case '0' :
printf("\nCASE 0");
break;
case '1' :
printf("\nCASE 1");
break;
case '2' :
printf("\nCASE 2");
break;
case '3' :
printf("\nCASE 3");
break;
case '4' :
printf("\nCASE 4");
break;
}
return 0;
0582581
2009/11/29(日) 05:30:54int main(void)
がぬけてました。
また、ひっかかるというのは表示されないということです
0583デフォルトの名無しさん
2009/11/29(日) 06:40:40これで^^
0584デフォルトの名無しさん
2009/11/29(日) 08:38:50文字'0'(ASCIIコード0x30)と比較してるのか
0585デフォルトの名無しさん
2009/11/29(日) 14:14:52とあった場合、
まともな(有名どころのg++とかVCとか)コンパイラなら
if(1)という無駄なオーバーヘッドは消してくれると期待できますか?
あるいはif(0)も同じく最適化してくれますかね?
0586585
2009/11/29(日) 14:22:33const int num = 1;
int main()
{
if(num){std::cout << "num" << std::endl;}
if(!num){std::cout << "!num" << std::endl;}
return 0;
}
これがg++ (最適化-O1) でasmファイルが同じになりました。
他のコンパイラでも期待して良い物なのでしょうか?
0587デフォルトの名無しさん
2009/11/29(日) 18:11:43切ったりしない限りは当たり前のように消える
0588デフォルトの名無しさん
2009/11/29(日) 18:32:50ありがとうございます。
0589デフォルトの名無しさん
2009/11/29(日) 19:33:54構造体を静的メンバとして定義するには、どうしたらいいのでしょうか。
以下のようなコードで、int型の数値をstruct型にまとめたいのです。
class Perception {
public:
static int trackingPointX;
static int trackingPointX;
}
int Perception::trackingPointX = 0;
int Perception::trackingPointY = 0;
int main() {
printf("%d", Perception::trackingPointX);
return 0;
}
いろいろと検索・試作してみましたが、実装方法が分かりませんでした。
よろしくお願いします。
0590デフォルトの名無しさん
2009/11/29(日) 19:44:36よくわからんな。
そのコードのどこが気に入らないの?
0591デフォルトの名無しさん
2009/11/29(日) 19:49:13{
static int trackingPointX;
static int trackingPointY;
};
0592589
2009/11/29(日) 19:51:37printf("%d", Perception::trackingPoint0.x);
printf("%d", Perception::trackingPoint1.x);
printf("%d", Perception::trackingPoint2.x);
・・・という風にしたいんです。
0593デフォルトの名無しさん
2009/11/29(日) 19:56:42struct _Perception
{
struct Point{ int x; int y; };
Point trackingPoint0;
Point trackingPoint1;
Point trackingPoint2;
};
_Perception Perception;
int main()
{
printf("%d", Perception.trackingPoint0.x);
/* ...*/
return 0;
}
0595デフォルトの名無しさん
2009/11/29(日) 20:28:31クラスインスタンス作るのが気に入らないなら 593 のメンバ変数に static つければいいだろうが。
>>593 要らんところで予約名使うなよ。
0596589
2009/11/29(日) 20:38:31とりあえずは以下の方法で実装できました。(言われてみれば当たり前かも・・・汗)
struct TrackingPoint { int x; int y; };
class Perception {
public:
static TrackingPoint trackingPoint0;
static TrackingPoint trackingPoint1;
static TrackingPoint trackingPoint2;
};
TrackingPoint Perception::trackingPoint0 = {0, 0};
TrackingPoint Perception::trackingPoint1 = {1, 1};
TrackingPoint Perception::trackingPoint2 = {2, 2};
int main() {
printf("%d", Perception::trackingPoint0.x);
printf("%d", Perception::trackingPoint1.x);
printf("%d", Perception::trackingPoint2.x);
return 0;
}
0597デフォルトの名無しさん
2009/12/02(水) 00:53:41.NET 2008だと有料版を買うしか無いのですよね・・・?
0598デフォルトの名無しさん
2009/12/02(水) 01:28:33「.NET 2008」って、「Visual Studio .NET か Visual Studio 2008」ってこと?
まあ、そうだね。MFCを無料で入手する手段はないと思うよ。
ちょっと試すぐらいなら、現在無料で配布中の VS 2010 懼ァイ22でいけるか
もしれない。
0599デフォルトの名無しさん
2009/12/02(水) 04:05:07説明が足りなくてすいません
Visual Stadio .NET Express EditionでMFCを使用したサンプルプログラムの動きを見たかったのです
VS2010なら、動作してくれるのかな?
ちょっとダウンロードして実行してみます
0600デフォルトの名無しさん
2009/12/02(水) 10:03:550601デフォルトの名無しさん
2009/12/07(月) 21:57:33つまり、aに5、bに3、cに8というデータがあったら、新しいint型のdに538というように
ひとつの24bitのデータにしたいのです。
なにか良い手段がありましたら、お願いします。
0602デフォルトの名無しさん
2009/12/07(月) 23:27:47a、b、cを左に8回シフトして0xffffff00(32bitの場合)とANDを取り
次に8bitデータとORを取る
0603デフォルトの名無しさん
2009/12/07(月) 23:28:31じゃあ0xffff00とANDを取って
0604デフォルトの名無しさん
2009/12/08(火) 01:14:20> つまり、aに5、bに3、cに8というデータがあったら、新しいint型のdに538というように
これ、 4 ビットずつ 3 つで 12 ビットのデータにしてね?
0605デフォルトの名無しさん
2009/12/08(火) 01:27:260606デフォルトの名無しさん
2009/12/08(火) 04:37:511行目と2行目以降が同じ意味に聞こえないんだけど、もしかしてこういうこと?
int d = ((a & 0xff) << 16) | ((b & 0xff) << 8) | (c & 0xff);
0607デフォルトの名無しさん
2009/12/08(火) 07:44:40そこで質問があるのですが、もし分かる人いたら教えてください。
�@実行ファイルにアイコンをつけたいんですが、プロジェクトファイルを作成してしまった後でも、
アイコンをつける方法はあるのでしょうか。
(アイコンの絵柄のきれいさはあまりこだわりませんが、せっかくなんでアイコン作ってみたくて)
�ARelease環境で作成されたフォルダをみると
プログラムの中で使う画像ファイルがなぜかないので手作業でフォルダに追加しないといけなかったり、
作成されたフォルダの中にexeファイル以外のファイルが8つぐらいあったりしてごちゃごちゃするので、
最終的に作成するファイルをexeファイルだけにする方法はないでしょうか?
0608デフォルトの名無しさん
2009/12/08(火) 12:46:29いまはXMLになっている気がする(VS 2003頃からか)
とりあえず、スレ違い
Visual Studio 2008 Part 19
http://pc12.2ch.net/test/read.cgi/tech/1259076828/
0609デフォルトの名無しさん
2009/12/08(火) 14:11:26>最終的に作成するファイルをexeファイルだけにする方法はないでしょうか?
ビルド後のイベントに消すコマンドを書けばよいがそんなことは普通しない。
分割コンパイルの意味がなくなる。
0610デフォルトの名無しさん
2009/12/08(火) 20:40:37説明がうまいこといってないのか
俺の読解力がないのかが判断つかねえ
0611デフォルトの名無しさん
2009/12/08(火) 21:29:280612デフォルトの名無しさん
2009/12/08(火) 21:41:170613612
2009/12/08(火) 21:42:190614デフォルトの名無しさん
2009/12/11(金) 12:49:28今の人はビットフィールドって知らないのか?
0615デフォルトの名無しさん
2009/12/11(金) 12:51:220616デフォルトの名無しさん
2009/12/11(金) 12:58:291行目と2行目の関連がまるで見えないので説明の問題だと思う
0617デフォルトの名無しさん
2009/12/11(金) 13:00:10もし、8ビット毎の合成だったらunionだけでOKだな
0618デフォルトの名無しさん
2009/12/11(金) 16:24:01あまり使われていないのでしょうか?
0619デフォルトの名無しさん
2009/12/11(金) 16:31:41C++のルールからあまりに外れまくっている上に
C#より面倒なくせにやれることはC#未満という有様なので。
用途がすごく限られます。
0620デフォルトの名無しさん
2009/12/11(金) 16:45:58殆どはC#とC++の情報を読み替えるだけで賄える
0621デフォルトの名無しさん
2009/12/12(土) 10:38:17aとbの差が±30以上ならint型cに1を入れる、というプログラムを作成したいのですが、
なにかいい方法はありませんか?
0622デフォルトの名無しさん
2009/12/12(土) 10:42:360623デフォルトの名無しさん
2009/12/12(土) 10:43:50どうやったらダメだったのかとか自分の案くらい書けば?
0624デフォルトの名無しさん
2009/12/12(土) 10:44:310625デフォルトの名無しさん
2009/12/12(土) 10:51:25unsigned long a = 39.5;
unsigned long b = 6.4;
unsigned long d;
if(a>b){
d = a-b;
}else{
d = b-a;
}
int c = 0;
if(d>30){
c= 1;
}
cout << c << endl;
}
0626デフォルトの名無しさん
2009/12/12(土) 10:51:250627デフォルトの名無しさん
2009/12/12(土) 11:49:49c = 1;
}
0628デフォルトの名無しさん
2009/12/12(土) 11:53:100629デフォルトの名無しさん
2009/12/12(土) 12:15:02なんか綺麗に書けないかなと思ったけど難しかった
0630デフォルトの名無しさん
2009/12/12(土) 12:34:010631デフォルトの名無しさん
2009/12/12(土) 12:34:580632デフォルトの名無しさん
2009/12/12(土) 12:42:200633デフォルトの名無しさん
2009/12/12(土) 13:28:53c = (a > b ? a - b : b - a) > 30 ? 1 : c;
0634デフォルトの名無しさん
2009/12/12(土) 15:08:18int型のif文で、
if (x <= -50)
みたいにできなかったっけ?
0635デフォルトの名無しさん
2009/12/12(土) 15:16:04出来るが、一体どうしたね
0636デフォルトの名無しさん
2009/12/12(土) 15:21:430637デフォルトの名無しさん
2009/12/12(土) 15:22:29今更なにを。。。
どの言語を普段お使いの方ですか?
0638デフォルトの名無しさん
2009/12/12(土) 18:59:13そろそろ戻れるって聞いて、必死で覚えなおしてる
0639デフォルトの名無しさん
2009/12/12(土) 19:01:58○戻される
0640デフォルトの名無しさん
2009/12/12(土) 19:14:33なんで宗教的な話は禁止とか書いてあんの?
プログラムと宗教って何か関係性でもあったの?
普通に考えたらプログラム板なんだから宗教の話なんてスレチのイタチだってのに
わざわざ書くってことは何か理由がってのこと?
0641デフォルトの名無しさん
2009/12/12(土) 19:51:370642デフォルトの名無しさん
2009/12/12(土) 20:37:59vimとemacsのどちらがよりC++コーディングに適しているのか教えてください
0643デフォルトの名無しさん
2009/12/12(土) 21:20:01関数呼び出し元で利用するのは問題ないでしょうか。
手元の環境(gcc 4.4.0)では"abc"と表示されました。
#include <stdio.h>
char *func() {
return "abc";
}
int main(void) {
puts(func());
return 0;
}
0644デフォルトの名無しさん
2009/12/12(土) 21:41:40定数は問題ない
0645デフォルトの名無しさん
2009/12/12(土) 21:58:570646643
2009/12/12(土) 22:46:260647デフォルトの名無しさん
2009/12/13(日) 04:59:03それはエディタ論争だから鼬害
0648デフォルトの名無しさん
2009/12/13(日) 10:14:46バカ発見www
単に彼は「宗教的な話は禁止」の例えで出したんだろjk
0649デフォルトの名無しさん
2009/12/13(日) 10:20:43何を言っても無駄だろう。
0650デフォルトの名無しさん
2009/12/13(日) 11:21:400651デフォルトの名無しさん
2009/12/13(日) 13:22:13それ以前から原子クラスを継承した水素オブジェクトは存在したのだな
0652デフォルトの名無しさん
2009/12/13(日) 13:33:22いや存在してないと思うぜ。逆じゃねぇのか?
あと、テンプレートの特殊化の方が近いと思うんだぜ。
template<double spin, double Mass, double Electric charge, 俺の知らない要素>
class SubatomicParticle;
0653デフォルトの名無しさん
2009/12/13(日) 13:48:26そのとき一緒にwaterクラスも実装したらしい
0654デフォルトの名無しさん
2009/12/13(日) 15:26:490655デフォルトの名無しさん
2009/12/13(日) 15:33:520656デフォルトの名無しさん
2009/12/13(日) 17:01:100657デフォルトの名無しさん
2009/12/13(日) 17:31:080658デフォルトの名無しさん
2009/12/13(日) 17:40:34スレ違いだろ
0659デフォルトの名無しさん
2009/12/13(日) 18:00:320660デフォルトの名無しさん
2009/12/13(日) 18:08:40ダメ
改宗してからおいでなさい。
0661デフォルトの名無しさん
2009/12/13(日) 18:15:400662デフォルトの名無しさん
2009/12/13(日) 18:26:250663デフォルトの名無しさん
2009/12/13(日) 20:14:15下記のコードのcuetarget=cue_parse_file(fp);までは実行に成功するのですが、cd_dump(cuetarget);以降が実行されず、実行が止まってしまいます。
#include "C:/libcue-1.3.0/bin/cd.h" #include "C:/libcue-1.3.0/bin/cdtext.h" #include "C:/libcue-1.3.0/bin/cue_parser.h" #include "C:/libcue-1.3.0/bin/libcue.h" #include "C:/libcue-1.3.0/bin/rem.h" #include "C:/libcue-1.3.0/bin/time.h"
int main(int argc, char** argv) {
FILE *fp; /*ファイルポインタの宣言 */
Cd *cuetarget;
/* ファイルのオープン */
if ((fp = fopen("S:/CDImage.cue", "r")) == NULL) {
printf("file open error!!\n");
exit(EXIT_FAILURE); /*エラーの場合は異常終了する */
}else{
cuetarget=cue_parse_file(fp);
if (cuetarget=NULL){
exit(EXIT_FAILURE); /*エラーの場合は異常終了する */
}else{
cd_dump(cuetarget);
}
}
fclose(fp); /*ファイルのクローズ */
return (EXIT_SUCCESS);
・エラーメッセージ
特になし。
・実行環境
OS:WindowsXP コンパイラ:MingW IDE:NetBeans6.0.1 使用したライブラリ:libcue-1.3.0( ttp://sourceforge.jp/projects/sfnet_libcue/ )
・最終的にやりたいこと
Cueシートの全てのトラックの、トラック名、アーティスト名などの属性を、別に用意したファイルの内容で自動的に置き換える。
(そのためにCueシートの解析用ライブラリをDLしてきた。)
0664デフォルトの名無しさん
2009/12/13(日) 20:18:23CUEファイルに原因があるかもしれないから
CUEをどこかにあげてみて
0665デフォルトの名無しさん
2009/12/13(日) 20:44:05PATHは通してあります。
CUEはこれです。
ttp://www1.axfc.net/uploader/Sc/so/63656
0666デフォルトの名無しさん
2009/12/13(日) 21:19:00この辺があやしい
if (cuetarget=NULL){
0667663
2009/12/13(日) 21:27:170668デフォルトの名無しさん
2009/12/14(月) 20:10:060669デフォルトの名無しさん
2009/12/14(月) 20:27:020670デフォルトの名無しさん
2009/12/14(月) 22:50:010671デフォルトの名無しさん
2009/12/15(火) 10:07:23左辺値の意味わかってないだろ。
まあどっちにしても定数を左に置くやつは信用できないけどな。
0672デフォルトの名無しさん
2009/12/15(火) 10:30:07右の間違いだろ
0673デフォルトの名無しさん
2009/12/15(火) 10:44:07単に凡ミスを防ぐために読みづらくするのは嫌だと言ってんの。
0674デフォルトの名無しさん
2009/12/15(火) 11:21:390675デフォルトの名無しさん
2009/12/15(火) 12:01:02当然、そう書こうとする動機は知っているが。
==と間違えて=を書く確率は、ちょっと慣れたまともなCプログラマなら0に限りなく
等しい。つまり、予防策としての効果も0に限りなく等しい。
よって、見た目に優れた書き方の方が良いが、左に定数を書く方がみんな見やすいと
思っているなら相当な変わり者だろう。物事は何でもかんでも対称的ではない。左と
右でどっちが感覚的に自然か、についても対称的な話ではない。現実に定数は右に
書かれる率が圧倒的に高い。
というようなことを感覚で判断できないか、または==と=を間違えることが実際に
ある人なのか、どちらにしても信用には値しないだろうな。
0676デフォルトの名無しさん
2009/12/15(火) 12:03:56今時のコンパイラを正しく使っていれば、間違えても致命傷にはならない
だろうとは思う。
0677デフォルトの名無しさん
2009/12/15(火) 12:11:20==と=のミスを避けるために左に定数を書くことはないなぁ。
でも、
>ちょっと慣れたまともなCプログラマなら0に限りなく
は、ソースがないから単なる妄想だね。^^
そしてハーブサッター先生の言葉を思い出そう。
0678デフォルトの名無しさん
2009/12/15(火) 12:16:480679デフォルトの名無しさん
2009/12/15(火) 12:21:59気の利いたコードは害悪だ、ってのは覚えてるな。
0680デフォルトの名無しさん
2009/12/15(火) 13:54:54>>677
> >ちょっと慣れたまともなCプログラマなら0に限りなく
> は、ソースがないから単なる妄想
そういう統計は誰も取ってくれそうもないが、経験則としてはあるなあ。
0681デフォルトの名無しさん
2009/12/15(火) 14:08:480682デフォルトの名無しさん
2009/12/15(火) 15:02:150683デフォルトの名無しさん
2009/12/15(火) 15:06:07682 名前: デフォルトの名無しさん [sage] 投稿日: 2009/12/15(火) 15:02:15
0に限りなく近いなら定数を左辺にするテクや、=に警告するコンパイルなんて生まれなかったろうに。
}
0684デフォルトの名無しさん
2009/12/15(火) 15:17:150685デフォルトの名無しさん
2009/12/15(火) 21:57:190686デフォルトの名無しさん
2009/12/15(火) 22:35:07ただタイプミスするだけなんだぜwwww
ダメじゃんorz
0687デフォルトの名無しさん
2009/12/15(火) 23:37:270688デフォルトの名無しさん
2009/12/16(水) 10:47:010689デフォルトの名無しさん
2009/12/16(水) 11:08:54他人の作ったコードもメンテすることあるし。
0690デフォルトの名無しさん
2009/12/16(水) 14:09:200691デフォルトの名無しさん
2009/12/16(水) 15:27:40PL/SQL と並行してやってると、代入/比較どころか
文字列のクォーテーションまで間違うぜ!
0692デフォルトの名無しさん
2009/12/16(水) 16:10:070693デフォルトの名無しさん
2009/12/16(水) 16:11:16右に書いてあるコードを全部左に置き換えてからコード読むとか?
0694デフォルトの名無しさん
2009/12/16(水) 16:17:450695デフォルトの名無しさん
2009/12/16(水) 18:25:030696デフォルトの名無しさん
2009/12/17(木) 04:02:14うちのパソコンでは何かうまくゆかないんだ
0697デフォルトの名無しさん
2009/12/17(木) 05:03:28どうせ30年弱の間には解決するだろ
0698デフォルトの名無しさん
2009/12/17(木) 08:04:460699デフォルトの名無しさん
2009/12/17(木) 11:32:430700デフォルトの名無しさん
2009/12/17(木) 11:33:45文法ミスじゃないから原因を特定しにくいバグになるんじゃないの?
だから、コンパイル時にエラーとなるように定数を左辺に置くという小技が出てきたわけで。
今は警告でるんだからそんな小技はデメリットしかないと思うよ
0701541
2009/12/17(木) 17:41:27検索の結果、やりたいことは「重複順列の列挙」と言うのだと分かりました。
また、列挙までのサンプルソースも手に入りました。
が、
あまりにも数字が多いので、必要のない物を出力前に除外しようと思い立ちました。
そこで質問です。除外条件で
・m桁目に2がある数値は除外
・0が5個以上連続している数値は除外
・左右反転して同一数値になるものは最初に出力した物以外出力しない
等々、どうやって条件付けしたらいいのか分かりません。
0702デフォルトの名無しさん
2009/12/17(木) 18:03:47どういうものが必要ないかを俺が決めていいのかよ??
じゃぁ(ry
0703デフォルトの名無しさん
2009/12/17(木) 19:37:560704デフォルトの名無しさん
2009/12/18(金) 06:40:170705デフォルトの名無しさん
2009/12/18(金) 10:50:350706デフォルトの名無しさん
2009/12/18(金) 10:59:380707デフォルトの名無しさん
2009/12/18(金) 11:38:270708デフォルトの名無しさん
2009/12/19(土) 00:49:35wiiyourselfとかwiiremoteなどのwii関係のC,C++用のライブラリーでとっつき安いライブラリのおすすめがある人いませんか?
自分の作ったVRウォークスルーもどきにヘッドトラッキングを導入したいんだけど。
0709デフォルトの名無しさん
2009/12/19(土) 01:22:28俺最低。異物挿入法とか読んだ。どこに異物があるのか。
0710デフォルトの名無しさん
2009/12/19(土) 01:49:11大雑把に説明してみる。
Insertion sort ではどの位置に要素を挿入するべきかを判定するために比較が用いられている。
最初逆順に並んでいる場合(=最悪の場合)は比較回数は 0+1+2+...+(n-1)=n(n-1)/2 になる。
各ステップにおいてどの位置に挿入することになるかは等確率となるため平均を考えると半分の位置になる。
従って 0/2+1/2+2/2+...+(n-1)/2=1/2(0+1+2+...+(n-1))=n(n-1)/4 となる。
0711デフォルトの名無しさん
2009/12/19(土) 01:58:03>各ステップにおいてどの位置に挿入することになるかは等確率
例えば最悪値で n-1 回比較するケースにおいて平均を考えると (1+2+...+(n-1))/(n-1) = n(n-1)/2/(n-1) = n/2
で大体半分。↑の式でも正確じゃないけどまぁオーダーとしては合ってるはず。
0712デフォルトの名無しさん
2009/12/19(土) 02:59:32catchで分岐する時です。
静的に分かるものですか?
それとも実行時型情報みたいなの使うんでしょうか?
0713デフォルトの名無しさん
2009/12/19(土) 08:32:55っ http://msdn.microsoft.com/ja-jp/library/cc440190%28VS.71%29.aspx
0714デフォルトの名無しさん
2009/12/19(土) 08:36:11静的には分からないので
>実行時型情報みたいなの
を使ってる。
g++ の場合だと正に std::type_info を使ってるらしい。
詳しく知りたい場合は BinaryHacks おすすめ。
0715デフォルトの名無しさん
2009/12/19(土) 14:51:07// コード
}catch(Exception1 e){
//例外1
}catch(Exception2 e){
//例外2
}catch(Exception3 e){
//例外3
}
0716デフォルトの名無しさん
2009/12/20(日) 16:14:52using namespace std;
int main()
{
int n=100;
double k = 1.0/n;
for(double i=0.5;i >= -0.5; i-=k){
double x =0.0;
x = i;
cout << x << endl;
}
return 0;
}
これをコンパイルして実行したら0のところがe-16とかの小さい数になってしまいます。
原因を教えてください
0717デフォルトの名無しさん
2009/12/20(日) 16:18:460718デフォルトの名無しさん
2009/12/20(日) 17:25:17ありがとうございます
0のところだけ別に入れます
0719デフォルトの名無しさん
2009/12/20(日) 19:23:070以外の場合は浮動小数点誤差が情報落ちして消えてしまうけど、
0の場合は誤差がそのまま有効な数値になるから。
で
cout << x << end;
を使わず
printf("%.2f\n", x );
を使えばいい
0720デフォルトの名無しさん
2009/12/20(日) 20:04:570721デフォルトの名無しさん
2009/12/20(日) 20:44:050722デフォルトの名無しさん
2009/12/20(日) 21:42:410723デフォルトの名無しさん
2009/12/20(日) 21:51:220724デフォルトの名無しさん
2009/12/20(日) 21:54:280725デフォルトの名無しさん
2009/12/20(日) 22:49:340726デフォルトの名無しさん
2009/12/20(日) 23:01:190727デフォルトの名無しさん
2009/12/21(月) 01:03:47<iomanip>をインクルードして、例えば
cout << fixed << setprecision(2) << x << endl;
と書けば、%.2f相当の出力になる。
0728デフォルトの名無しさん
2009/12/21(月) 22:37:27UInt32 aa;
aa = 0x12;
FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create);
BinaryWriter^ binWriter = gcnew BinaryWriter( fs );
binWriter->Write( aa );
binWriter->Close();
fs->Close();
作成したtmp.binが使用中のままになっているため、2回繰り返すとエラーになってしまいます。
Closeしただけではダメなのでしょうか?
すいませんがよろしくお願いします。
0729デフォルトの名無しさん
2009/12/21(月) 23:35:48CLIの質問は大胆すぎるので別スレでどうぞ
0730デフォルトの名無しさん
2009/12/21(月) 23:38:00エラーとはどういうこと?
次のように、単純に2回実行することを試したが、なんの例外も投げられることなく実行されるけど。
using namespace System;
using namespace System::IO;
int main()
{
UInt32 aa;
aa = 0x12;
{
FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create);
BinaryWriter^ binWriter = gcnew BinaryWriter( fs );
binWriter->Write( aa );
binWriter->Close();
}
{
FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create);
BinaryWriter^ binWriter = gcnew BinaryWriter( fs );
binWriter->Write( aa );
binWriter->Close();
}
}
0732デフォルトの名無しさん
2009/12/22(火) 01:35:39そうそう、BinaryWriterのCloseは、大元のストリームもCloseすることになっているから、
fs->Close()は無くても平気だよ。もちろん、あっても害はないから気にしなくても全然問題ない。
0733デフォルトの名無しさん
2009/12/24(木) 02:58:29普通、構造体のインスタンスに、STLで見かける.size()メンバなんて有りませんよね?
ttp://marupeke296.com/DXG_No37_AnimationController.html
ここの「アニメーション上位レベル構造体」が「SetLoopTimeメソッド」で.size()されていて
そのままインスタンスを作ってコンパイルしようとすると、当然のように
>error C2228: '.size' の左側はクラス、構造体、共用体でなければなりません
と出ます。
この構造体は何か、普通と違った使い方をしているのでしょうか?
それとも私が、何か知らなければいけない事を知らないだけなのでしょうか。
0734デフォルトの名無しさん
2009/12/24(木) 04:52:19C++は詳しく知らないし、僕が昔使っていたときにはinterfaceなんてなかった気もするがおそらく
class CHighLevelAnimController : IHighLevelAnimController {
private:
vector<struct HLANIMATION_DESC> m_Amin;
CHighLevelAnimController operator=(CHighLevelAnimController& c) { return c; }
public:
CHighLevelAnimController() { }
~CHighLevelAnimController() { }
bool SetLoopTime(UINT, FLOAT);
...
};
CHighLevelAnimControllerクラスは、IHighLevelAnimControllerインターフェイスを継承(実装)して
m_Aminオブジェクトは、vector<>のようなテンプレートクラスのインスタンスとしてCHighLevelAnimControllerクラスまたはその基底クラスで定義されている
interfaceキーワードに詳しい人詳細キボン
0735デフォルトの名無しさん
2009/12/24(木) 05:39:46Windowsでは、どこかのヘッダで#define interface structってされているだけ。
>>733
自分も、m_Animは実際にはなんらかのSTLコンテナか何かなのだと思う。
0736デフォルトの名無しさん
2009/12/24(木) 11:08:03何か特別な使い方かと思いましたが、STLに包んでいるとかなのですね。
ありがとうございました。
0737デフォルトの名無しさん
2009/12/28(月) 16:13:02起動や大型のファイル群を読み込むなどで10秒前後待たせる時
画面にLoading表示やその進行状況を表示したいのですが、
あれはどう実装するものなのでしょうか?
普通に組むと1つの工程(ファイルなど)単位で処理が停止してしまいますし、
「Loading」「読み込み画面」などの検索ワードでは違うものばかりHitし、
実現方法を見つけられずにいます。 何かご助言を頂けると幸いです orz
0738デフォルトの名無しさん
2009/12/28(月) 16:24:500739デフォルトの名無しさん
2009/12/28(月) 16:57:060740デフォルトの名無しさん
2009/12/28(月) 17:13:38ググってみました。マルチプロセス処理というものが有るのですね。
これで実現への道筋が見えました。ありがとうございました。
>>739
そうですね。その程度なら勉強〜開発時間を殆どかけずにやれそうですね。
ありがとうございました。
0741デフォルトの名無しさん
2009/12/28(月) 17:15:01止まってないことだけ示したいなら、一部読み込んでは表示、を繰り返せばいい
0742デフォルトの名無しさん
2009/12/28(月) 17:15:410743デフォルトの名無しさん
2010/01/04(月) 09:19:30マルチプロセス>メモリ空間が別
マルチスレッド>同じメモリ空間
0744デフォルトの名無しさん
2010/01/04(月) 14:01:26ひととおり文法勉強したんですが、難しく思えます
0745デフォルトの名無しさん
2010/01/04(月) 18:35:29最短経路問題とかその類のロジックを問う問題でしょ
文法が分からないのであればそれ以前のレベルってことだね
0746デフォルトの名無しさん
2010/01/04(月) 19:20:510747デフォルトの名無しさん
2010/01/04(月) 21:20:54俺も去年の春からプログラミングを勉強し始めたばかりで参加してるけど
アルゴリズムを考えるだけだから文法がわかってれば何も難しくもなくね?
難易度はどうですかって質問の答えにはなってないとは思うけど
0748デフォルトの名無しさん
2010/01/05(火) 01:18:43>>746
>>747
なるほど。じゃ用意されている関数を使えるレベルすらないので
もう少し勉強してからトライします。もう終わりそうですけど。
レスありがとうございました。
0749デフォルトの名無しさん
2010/01/07(木) 06:18:500750デフォルトの名無しさん
2010/01/07(木) 14:17:20const Hoge&
Hoge const*
Hoge const&
の違いを実例を挙げて詳しく教えてください。
0751デフォルトの名無しさん
2010/01/07(木) 16:17:410752デフォルトの名無しさん
2010/01/07(木) 17:02:22const&
の2つがよくわからん。
0753デフォルトの名無しさん
2010/01/07(木) 17:18:14& を超えて Hoge& const になると変わる
0754753
2010/01/07(木) 17:19:46何かわけのわからんことを言った
参照はもともと変更不可だから Hoge& const のようなものは無かった
Hoge* const はある
0755デフォルトの名無しさん
2010/01/07(木) 17:30:50#include <iostream>
int main() {
int a = 10, b = 20;
int &r = a;
std::cout << r << std::endl;
r = b;
std::cout << r << std::endl;
/*
int &const cr = a; // `const' qualifiers cannot be applied to `int&'
std::cout << cr << std::endl;
cr = b;
std::cout << cr << std::endl;
*/
int *const cp = &a;
std::cout << *cp << std::endl;
//cp = &b; // error: assignment of read-only variable `cp'
std::cout << *cp << std::endl;
return 0;
}
0756デフォルトの名無しさん
2010/01/07(木) 21:52:05って適切に現在?のオブジェクトを破棄してくれるのですか?
0757デフォルトの名無しさん
2010/01/07(木) 22:21:380758デフォルトの名無しさん
2010/01/07(木) 23:39:12>>753が言ってるのは「別のオブジェクトを指すように変更することはできない」ってことだよ。
Hoge&は最初からHoge*const相当で、参照にHoge*に対応するものはないんだから。
0759デフォルトの名無しさん
2010/01/08(金) 09:32:09別のオブジェクトを指すように変更することはできない?
いつからそうなってんの?w
int a = 10, b = 20;
int &r = a;
std::cout << r << std::endl;
r = b;
std::cout << r << std::endl;
これを実行して確認しる。
0760デフォルトの名無しさん
2010/01/08(金) 09:33:45あーごめんw 俺が狂ってた。
r = b;
これはひょっとして、代入されてるのか。
( つд∩)うえーん
( つд・∩)チラ
0761デフォルトの名無しさん
2010/01/08(金) 09:42:09int &r = a;
std::cout << &a << ' ' << &b << std::endl;
std::cout << r << ' ' << &r << std::endl;
r = b;
std::cout << r << ' ' << &r << std::endl;
実行結果:
0x22cce4 0x22cce0
10 0x22cce4
20 0x22cce4
___
←樹海| オワタ
 ̄|| ̄ ┗(^o^ )┓三 >>753 >>758 両氏ごめん
|| ┏┗ 三
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0762デフォルトの名無しさん
2010/01/08(金) 09:50:12#include<stdio.h>
int main (void)
{
float x[11];
float max,min;
int i;
printf("実数を10個入力してください\n");
for ( i = 1; i <= 10; i++){
scanf("%f",& x[i]);
}
max = x[0];
for ( i = 1; i <= 10; i++){
if (x[i] > max){
max = x[i];
}
}
min = x[0];
for ( i = 1; i <= 10; i++){
if (x[i] < min){
min = x[i];
}
}
printf("最大値は%fです\n",max);
printf("最小値は%fです\n",min);
return 0;
}
どこが原因なんでしょうか?
0763デフォルトの名無しさん
2010/01/08(金) 09:56:550764デフォルトの名無しさん
2010/01/08(金) 12:59:46クラス毎に1度だけ変数の初期化をさせたい場合、
1.コンストラクタを使う (再初期化が必要になった場合、結局の後者いずれかが必要に・・?)
2.各クラスのグローバルスコープに初期化用のstatic boolを置いて処理
3.初期化用メソッドを別に作って纏めて管理
この3つが思い付くのですが、
どういう初期化が定番、もしくは設計的に無難だと思われますでしょうか?
0765デフォルトの名無しさん
2010/01/08(金) 13:29:430766765
2010/01/08(金) 13:30:280767デフォルトの名無しさん
2010/01/09(土) 09:17:09辿るのはクラスなのオブジェクトなの?
初期化するのはクラス毎なのオブジェクト毎なの?
どんな処理しようとしてるのかが良く分からない。
擬似コードでいいから書いてみてくれた方が答えやすい。
「クラス毎に1度だけ」の条件を抜いた上で感覚で答えれば、
それが本当に「初期化」ならコンストラクタにすると思う。
状態の再設定が必要なら reset() みたいなメソッドも作るだろうね。
>各クラスのグローバルスコープ
言いたいのはクラススコープじゃね?
0768デフォルトの名無しさん
2010/01/10(日) 12:33:35初期化じゃなくて再設定って言わないとですね;
>各クラスのグローバルスコープ
すみませんでした、そんなの無いですよね;
つい完成するまでは1行で済むクラスの置いてるソースファイルのグローバルスコープにstatic boolを置く癖から。。 表現に注意します;
そして、変数の再設定メソッドが良さそうですね・・ありがとうございました。
0769デフォルトの名無しさん
2010/01/15(金) 17:08:21「配列にはしたくない変数名の末尾」に数字を付けるのは、滅多に見ない気がするのですが、何か危険なのでしょうか?
以前はhennsuuA ..B ..C としていたのですが、最近はhennsuu1 ..2 ..3 とやっているのですが・・
0770デフォルトの名無しさん
2010/01/15(金) 17:10:450771デフォルトの名無しさん
2010/01/15(金) 17:16:39いい名前が思い浮かばないのなら変数名スレに相談してみては
0772デフォルトの名無しさん
2010/01/15(金) 17:22:51の変数に適用するだろうから、素直に配列にすることが多いだろ。
配列はふさわしくないが通し番号がふさわしい、という場面が滅多に無いから、そういう
命名も滅多に見ないだけ。
で、その言い方だと頻繁に通し番号を振ってるようだから、やはり命名がおかしいか、
よほど特殊なジャンルで活動しているか。まぁ、後者ならこんな質問は出ないだろうと
思うので、多分前者だろう。
0773デフォルトの名無しさん
2010/01/15(金) 17:24:18なるのか知りたい気もする
0774デフォルトの名無しさん
2010/01/15(金) 18:12:39ありがとうございます。危険性そのものは多分、無いのですね。
私のプログラミング能力の低さから来てる問題なのが大半だとは思います。
あとは、
変数1の値に応じて処理をわけ、変数2の値に応じて処理を分け と
どっちも1桁の数値だから配列にして置いてても良いのですが、
一応種類が全く違う2つなので、名前を別にしたいのですが
違い過ぎると使い間違えそうになるので・・とりあえずa, b, c, 1, 2, 3 と
やっちゃってました。
変数名スレッドなるものが有るんですね。 探して見てこようかと思います。
ありがとうございました。
0775デフォルトの名無しさん
2010/01/15(金) 19:05:36でも今時そこまでガチに汚く組まないと困ることはコンシューマでも珍しい
0776デフォルトの名無しさん
2010/01/15(金) 22:33:15なら構造体にするとか
0777デフォルトの名無しさん
2010/01/16(土) 17:07:00int a[10];
int *p = a+5;
p[-4] = 0;
0778デフォルトの名無しさん
2010/01/16(土) 17:10:40値の正負は文法上の問題ではないので、非負の値が許されるなら当然、文法上は、有効。
0779デフォルトの名無しさん
2010/01/17(日) 00:43:200780デフォルトの名無しさん
2010/01/17(日) 12:01:30どうでもいいけど、-4[p]=0は試してないけど有効じゃなさそうだな、優先順位的に。
0781デフォルトの名無しさん
2010/01/17(日) 18:13:260782デフォルトの名無しさん
2010/01/17(日) 20:05:01(-4)[p] なら大丈夫
0783デフォルトの名無しさん
2010/01/17(日) 20:17:490784デフォルトの名無しさん
2010/01/17(日) 20:38:04ナンセンスだと思っている俺ですら>>782はぶち殺したくなる
0785デフォルトの名無しさん
2010/01/18(月) 09:30:44きっと清涼剤のようにさわやかになれるぞ。
0786デフォルトの名無しさん
2010/01/18(月) 09:40:050787デフォルトの名無しさん
2010/01/18(月) 21:22:34int a[10];
int *p = a+5;
int n = -4;
/* 数十行のコード */
n[p] = 0;
とかなってたら明確な悪意を感じる
0788デフォルトの名無しさん
2010/01/19(火) 20:40:13共通の変数50個を扱うデータクラスA(インスタンスは500個)に関連して
10種x1〜20の配列(ムラの激しい追加情報)が必要なのですが、
全部データクラスAに入れてしまうと、約190個x400インスタンス=76000個分ほどの変数は無駄になる計算で・・。
STLを使うなりクラスをバラにするなり考えているのですが
こういう場合、どうデータを管理するのが定番、妥当なのでしょうか?
0789デフォルトの名無しさん
2010/01/19(火) 21:05:010790デフォルトの名無しさん
2010/01/19(火) 21:24:38とりあえず気にしないで作ってだめそうだったら工夫するとか?
76000個をヒープに取ったらまずい?
0791デフォルトの名無しさん
2010/01/19(火) 21:44:520792デフォルトの名無しさん
2010/01/19(火) 23:57:490793デフォルトの名無しさん
2010/01/20(水) 01:55:58>共通の変数50個
この段階でクラスの切り分け方ミスってるような気もするが。
追加情報については STL のコンテナ使うなり(コンテナの選択は追加、削除、検索の発生の仕方次第)、
適当なクラスにラップするなり、ケース次第だと思う。
追加情報に対して単なるコンテナ以上の操作が必要ならばクラスにラップするかもね。
0794デフォルトの名無しさん
2010/01/22(金) 19:56:01ありがとうございます。巻き添えらしいアクセス制限で返事が遅れてすみません。
今は、言われてみれば数十KB位のようですし、そのままデータクラスAに入れて使う事にします。
問題になってきたらご助言を参考に改良したく思います。
ありがとうございました。
0795デフォルトの名無しさん
2010/01/27(水) 13:10:49DIRECT法(DIviding RECTngle)のプログラムを組むことになったのですが、
どうにもとっかかりが無くて困っています。
おおよその理論は分かっているのですが、形にすることが全くできません。
ググって見たりはしたものの、それらしきプログラムソースは落ちていませんでした。
助けていただくことはできますでしょうか?
0796デフォルトの名無しさん
2010/01/27(水) 13:36:39ググると普通にあるけど…?
ソースが欲しいって訳?
0797デフォルトの名無しさん
2010/01/27(水) 18:44:46ソースがあれば、いただけると幸いです。
0798デフォルトの名無しさん
2010/01/29(金) 17:20:14どなたかお願いします。
書き忘れましたが、C++です。
本当に困ってます
0799デフォルトの名無しさん
2010/01/29(金) 17:43:150800デフォルトの名無しさん
2010/01/29(金) 17:53:41こういうこと書かれると手伝う気うせる
0801デフォルトの名無しさん
2010/01/29(金) 20:13:46なんでだよw
0802デフォルトの名無しさん
2010/01/29(金) 20:25:14なんでだよじゃねえだろ。失礼甚だしい
0804デフォルトの名無しさん
2010/01/29(金) 22:32:16お前がその本人だろ・・・
何しれっと他人の振りしてんだよ
0805デフォルトの名無しさん
2010/01/30(土) 00:01:15いや別人だから失敬な。
まあ何だっていいけど。
証明方法がないもんなぁ。
0806デフォルトの名無しさん
2010/01/30(土) 16:20:48ご指摘の通り「落ちている」という表現は悪かったと反省してます。
ただ本当に困っています。どなたか助けてくれる方いましたら
本当にお願いします。
0807805
2010/01/30(土) 16:26:09このスレには低能力者しかいないから
別のスレ(ttp://pc12.2ch.net/test/read.cgi/tech/1263556932/とか)
に行ってみたらどうでしょうか?
> 証明方法
fusianasanがあったか。
でもまあ晒したくないからやめとこう。
0809デフォルトの名無しさん
2010/01/30(土) 18:25:360810デフォルトの名無しさん
2010/01/30(土) 19:22:32_ | (・∀・) |
`)) | ̄ ̄ ̄ ̄
´ ∧
<⌒>
/⌒\
_________]皿皿[-∧-∧、
/三三三三三三∧_/\_|,,|「|,,,|「|ミ^!、
__| ̄田 ̄田 / ̄ ̄Π . ∩ |'|「|'''|「|||:ll;|
/__,|==/\=ハ, ̄ ̄|「| ̄ ̄ ̄ ̄|「| ̄ ̄|
/_| ロ ロ 「 ̄ ̄ ̄ | | 田 |「| 田 田 |「|[[[[|
|ll.|ロ ロ,/| l⌒l.l⌒l.| | |「| |「|ミミミミミミ
0811保守
2010/02/06(土) 11:57:12C++の初期化指定は複雑
C++の初期化は恐ろしく複雑になってて,
struct S {
int a;
static int b;
int c;
} s = { 1, 3 };
と書いたらs.a = 1,s.c = 3と初期化されるなんてルールも決まっている.あんまり深入りしないでおこう….
0812デフォルトの名無しさん
2010/02/06(土) 13:12:320813デフォルトの名無しさん
2010/02/06(土) 14:04:51まあねえ
静的メンバは外で定義しないといけないしね
そうしないとコンパイラから叱られる
0814デフォルトの名無しさん
2010/02/06(土) 17:21:56そりゃCよりは複雑だけど、C++に限らず、いまどきの言語でクラス変数使ったら
同じような状況になるし、少なくともスタティックメンバ変数の初期化ルールは
*恐ろしく*なんて形容されるほどじゃないと思うんだが。
ついでに聞きたいんだけど、C++に限らず、みんなが「こいつは複雑だ」と思った
言語仕様ってある?
例えば多重継承とかテンプレートとかは複雑?簡単?
0815デフォルトの名無しさん
2010/02/06(土) 17:49:220816デフォルトの名無しさん
2010/02/06(土) 17:50:05STLが吐く長いエラーメッセージはさすがに慣れたけど
0817デフォルトの名無しさん
2010/02/06(土) 17:55:310818デフォルトの名無しさん
2010/02/07(日) 11:35:00とにかく他人にも,そして自分にもわかりやすく書くだけ
忘れた頃に見ても
0819デフォルトの名無しさん
2010/02/10(水) 02:26:30仕方ないから
struct XYZ{
double array[3];
XYZ(){}
XYZ(const XYZ&xyz){memcpy(array, xyz.array, sizeof(double)*3);}
~XYZ(){}
XYZ &operator[](unsigned int n){ return array[n]; }
};
って作ったけど、もっと楽にできなかったのかなぁ?
0820819
2010/02/10(水) 02:32:51大量の要素を入れたかったんで、double配列いっこいっこに、mallocの管理領域使うのがもったいなかったんだ。
あと、vector<double>にしといて、[i][j]を[i*3+j]ってしたり、ループするときにイテレータ3個飛ばしにしてもよかったんだけど、
なんかそこらへんでコードが地味に複雑化するのが嫌だったんだ。
0821デフォルトの名無しさん
2010/02/10(水) 05:43:200822デフォルトの名無しさん
2010/02/10(水) 07:02:33配列っぽく扱える必要があるなら使えないが。
0823デフォルトの名無しさん
2010/02/10(水) 07:26:330824デフォルトの名無しさん
2010/02/10(水) 10:25:35POD型の配列にはコピーコンストラクタがないからエラーになるんだろ
0825デフォルトの名無しさん
2010/02/10(水) 11:09:45そんなのがあったのですね。トンクス
0826デフォルトの名無しさん
2010/02/18(木) 07:34:09ブレークポイント(行の左に赤丸)を付けてデバッグ開始をした時に
・ちゃんと矢印が出て止まる状況
・透明な円になり、黄色い△に!が付いて止まらない状況
の2パターンが起きるのは何故なのでしょうか?
以前はちゃんとブレークポイントを入れれば矢印で止まってくれたのですが、
今は止まってくれず、無理に手前のブレークポイントからステップインすると
ソースを表示できない とか 逆アセンブル画面へ とかと出てしまいます。
どうすればコードを辿れるようになるでしょうか・・。
0827デフォルトの名無しさん
2010/02/18(木) 10:17:300828デフォルトの名無しさん
2010/02/18(木) 15:12:400829デフォルトの名無しさん
2010/02/18(木) 15:25:450830デフォルトの名無しさん
2010/02/18(木) 20:31:00情報ありがとうございます。デバッグモードのままでこうなるのですが・・
頂いた情報から調べてみようと思います。 ありがとうございました。
0831デフォルトの名無しさん
2010/02/18(木) 20:44:20「ヘッダーファイルに#define」で作っていたのですが、
配列の要素数宣言などに使うわけでもなく、ただ1ソース内の複数メソッドで使う数値などは
そのソースのグローバルスコープにstaticで作った方が良い気がしてきたのですが、
これはプログラミングの常識として、やらないべきなのでしょうか? やるべきなのでしょうか?
0832デフォルトの名無しさん
2010/02/18(木) 22:09:58> そのソースのグローバルスコープにstaticで作った方が良い気がしてきたのですが、
C言語ならそのソースの頭で#defineすれば良い。
C++ならconst定数を使うべき。
いずれにせよやらないべき。
↓↓C++にて↓↓
今までは
#define max_num 100
としていたところをヘッダに
const int max_num = 100;
と書けばよい。
ttp://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01042.html
0833デフォルトの名無しさん
2010/02/18(木) 22:18:111ファイルだけでしか使わないなら、そのファイルの先頭で定義するのは普通。
C++ならconst使え、とは832も言っているとおりだが。
0834デフォルトの名無しさん
2010/02/19(金) 00:11:02ありがとうございます。用途に応じてconstを使うよう心がけようと思います。
0835デフォルトの名無しさん
2010/02/26(金) 00:36:35(1)
char* x = "ABC";
*x = 'x';
を実行するとエラーになるのですが、なぜ2行目の代入はうまくいかないのでしょう
(2)
void test(const int n)
{
int a[n];
}
int main()
{
test(5);
}
を実行すると、
定数式が必要です。
サイズが 0 の配列を割り当てまたは宣言しようとしました。
'a' : サイズが不明です。
というエラーが出てコンパイルできません。
testの仮引数を定数にしたので配列が作れると思ったのですがなぜだめなのでしょう。
0836デフォルトの名無しさん
2010/02/26(金) 02:03:41(1) http://www.kouno.jp/home/c_faq/c1.html#32
(2) http://www.kouno.jp/home/c_faq/c11.html#8
0837デフォルトの名無しさん
2010/02/26(金) 02:58:24ありがとうございます。(1)はわかりましたが、(2)に関しては
const int n = 5;
int a[n];
はコンパイルでき、違いがよくわかりません。
関数として用いる場合(>>835の書き方)は事実上定数になっていない、ということでしょうか
0838デフォルトの名無しさん
2010/02/26(金) 03:21:53それがコンパイルできるなら、たぶん C++ 使ってるんじゃないかと。
0839デフォルトの名無しさん
2010/02/26(金) 04:04:15どこでCとC++の区別をつけるのかいまいちよくわかっていませんが、
C++のつもりで書いていました。
0840デフォルトの名無しさん
2010/02/26(金) 04:12:29コンパイラが違う
0841デフォルトの名無しさん
2010/02/26(金) 04:24:55CからC++が派生する過程で、constがついている変数は定数とみなすようにルールが変更された。
逆に言うと、constがなければ定数とはみなさない、というルールなので従うしかない。
VC系コンパイラなら、拡張子をcにすればconstがついていてもエラーになると思う。
これがgccだと>>835の(2)すら通っちゃうんだが、言語仕様上はエラーになるのが正しい、はず。
0842デフォルトの名無しさん
2010/02/26(金) 04:28:04gcc で通っちゃうのはおそらく C99 の仕業。たぶん const なくても通る。
0843デフォルトの名無しさん
2010/02/26(金) 04:41:140844デフォルトの名無しさん
2010/02/27(土) 14:16:59ttp://bal4u.dip.jp/mt/program/c-4/
ここの「数字変換 10進数を2進数に変換 dec2bin」を、
10進数から3進数へ変換するようにしたいのですが、うまくいきません。
どのようにしたらよいでしょうか。
0845デフォルトの名無しさん
2010/02/27(土) 14:43:18どうしたらうまくいかなかったを書かないとなんともいえない。
0846デフォルトの名無しさん
2010/02/27(土) 15:32:41というクラスで、孫クラスを親クラスに見立てて扱いたい(多態)と思い、
(親クラス型)孫クラス
というふうにアップキャストしようとしたら、コンパイラに怒られました。
こういうの、って設計がマズいということでしょうか・・・
0847844
2010/02/27(土) 15:33:03{
r = 0;
non_zero = 0;
for(i = dec_len - 1; i >= 0; i--)
{
d = tmp[ i ];
tmp[ i ] = d / 3;
if(r > 0){tmp[ i ] += 3;}
if(tmp[ i ] > 0){non_zero = 1;}
switch(d)
{
case '0': r=0;break;
case '1': r=1;break;
case '2': r=2;break;
case '3': r=0;break;
case '4': r=1;break;
case '5': r=2;break;
case '6': r=0;break;
case '7': r=1;break;
case '8': r=2;break;
case '9': r=0;break;
}
//r = d & 1;
}
bin[ bin_len++ ] = r;
}while(non_zero);
主要部分を改造した物を上げて見ます。
ごらんの通り、答えが合いません。
全体的に訳が分かりません。(元のソースは理解できましたが……)
0848デフォルトの名無しさん
2010/02/27(土) 18:24:32その変換は暗黙の変換で通るはず。
これ以上はエラーメッセージやソースを晒してもらわないとわかんない。
0849デフォルトの名無しさん
2010/02/27(土) 18:32:43元のソースから変数名が適当で読みにくいソースだね。わけがわからないのはそのせいじゃない?
素直に一旦ふつうの整数値として取り出して3進の文字列に書き出すようにしたほうが
簡単だと思うよ。整数値に変換する部分は strtol() 使えば一発だし。
0850844
2010/02/27(土) 19:44:37多倍長演算ってことになっているので、いったん数値に戻すっていうのも難しそう。
一応 50桁の10進数を3進数に変換したいと考えています。
他に簡単に10進 3進の相互変換が出来そうな仕組みはありませんかね。
とりあえず一桁の時の答えだけは合うようになった(笑)
0852デフォルトの名無しさん
2010/02/28(日) 23:07:29849 同様に俺も数値にした方がミスしにくいし応用も効くしいいと思うけどな
桁数多くてもgmp みたいなものもあるし,必要なら自分で class 作っても良いし
まぁ目的に依るけどね
>>844 のコードを変更することだけが目的ならしょうがないけどね
0853デフォルトの名無しさん
2010/03/07(日) 20:07:361バイト分しかコピーできないのですが、(256以上が0…1…2… となってしまいます。)
どうすれば8バイト分コピーできるのでしょうか。
0854デフォルトの名無しさん
2010/03/07(日) 20:49:47C/C++にそんな型は存在しません。
MFCの用語はスレチな気がする。
ttp://pc12.2ch.net/test/read.cgi/tech/1250919279/
こことかか?
0855デフォルトの名無しさん
2010/03/07(日) 20:59:30MFC っていうか Win32 だと思われ。
書いてる事そのものは memcpy とか CopyMemory だけどそれが本当に自分のやりたい事かどうか
確認した方がいいかもしれない。
0856デフォルトの名無しさん
2010/03/07(日) 21:01:36> C/C++にそんな型は存在しません。
小心者スレッドなんだからまあ良いではないか。
>>853
どんなコードでコピーしたの?
そもそもBYTE型に256以上の値は入らないし、DWORDだったら4バイトだよね。
0857854
2010/03/07(日) 21:21:41> 小心者スレッドなんだからまあ良いではないか。
一応 小心者 向けに多少はしたつもりだったんだが、
俺の言い方はやっぱまだ厳しかったか。
スマン
0858デフォルトの名無しさん
2010/03/07(日) 21:40:130859853
2010/03/08(月) 00:08:15ありがとうございます、memcpy使えば良かったですね、
他の事に気がいっててそんな事にも気付かなかった、 orz
あとDWORDは4バイトだったんですね、ご指摘ありがとうございました。
0860デフォルトの名無しさん
2010/03/08(月) 10:55:08メモリ上の配置の把握が必要だけど、memcpyするにしてもそれは必要だし
0861デフォルトの名無しさん
2010/03/08(月) 12:43:22エイリアシングルールというものがあってだな。
http://www.radiumsoftware.com/0304.html#030408
0862デフォルトの名無しさん
2010/03/09(火) 03:46:008bit変数配列→32bit変数配列、とかならどうしたもんだか
0863デフォルトの名無しさん
2010/03/12(金) 22:33:090864デフォルトの名無しさん
2010/03/12(金) 23:04:11同じかそれ以上の速さになることはあると思っていましたが、遅くなるとはどういうことなんでしょうか??
CPUには乗算や除算のほうが高速に行える回路が付いてるんでしょうか??
0865デフォルトの名無しさん
2010/03/12(金) 23:45:00推測ではどういう風にでも考えられるので
コンパイラにアセンブリを吐き出させてみればどうでしょう
0867デフォルトの名無しさん
2010/03/13(土) 10:20:26気になるなら#ifdefするなり効率落として変換関数書くなりすればいいんじゃね
綺麗で効率いい方法は知らん
0868デフォルトの名無しさん
2010/03/13(土) 10:40:470869デフォルトの名無しさん
2010/03/13(土) 12:11:15できる限り標準に準拠するのは正しい態度だと俺は思うよ
* ずっとWindowsだけの仕事をするとは限らん
* 元々Windowsだけのつもりでもコードの一部流用とかすることがありうる
0870デフォルトの名無しさん
2010/03/13(土) 13:45:37汚くする理由の無い部分は綺麗に書くのが当然だが、エンディアン絡みの処理を
すっきり綺麗に効率良く、って訳には行かんだろ現状
0871デフォルトの名無しさん
2010/03/13(土) 14:15:49* 言語標準に準拠しつつクロスプラットフォームではないコードは極めて一般的
* OS標準に準拠しつつクロスプラットフォームでないコードは言うまでもなく一般的
* そもそも「絶対に」という前提の話
まず、クロスプラットフォームと規格準拠は全くの別物。前者の需要は極めて稀。
Windowsアプリを書く時にクロスプラットフォームにしようとするのは、かなり病的
にならないと困難だと思うぞ。犠牲も大きいし。
0872デフォルトの名無しさん
2010/03/13(土) 15:25:22クロスプラットフォームでも楽に書けるぞ。
0873デフォルトの名無しさん
2010/03/13(土) 21:57:02プラットフォーム依存性が必要無いところは敢えて依存性持たせない方が
良いと俺は思うけどな
必要もなくプラットフォーム依存してるコードもよくあるが
元々絶対に流用しないつもりでも一部切り貼りって結構あると思うぞ
0874デフォルトの名無しさん
2010/03/13(土) 22:02:260875デフォルトの名無しさん
2010/03/14(日) 07:46:33書けるなら当然その方がいい。
Qtは微妙だろ。必要も無しにあれを選ぶ理由は無いと思う。
0876872
2010/03/14(日) 10:36:59俺の言いたいことは伝わると思うんで、適当に読み替えてください。
0877デフォルトの名無しさん
2010/03/14(日) 15:01:47クロスプラットフォームでも楽に書けるぞ。
・・・当たり前だろjk
0878デフォルトの名無しさん
2010/03/15(月) 00:23:17普通は細かいことをバッサリ諦めるしか無いのがクロスプラットフォーム
0879デフォルトの名無しさん
2010/03/15(月) 00:27:380880デフォルトの名無しさん
2010/03/15(月) 08:24:510881デフォルトの名無しさん
2010/03/15(月) 21:37:14細かいこと気にしない方が逆にいいものできたりして…
稀かもしれんが
0882デフォルトの名無しさん
2010/03/15(月) 22:23:42「逆にいい」は稀かと
あっても無くても関係ない、ならまだそれなりにある話だが
CUIなら割と素直にクロスプラットフォームになりやすいけどな
それでも、元の流れの内容をエンディアン違いにまで対応させようとしたら
あまり綺麗には済まないが
0883デフォルトの名無しさん
2010/03/16(火) 21:46:48ソース分岐させてるけどな。C/C++標準だけで書ける実用品なんて小物だけ。
LinuxとBSD系ですら、パフォーマンスを実用レベルにする為には移植作業が必要に
なったりする訳で。Windowsならなおのこと。
0884デフォルトの名無しさん
2010/03/16(火) 21:56:00ディレクトリすら作れないし
バイナリファイルを標準入出力で読み書きできないし
大きなファイルのシークもできない
0885デフォルトの名無しさん
2010/03/16(火) 21:57:51と言ってるじゃないか。
だれもC/C++標準だけで満足はしないさ。
0886デフォルトの名無しさん
2010/03/16(火) 22:03:09切り捨てているものも多いな
0887デフォルトの名無しさん
2010/03/16(火) 22:18:270888デフォルトの名無しさん
2010/03/16(火) 22:24:03> そしてパスに空白を含むと落ちるクソアプリができあがると
たまにそういうクソアプリが見つかるけど、
それが原因だったんかい!
0889デフォルトの名無しさん
2010/03/17(水) 01:19:44ほとんどは解決しないよな
0890デフォルトの名無しさん
2010/03/17(水) 18:28:38ムというと firefox, thunderbird, gimp, cygwin とか思いつくけど
これらってクソアプリやへぼアプリの分類なの?
0891デフォルトの名無しさん
2010/03/17(水) 18:58:00実のところ、Windows専用でも、Unicodeファイル名に対応していないプログラムは
ものすごく多い、特にコンソールアプリケーションではそれが普通
0892デフォルトの名無しさん
2010/03/17(水) 19:20:32必死に移植作業してマクロで分岐させるんならいくらでもクロスプラットフォームに
なるのは当然だろw
0893デフォルトの名無しさん
2010/03/17(水) 22:53:58firefox, thunderbird, gimp, cygwin が
クソアプリやへぼアプリだったら
そうじゃないアプリって世の中にほとんどないんじゃないか?
0894デフォルトの名無しさん
2010/03/17(水) 23:49:10だが、あの辺のは「現実に十二分な需要がある」から、仕方なく「多大な手間を掛けて
複雑なコードを書いて」実現してるから、牧歌的な話からは程遠い
0895デフォルトの名無しさん
2010/03/18(木) 00:16:50> クロスプラットフォームなコードでもクソじゃないのはあると言いたいんだろ
クロスプラットフォームのアプリのほとんどが
クソアプリだってことが言いたいのかい?
0896デフォルトの名無しさん
2010/03/18(木) 00:19:05例えばlameは最優秀のMP3エンコーダーだが、Unicodeファイル名には対応していない
0897デフォルトの名無しさん
2010/03/18(木) 00:31:070898デフォルトの名無しさん
2010/03/18(木) 00:32:40GUIの場合、IMEという難関もあるし
0899デフォルトの名無しさん
2010/03/18(木) 11:56:10どう見ても真逆の意味にしか読めないが
0900デフォルトの名無しさん
2010/03/18(木) 12:05:23けどね、ってのが無駄
自然に非依存なコードになるならそれでいいんだよ(エンディアンなんかは面倒な
ことをしなきゃ非依存にはならんけど)
実需があるなら無理もしなきゃならないし、変態コードが肥大しても許される
0901デフォルトの名無しさん
2010/03/18(木) 12:08:51クロスプラットフォームを本気で考えるのは、プロジェクトが大きくなってからで
いいと思う
0902デフォルトの名無しさん
2010/03/18(木) 14:36:18他人が使ってくれるかどうかっていうところがなw
0903デフォルトの名無しさん
2010/03/18(木) 18:14:36> 自然に非依存なコードになるならそれでいいんだよ(エンディアンなんかは面倒な
> ことをしなきゃ非依存にはならんけど)
素朴な質問だが通常のコーディングでなぜエンディアンを
生で扱わなければいけないの?
0904デフォルトの名無しさん
2010/03/18(木) 18:20:57誰かがエンディアンを持ち出したからだろ
0905デフォルトの名無しさん
2010/03/18(木) 18:21:42少なくとも画像や音声など、バイナリデータを弄る場合には必ずエンディアンの問題は
出てくるでしょ
ネットワークプログラミングにおけるntohl()のように、ホストエンディアンを
意識せずに「ホストエンディアンと対象エンディアン(bigないしlittle)を
変換する関数」を複数用意することで、問題を解決できることが多いと思うけど
0906デフォルトの名無しさん
2010/03/18(木) 18:35:28画像,音声,ネットワークだと生で扱わなくてもライブラリがあるんでは
自分で用意する必要は必ずしも無いはず
0907デフォルトの名無しさん
2010/03/18(木) 18:47:09いけない」とは読み取れないんだが
0908デフォルトの名無しさん
2010/03/18(木) 20:41:29ま、ライブラリにおんぶにだっこでいい場合はそうだね
ただ、例えばntohl()のようなものはホストエンディアンによってコードを
分ける必要はなくしてくれるが、「ここはネットワークエンディアンに変換する
必要があるのでntohl()を呼ぶ」ような仕事は残るわけだから、
エンディアンを意識しなくてよい、というわけではないよね
0909デフォルトの名無しさん
2010/03/18(木) 22:06:47それはどういうライブラリ使うかじゃないか?
たとえば画像の時は「必ずエンディアンの問題は出てくる」というが,
magick++ みたいなもの使えば「エンディアンを意識しなくてよい」
という状況だと思うけど違う?
0910デフォルトの名無しさん
2010/03/18(木) 22:30:11正直議論の意味というか、何にこだわってるのか、何を知りたいのか
全く理解できんのだけど……
magick++を使ったことは無いのでわからんが、まあ、そう言ってしまえば
何だってそうだといえるだろうさ
画像処理で言うと、ファイルフォーマット内のバイトオーダーは
ライブラリによって隠蔽されるケースは多いと思う
が、ライブラリにロードしてもらった32bitラスタ画像のピクセルフォーマットが
ARGBかBGRAか、といったことは、ピクセルを弄る場合には結局必要になるわけだ
0911デフォルトの名無しさん
2010/03/18(木) 22:54:34みたいに使えるんでないの?
ロードの処理が重くなりそうだが。
0912デフォルトの名無しさん
2010/03/18(木) 23:01:06一瞬意味が分からなかった、その.aはARGBのAか
まあ、そういう実装は可能だろうね
Cだと
PutPixel(point, a, r, g, b)
のような関数ないしマクロを使うんだろう
0913デフォルトの名無しさん
2010/03/18(木) 23:13:43画像処理と言ってもライブラリを使える場合もあるから
「必ずエンディアンの問題は出てくる」ということも無いということだよ
magick++ とかを使ってできることをわざわざ車輪を再発明する事もない場合も多いし
具体的にピクセルをどう弄りたいわけ?
0914デフォルトの名無しさん
2010/03/19(金) 01:45:40ああ、要するに「必ず」は言いすぎだろ、という突っ込みか
確かに言い過ぎたね
0915デフォルトの名無しさん
2010/03/19(金) 12:22:010916デフォルトの名無しさん
2010/03/19(金) 12:36:420917デフォルトの名無しさん
2010/03/27(土) 23:45:49C++を勉強中の初心者です。
ポインタを関数の戻り値する場合は関数内の宣言にstaticをつけなければならないという記述をよく目にするのですが、
以下のようにstaticをつけずにHoge hを宣言しても問題なくプログラムが動き、5が出力されます。どういうことなのでしょうか。
typedef struct{
int k;
} Hoge;
Hoge* func(int a)
{
Hoge h;
h.k = a;
return &h;
}
int main()
{
Hoge* h = func(5);
cout << h->k;
}
0918デフォルトの名無しさん
2010/03/27(土) 23:59:25Hoge h がスタック上に作られている場合、関数から帰ってきた
直後は問題ない可能性が高いが、もう1回func()を呼んだり
別の関数を呼んだりすると、おかしくなる可能性がある。
0919デフォルトの名無しさん
2010/03/28(日) 00:02:59動くのはたまたまです
試しに、func(5) のあとに別の関数を呼んでみてください
別の結果になると思います
0920デフォルトの名無しさん
2010/03/28(日) 00:16:44たしかにおっしゃるとおりの事態が起きました。
ありがとうございます。
あと実はこのことに直接関わるかはわからないのですが、
別のプログラムにおいて、同じように構造体のポインタを戻り値とする関数をつくって内部の宣言をstatic有りと無しどちらも試したところ、
staticをつけた方はmainを抜けるところで停止してしまいます。
関係があるのかどうかよくわかりませんが、もし心当たりがありましたらお教えいただけると幸いです。
0921デフォルトの名無しさん
2010/03/28(日) 00:23:11ソースをcodepadに貼れ
言ってる事がよくわからない
0922デフォルトの名無しさん
2010/03/28(日) 00:25:57そんなことで悩むぐらいならポインタでなく実体を返せばいいと思う
Hoge func(int a)
{
Hoge h;
h.k = a;
return h;
}
0923デフォルトの名無しさん
2010/03/28(日) 01:30:09構造体の配列を返したかったので・・・
すみませんどうやら別のところで引っかかっていたようで、今解決しました。
どうもお騒がせしましてすみません。
0924デフォルトの名無しさん
2010/03/28(日) 03:13:39呼び出し側で(空でいいから)構造体を用意して、そのポインタを関数に渡して、
関数側はその渡されたポインタで構造体の中身を加工する、っつーのが普通だし、
そういう設計ならポインタを返す必要も無いしstaticも要らないし、static無しで
ポインタ返しても別に問題無い
何でそうなるかが分からんようだと辛い
0925デフォルトの名無しさん
2010/03/28(日) 09:22:50関数側で確保した構造体のポインタじゃなくて構造体を返すのもダメ?
0926デフォルトの名無しさん
2010/03/28(日) 10:41:34(コピーのオーバーヘッドはおいといて)1個の構造体や、固定長の構造体配列ならそれでもいいんじゃないの?
任意個数の配列をポインタではなく値で返す方法ってのを俺は知らないのだけど、どんなのがある?
>>920
staticつけないのは論外として、つけてもポインタの指し示す先が共有されていることは理解してる?
int *func(int n){
static int a;
a=n;
return &a;
}
int main(void){
int a,b;
a=func(1);
b=func(2);
printf("a = %d, b = %d\n", a, b); /* a = 2, b = 2 */
return 0;
}
0927926
2010/03/28(日) 10:42:50int main(void){
int *a,*b;
a=func(1);
b=func(2);
printf("*a = %d, *b = %d\n", *a, *b); /* *a = 2, *b = 2 */
return 0;
}
0928925
2010/03/28(日) 13:39:27与えたデータから新しいデータを作るというときに
const vector<double> parseData(double x,vector<double> v,...){
vector<double> v1;
…vector 領域確保して,データを料理してv1に入れる…
return v1;
}
int main(){
...
vector<double> vData(paseData(x,v,...));
}
みたいなのはなぜいかんのかなと思って
void parseData(vector<double>&v1,double x,vector<double> v,...){
…vector 領域確保して,データを料理してv1に入れる…
}
int main(){
vector<double> vData;
paseData(vData,x,v,...);
}
みたいに必ず書かなきゃいかんのかな?(確かに昔Fortranとかはいつもこういう
スタイルだったなぁ)
個人的には前者の方が直感的だけど
簡単のため vector の例にしたけどもちろん自分で定義したデータ class でも同じこと
0929デフォルトの名無しさん
2010/03/28(日) 13:40:410930デフォルトの名無しさん
2010/03/28(日) 15:38:130931デフォルトの名無しさん
2010/03/28(日) 16:47:510932デフォルトの名無しさん
2010/03/28(日) 17:06:34#include <memory>
#include <iostream>
using namespace std;
using namespace std::tr1;
shared_ptr<vector<double> > parseData(double x){
shared_ptr<vector<double> > v1(new vector<double>);
v1->push_back(x);
return v1;
}
int main(){
shared_ptr<vector<double> > vData(parseData(1.5));
cout << vData->at(0) << endl;
}
0933デフォルトの名無しさん
2010/03/28(日) 20:14:03引っ掛かると思われ
0934デフォルトの名無しさん
2010/03/28(日) 20:24:01#include <vector>
using namespace std;
int sum(vector<int> vec){
int ammount = 0;
for(vector<int>::iterator it = vec.begin();it != vec.end(); ++it){ ammount += *it; }
return ammount; } // 2ch行数制限回避
int main()
{
vector<int> v;
v.push_back(1);v.push_back(2);v.push_back(3);
cout << sum << endl; // 表示結果: 6
}
はいいんだけど、sumを
template <class T, T zero> T sum(vector<T> vec)
{
T ammount = zero;
for(vector<T>::iterator it = vec.begin();it != vec.end(); ++it){
ammount += *it;
}
return ammount;
}
にして、main中のcoutの行をcout << sum<int, 0>(v) << endl;にすると
a.cpp:8: error: dependent-name ‘std::vector::iterator’ is parsed as a non-type, but instantiation yields a type
a.cpp:8: note: say ‘typename std::vector::iterator’ if a type is meant
のようになっちゃう。vector<T>::iterator itをT vector::iterator itに変えても
a.cpp:9: error: ‘template<class _Tp, class _Alloc> class std::vector’ used without template parameters
a.cpp:9: error: expected initializer before ‘it’
になっちゃう。
どう対処すればいいんでしょう?
0935デフォルトの名無しさん
2010/03/28(日) 20:29:520936デフォルトの名無しさん
2010/03/28(日) 20:57:050937デフォルトの名無しさん
2010/03/29(月) 20:14:090938デフォルトの名無しさん
2010/03/29(月) 20:59:59VC10とかg++ 4.3とかめちゃくちゃ新しいコンパイラならはありだと思うようになってきた。
C++0xのおかげでコピー発生しなくなったから。
0939デフォルトの名無しさん
2010/03/29(月) 22:17:32全てライブラリのコンテナに限定するなら構わんだろうけど
0940デフォルトの名無しさん
2010/04/07(水) 05:36:100941デフォルトの名無しさん
2010/04/07(水) 05:40:420942デフォルトの名無しさん
2010/04/07(水) 13:16:50不透明ポインタあたりでぐぐれ
0943デフォルトの名無しさん
2010/04/25(日) 09:34:01別のファイルをドラッグ&ドロップし、処理を加えたいのですが、
そのドラッグ&ドロップした1〜多のファイルのパスを、変数として得るにはどうすれば良いのでしょうか?
検索すべきキーワードか参考になるURL程度の情報で構いませんので
何かヒントを教えて頂けると助かります。よろしくお願いします。
0944デフォルトの名無しさん
2010/04/25(日) 11:05:560945デフォルトの名無しさん
2010/04/25(日) 12:05:06#include <stdio.h>
int main(int argc, char **argv)
{
int i;
for(i=0;i<argc;i++) printf("%s\n", argv[i]);
printf("\n\nPress Enter key to exit.\n");getchar();
return 0;
}
0946デフォルトの名無しさん
2010/04/25(日) 15:13:34ありがとうございます。
コマンドライン引数とはそういう代物だったのですね。(普段コンソールをさらわないもので;)
しかしOnDropFilesで調べると、苦手なWindowsメッセージ関係を触らねばならない予感・・。
今回は私的で単純な処理なので、945様に頂いたコード。理解できましたので
コンソールに置き換えて実現しようと思います。
お二方、ありがとうございました。
0947デフォルトの名無しさん
2010/04/26(月) 10:05:39ドラッグ'n'ドロップでコマンドライン引き数に展開するってのはWindows限定の話だからね。
つーか、そもそもたまたま回答者がWindowsを想定してくれたからいいけど
自分の使いたい環境くらい書いて質問しなさいよ。
0948デフォルトの名無しさん
2010/04/26(月) 20:14:58自然だと思うけどな、現実的に考えて
0949デフォルトの名無しさん
2010/04/27(火) 12:19:39DnDなんてC/C++標準じゃあないわけだし、標準からずれるんだったら環境書いてほしいという
もまいの意見を否定する気はまったくないが、
DnDの挙動がそうなってるデスクトップ環境やらファイラやらって、X11でもそれなりにあるぞ。
使い勝手考えたら、自然な仕様なんじゃないかとは思う。
0950デフォルトの名無しさん
2010/04/28(水) 13:55:55俺立てられないし。
0951デフォルトの名無しさん
2010/04/28(水) 15:24:32980くらいで十分じゃないか
0952デフォルトの名無しさん
2010/04/29(木) 00:28:550953デフォルトの名無しさん
2010/05/06(木) 23:20:18これからどうすればいいのかまさにポカーンとしてるんだ。
最終目的は業務を効率化させるwinプログラムを組みたいんですが
次は猫winに行くべきなのか、もう少しコンソールアプリの勉強をしたほうがいいのか。
皆の勉強してきた履歴やこれからこうしたほうがいいんじゃね?
って勉強方法を教えてくれ。
独学でやっているので周りにCが判る仲間はいない。さびしい。
0954デフォルトの名無しさん
2010/05/06(木) 23:47:35これこれこういうことができると便利になるのになあ、みたいな
構想はあるの?(プログラムを外注に出すとしても、それは
自分で考えないといけない)
0955953
2010/05/07(金) 00:07:29中途半端なシステムを売りつけられて終わった感じなんです。
社内にプログラムやPCに詳しい人も居なかったんで誰も強く言えず
不便ダナァと思いながら日々そのシステムを使っています。
この中途半端なシステムを何十年も使い続けるわけには行かないんで、
自分で勉強をして、便利なシステムが出来るよう提案しようと思ってる。
いかんせん知識がないと外注先とも話ができないもんで。
必要な知識を揃えて、たたき台のプログラムを上司や外注先に
プレゼンで提示したいなって考えてる。
そのシステムにはネットワークが使われてるんでそのへんの勉強もしたい。
今の自分の実力はコンソールアプリでやっと簡単な表計算プログラムや
時刻の処理とかバイナリやテキストファイルの出力が出来るようになった感じです。
0956デフォルトの名無しさん
2010/05/07(金) 00:20:10VB とか C# とかだと、ボタンとかをぺたぺた貼り付けて
このボタンを押したときはこうやって…、このボタンを押したら
このウィンドウを出して…、とかがわりとかんたんにできるので、
(ボタンを押したときの処理とかは、今までに勉強したことが
役に立つと思うし、)そういうのに手を出してみてもいいんじゃ
ないかと思う。
実際の処理の実装が難しすぎるなら、画面だけ作って、
「このボタンを押したらこういう処理をして…」みたいな感じで
外注に指示を出すこともできると思う。
0957デフォルトの名無しさん
2010/05/07(金) 00:43:30それはその時はそういう必要があったから
coding できるようになることが目的ならば(そこが明らかではないけど)
coding するしかない
coding するなら自分の興味のあることや必要なことの方が早く進む
ネットワークプログラミングだけでも十分歯ごたえある
GUIまでやるならC++/C#みたいな言語の方が良いと思う
俺はC++使ってるけど,入り方気をつけないと煩雑だから混乱すると思う
0958デフォルトの名無しさん
2010/05/07(金) 01:24:080959953
2010/05/07(金) 23:35:59C#は非常に興味があるのでチャレンジしたいと思います。
VBは作ったソフトが重いというのでちょっと敬遠・・。
コーディングできる様になることも目的としています。
周りみてると誰も使えそうな人がいないんで、社内に一人いれば
長いリーマン生活のなかで役に立つと思うんで。
GUIまでやりたいんで、C++とかC#も同時進行したほうがよさそうですね。
要求定義の必要性も感じています、自分は不平の中に改善点があると思ってるんで
ただ、それを現す日本語力が不足してるんで、根回しや下準備に力を入れたいと思うよ。
暫く今ある知識でC言語で事務処理系のコーディングして
Cがもっと理解できるようになったらC#かC++に手を出すよ。
みんなアリガトウな!
0960デフォルトの名無しさん
2010/05/07(金) 23:39:31> GUIまでやりたいんで、C++とかC#も同時進行したほうがよさそうですね。
それはたぶん止めといた方が良いと思うぜ。
> 暫く今ある知識でC言語で事務処理系のコーディングして
> Cがもっと理解できるようになったらC#かC++に手を出すよ。
それならおk。
俺的&このスレ的にはC++がお薦め。
それかJavaでもOK。C#は存在が中途半端。
0961953
2010/05/07(金) 23:55:27まだVB、JAVA、C++、C#の各種言語の違いと特性を把握できないんだが。
まぁ、VBは素人目から見てても実行速度遅そう・・・って思う。
JAVAは、どの環境でも移植出来るのか・・・便利そう?って感じがする。
C#をお勧めしない理由はなんでかな?良かったら具体的に教えてくれ。
0962953
2010/05/08(土) 00:58:42ぐぐってC++とc#の違いをなんとなく読んできた。
C++の方がC言語の知識を流用できそうなので、もう少しCを掘り下げてから
windowsプログラムに手を出すのと同時にC++かなぁ、ってなんとなく目標ができました。
0963デフォルトの名無しさん
2010/05/08(土) 01:32:390964デフォルトの名無しさん
2010/05/08(土) 02:16:120965デフォルトの名無しさん
2010/05/08(土) 02:45:14C++も簡単なTMPくらいは書けるからそこそこやれる方だと思うけど、それでも
コンソールで済む用途にはPerlを使ってる。今から覚えるんならPythonかPHPかな、
と思うけど。
まぁこの辺のはいわゆるスクリプト言語なんだけど、開発速度が圧倒的。仕事で
これは相当大きいんだよな。
例えば、納期三時間前に「不正なデータをなるべく調べ上げて修正しておきたい」
とか言われた時、スクリプトだと数分でそこそこできるし、一時間あればかなり
面倒なものまで書ける。何より、安全装置がガチガチだから、バグが出にくい。
その分遅いけど。
暇なら両方覚えた方が絶対にいいけどね。先にPythonってのも悪くないと思う。
動く物を一つ作れるようになるまでの時間も全然違うだろうし。
0966デフォルトの名無しさん
2010/05/08(土) 05:43:46> VBは作ったソフトが重いというのでちょっと敬遠・・。
今からVBを選ぶ理由もないんだけど、実用に耐えないほど重いわけじゃないよ。
処理の内容によるが、大抵は問題ない。なので、世の中に大量に出回ったわけで。
同様の理由で言語を弾くならC#、ましてJava、スクリプト言語は弾かれるよ。
>>965も暗に言っているけれど、
・正しく動くが遅い(ただし許容できる速度)ソフト
・出来上がっていないが多分速い(もしかするとすごく遅い)ソフト
どっちがいいかっていうところ。
個人的にはC#。C#厨ですまんうへへ。PHPでもいいけど。
0967デフォルトの名無しさん
2010/05/08(土) 08:06:00なる面もあるからな、現状だと。
0968デフォルトの名無しさん
2010/05/08(土) 08:57:29VB.NETはC#と大差ないはずだし
LL言語もいいけど、事務系の業務効率化だと一番即効性があるのは
VBAという場合もあるわけで(業務次第だが)
あとバッチファイルで管理作業を効率化とか
でも趣味として一番面白いのはC++だと思う。一生付き合っていける言語。
0969953
2010/05/08(土) 14:26:58コンソールアプリで文字列の暗号の作成プログラムやら
データソートプログラムなんかの練習を始めました。
コンソールアプリでアルゴリズムやコーディングに慣れてから
猫winも飼って来たので、これを教本にちょこちょこGUIも書き出しました。
API関数?が一通り使えるようになったらC++に行きます。
名無しに戻るけど、また壁にぶち当たったらみんなアドバイス頼みます。
thx!
0970デフォルトの名無しさん
2010/05/10(月) 08:35:14時間掛かってもいい覚悟ならC++から踏み込むのは悪くない
その意味じゃアセンブラを知識だけでもかじるのがベストなんだけど、まぁ、極端か
0971デフォルトの名無しさん
2010/05/10(月) 11:56:56弊社にご相談ください。どんなシステムでも根気よくご相談して必ずやご納得いただけるシステムに成長させてご覧に入れます。
又、プログラミング教育も手取り足取りフレンドリー。イメージしたものを的確に形にできるエンジニアになれるようお手伝いします。
迷う必要はありません、今すぐご連絡を(ぉぃ
0972デフォルトの名無しさん
2010/05/11(火) 00:14:18enumで列挙した名前=定数 のように利用できる方法は無いでしょうか?
char[3][20]に EBI IKA TAMAGO 等と入ってて
それを別の配列abc[30]の要素数に abc[TAMAGO]; と言った形に。(3番目=2)
無理ですかね・・?(・ω・`
0973デフォルトの名無しさん
2010/05/11(火) 00:20:30一般的に言うところのハッシュテーブルみたいなものかな
0974デフォルトの名無しさん
2010/05/11(火) 00:21:41#include <string>
#include <cstdio>
#include <map>
int main()
{
std::map<std::string, std::string> foo;
foo["EBI"] = "EBI";
foo["IKA"] = "IKA";
foo["TAMAGO"] = "TAMAGO";
std::printf("%s\n", foo["EBI"].c_str());
return 0;
}
0975972
2010/05/11(火) 00:51:24mapで補えるんですね。さすがにdefineみたいま扱いは無理そうですね(・ω・`
勉強になりました。ありがとうございます。
0976デフォルトの名無しさん
2010/05/15(土) 12:01:05""付けるのが面倒って意味なら、C++じゃdefine, enum以上のことはできないな。
俺の知る限り、C++では識別子は全部コンパイル時までに決定されて、動的に識別子を増やす方法はない。
けれど何がやりたいのかよく分からない。
コード中に直接TAMAGOとか埋め込みたいんだったら、コンパイルまでに決まってるわけだからenum使ったらいいんじゃないのか?
決まってないんだったら、map使いたくない理由が分からんし。
0977デフォルトの名無しさん
2010/05/15(土) 12:14:26どこまで使えるか、といういつもの話だな。
低レベルかき回しても何でもどうにかしたい、っていう用途ではCと並んで無双の強さ
だが、その強さを維持するのを至上命題としつつも高度な抽象化に対応しようとする
言語だから、楽なパラダイムで書こうとすると制約は少なくない。
余談だが、この「C/C++の最大の武器」を理解してない奴が見ると、C++はまさに
論理的にすっきりしない罠や意味不明の制約だらけの糞言語なんだよな。だから、
初心者はいきなりC++に触るよりC(またはアセンブラ)から勉強する方がいいと
俺は思ってる。
0978デフォルトの名無しさん
2010/05/16(日) 11:27:20「C++の設計と進化」を読むとstroustrupの意図は分かるし、
結構同意できる。
C++の特徴って、何かプラスした結果、同時に大きなマイナスも持ち込んでる
ことだと思う。(記述が増えたり、落とし穴があったり)
でもC++の信者って何でも正しいと思い込んでて、話が合わない
CもC++も分かってる人から見ると、マイナス部分をうまく回避しながら
プラス部分を利用しないと、却ってひどいことになってしまう
しかし、初心者だとひどいことになってるかどうか判断つかない
だから、泥沼に入りやすい言語なんだよね、特に初心者に
0979デフォルトの名無しさん
2010/05/16(日) 19:10:24> でもC++の信者って何でも正しいと思い込んでて、話が合わない
そんな奴いるのか?使ってたらそうは思わんだろう
たとえば,初めからC++言語をデザインするのであれば
こうデザインするか?という質問で yes と答える人間はいないだろう
Cを引きずってるところが使える遺産がすごく多いという意味でも
良いところでもあるけど,言語仕様だけから考えると理想的とは言えん
0980デフォルトの名無しさん
2010/05/16(日) 21:18:39落とし穴はゼロオーバーヘッドの代償としか思えないものがほとんどだけどなぁ
単純に互換性に縛られてる場合もあるが
最初から0xならもう少し楽だったんだろうけどな(それ以前が不満な人には0xも大差無いかも)
0981デフォルトの名無しさん
2010/05/17(月) 01:22:19具体例を挙げてくれ。
0982デフォルトの名無しさん
2010/05/17(月) 07:14:38ネイティブコード目線があれば、「遅くなる仕様は入れないんだな」と単純に分かるんだが。
0983デフォルトの名無しさん
2010/05/18(火) 00:05:31個人的には便利だからよく使うけど
0984デフォルトの名無しさん
2010/05/18(火) 02:42:23もちろんライブラリ自体は最適化されてはいるが
0985デフォルトの名無しさん
2010/05/18(火) 09:34:52例えばスクリプト言語なんかでファイル操作する時にclose書かないと駄目だったら
アホかと思うけど、逆にC++でcloseが必要なのがうざいとか言い出したらアホかと
思うじゃん
水準違いの要求を持ち込まれやすい言語だなぁとは思うっつーか、C++自体が分類
しづらい存在でもあるからなぁ
あとSTLはアホな使い方しなきゃ豪快に速いと思うけど(boost::arrayみたいな奴が
最初からあればもっと良かった)
レス数が950を超えています。1000を超えると書き込みができなくなります。