スレを勃てるまでもないC/C++の質問はここで 16
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/07/16(金) 22:07:27過去ログ
01 http://pc11.2ch.net/test/read.cgi/tech/1167476845/
02 http://pc11.2ch.net/test/read.cgi/tech/1178503366/
03 http://pc11.2ch.net/test/read.cgi/tech/1187521676/
04 http://pc11.2ch.net/test/read.cgi/tech/1221633708/
05 http://pc11.2ch.net/test/read.cgi/tech/1230516307/
06 http://pc11.2ch.net/test/read.cgi/tech/1231564903/
07 http://pc11.2ch.net/test/read.cgi/tech/1232983248/
08 http://pc12.2ch.net/test/read.cgi/tech/1235921779/
09 http://pc12.2ch.net/test/read.cgi/tech/1240022781/
10 http://pc12.2ch.net/test/read.cgi/tech/1242300936/
11 http://pc12.2ch.net/test/read.cgi/tech/1245059383/
12 http://pc12.2ch.net/test/read.cgi/tech/1248010352/
13 http://pc12.2ch.net/test/read.cgi/tech/1260842197/
14 http://pc12.2ch.net/test/read.cgi/tech/1269273471/
15 http://pc12.2ch.net/test/read.cgi/tech/1273368706/
0002デフォルトの名無しさん
2010/07/16(金) 22:34:12ダイアログボックスならWM_CREATEじゃなくてWM_INITDIALOGではなかろうか
あ、ダイアログボックスのプロシージャで受ける場合の話ね。
主ウィンドウ側のプロシージャでWM_CREATEを受けているなら、
(そしてそのプロシージャで件のWM_TIMERも受けているなら)
WM_TIMERの処理中に、つまりGetMessageでWM_TIMERをとってきてから
次にGetMessageを呼ぶまでの間にCreateWindow系の関数を呼び出すと、
・CreateWindow中でWM_CREATEを投げる
→でもメッセージループはWM_TIMERを処理中で回っていない
→CreateWindowがWM_CREATEの処理を待ち続ける
→固まる
というコンボが発生するけど、他のダイアログ呼び出せてるならこれも違うかな。
ちょっとその記述だけだと、どのプロシージャでどのタイミングで投げられたどのメッセージを
受けているのかわかりにくいので、もうちょっと詳しく書いてくれるかソースを上げてくれれば見れるかも。
0003デフォルトの名無しさん
2010/07/17(土) 02:06:540004デフォルトの名無しさん
2010/07/17(土) 05:09:462.#include <memory>をする
3.std::からスマートポインタを使う
4.
5.
6.
7.
8.
9.
10.C++から卒業する
0005デフォルトの名無しさん
2010/07/17(土) 06:30:43std::からどれを使えばいいのかわかりません
0006デフォルトの名無しさん
2010/07/17(土) 07:59:07std::tr1::shared_ptr
std::tr1::weak_ptr
0007デフォルトの名無しさん
2010/07/17(土) 08:13:020008デフォルトの名無しさん
2010/07/17(土) 08:49:32std::vector<unique_ptr<std::string>> str_vec;
っていうのが許されてて、便利になったもんだって感心したわ
0009デフォルトの名無しさん
2010/07/17(土) 12:50:46std::unique_ptrはstd::auto_ptrに似て破壊的セマンティックスなので
コンテナには入れられないよ
0010デフォルトの名無しさん
2010/07/17(土) 12:52:48ならいいの?
boost::shared_ptrとどっち使ったらいいのかわからん
0011デフォルトの名無しさん
2010/07/17(土) 13:09:59std::unique_ptrはstd::auto_ptrからコピーコンストラクタを取り除いて
コピー禁止にした物だと思えばよい
そのため関数の戻り値にも使えない
boost::scoptd_ptrがstd::unique_ptrとリネームされたようなので
boost::scoptd_ptrをぐぐるとよく動作がわかる
0012デフォルトの名無しさん
2010/07/17(土) 13:10:390013デフォルトの名無しさん
2010/07/17(土) 13:11:23○scoped_ptr
まあわかるよな
0014デフォルトの名無しさん
2010/07/17(土) 13:12:06コピーが出来ないのでエラーになるよ
やってみ
0015デフォルトの名無しさん
2010/07/17(土) 13:24:48C++じゃ無理だ
すまんC++0xと勘違いしてた
0016デフォルトの名無しさん
2010/07/17(土) 13:37:49お前が思ってるほどオーバヘッドねーからさ
0017デフォルトの名無しさん
2010/07/17(土) 15:00:33system("grep aaa argv[1]");みたいなイメージでargv[1]にちゃんとファイル名を入れたいんですが・・・
0018デフォルトの名無しさん
2010/07/17(土) 15:12:10キミは理解するまでsystem(3)利用禁止。
「何を理解するまでか?」それを含めて理解するまでだ。
0019デフォルトの名無しさん
2010/07/18(日) 00:19:12VC2010では可能だよ
まぁ0xの先取りなんだけどさ
0020デフォルトの名無しさん
2010/07/18(日) 01:36:450021デフォルトの名無しさん
2010/07/18(日) 22:50:200022デフォルトの名無しさん
2010/07/19(月) 00:03:26気にしなくておk
0023デフォルトの名無しさん
2010/07/19(月) 00:41:290024デフォルトの名無しさん
2010/07/19(月) 10:12:34下のプログラムだと,最初にpatがある行のpatだけ全て置換されてそれ以降の行のpatが置換されません。ポインタというものがあまり理解出来てないからだと思うんですけど,どうしたらいいでしょうか?
#include <stdio.h>
#include <string.h>
int main(int argc,const char*argv[]){const char FILENAME[]="C:/data.txt";
const char RESULTFILENAME[]="C:/result.txt";
const int LEN=100;
char line[LEN];
char src[LEN];
char *find="pat";
char *rep="pattern";
size_t find_len=strlen(find);
size_t rep_len=strlen(rep);
int shift=(int)(rep_len-find_len);
char *start=src;
char *hit;
FILE *dat;
FILE *result;
dat=fopen(FILENAME,"r");
while(fgets(line,LEN,dat)!=NULL){sscanf(line,"%s",src);
while((hit=strstr(start,find))!=NULL){
if(shift>0){memmove(hit+shift,hit,strlen(hit)+1);
}else if(shift<0){ memmove(hit,hit-shift,strlen(hit)+shift+1);
}start=hit+rep_len;
memmove(hit,rep,rep_len);
}fprintf(result,"%s\n",src);
}fclose(dat);
fclose(result);
return 0;}
002524
2010/07/19(月) 10:20:26が落ちていました。すみません。
0026デフォルトの名無しさん
2010/07/19(月) 11:24:06ttp://codepad.org/OxSQOoRw
とりあえず動くように書き換えてみたけど
もっと簡単に考えてみたらいいんじゃない?
2行目以降置換できなかった理由は
start=hit+rep_len; これ
最初の1行目はこれでいいんだけど
2行目以降
strstr(start,find) のstartが無効なアドレスを示して置換できないようになってる
sscanf(line,"%s",src); の後に
start = src; と入れればちゃんと動くかも
002724
2010/07/19(月) 11:47:23回答ありがとうございます。
そういうことだったんですね。納得しました。
どちらも試しましたが,ともに正しく動きました。
本当にありがとうございました。
0028デフォルトの名無しさん
2010/07/19(月) 14:01:48sprintfをとりあえず理解してみようか
それ以前の問題のような肝するが
0029デフォルトの名無しさん
2010/07/19(月) 16:00:18別のvectorにそれぞれコピーする時って、地道にforで回すのが無難ですか?
関数(vec1, vec2, only_vec1, only_vec2);
vec1だけにしかないものをonly_vec1へコピー、
vec2だけにしかないものをonly_vec2へコピーしたい。
0030デフォルトの名無しさん
2010/07/19(月) 16:37:112:複数同じ要素が入っていたら全部消えるのか?
A=5,5,5 B=5,5,4 の時only_aは5か、要素なしか
3:ソートしても問題はないか?
まぁ何するにもforは必要だと思うけど・・・
0031デフォルトの名無しさん
2010/07/19(月) 16:54:09vectorの要素数は同じ、各vectorには重複した要素は入っていない。
オリジナルのvectorの順序が入れ替わるのはまずい。
数回forを回せば分かるんで、もうこれでいいかな。
0032デフォルトの名無しさん
2010/07/19(月) 17:03:26set_difference OutIt set_difference(InIt1 first1, InIt1 last1, InIt2 first2, InIt2 last2, OutIt x)
ソート済みのfirst1からlast1にあって、ソート済みのfirst2からlast2にないものを、
xからのシーケンスにコピーしていきます。コピー後の末尾を指すイタレーターを返します
これを2回使えばできるんじゃないか?
0033デフォルトの名無しさん
2010/07/19(月) 17:13:56あ、あるもんなんだね…集合演算か、初めて見た。
>>32
ありがと。
0034デフォルトの名無しさん
2010/07/19(月) 20:28:29参考になるページやソースなどはありませんか?
0035デフォルトの名無しさん
2010/07/19(月) 20:37:42どの程度のもの?メモリ MMUでググッたら結構出てくるぞ。
http://www.valinux.co.jp/contents/tech/techlib/eos/malloc/malloc_001.html
http://www.jpcert.or.jp/research/2009/3_DynamicMemory.pdf
http://www5d.biglobe.ne.jp/~noocyte/Programming/BigAlignmentSet.html
0036デフォルトの名無しさん
2010/07/19(月) 20:43:400037デフォルトの名無しさん
2010/07/19(月) 20:48:170038デフォルトの名無しさん
2010/07/22(木) 17:26:55int hoge(int []); みたいな関数に
hoge({594,444,200});
みたいな。
0039デフォルトの名無しさん
2010/07/22(木) 17:34:480040デフォルトの名無しさん
2010/07/22(木) 20:45:57暗黙的に#includeされるヘッダファイルは#includeした方がいいんでしょうか
0041デフォルトの名無しさん
2010/07/22(木) 21:18:26includeがいっぱいあるとめんどくさかったり
0042デフォルトの名無しさん
2010/07/22(木) 21:23:50template< class T, int N > class Arg
{
public:
Arg( T val, ... )
{
this->array_[ 0 ] = val;
va_list list;
va_start( list, val );
for( int i = 1; i < N; ++ i )
{
this->array_[ i ] = va_arg( list, T );
}
va_end( list );
}
operator T*(){ return this->array_; }
private:
T array_[ N ];
};
hoge( Arg<int,5>(0,1,2,3,4) );
これでいいだろ
0044デフォルトの名無しさん
2010/07/22(木) 21:45:44ためになるわ ありがとう
0045デフォルトの名無しさん
2010/07/22(木) 21:46:320046デフォルトの名無しさん
2010/07/22(木) 21:50:44利用するライブラリ(API)のドキュメントに必要なヘッダーの一覧が書いてある。
必要なものだけインクルードすれば良い。不要なものはインクルードする必要は無い。
0048デフォルトの名無しさん
2010/07/22(木) 23:16:02Media Foundationや、DirectX Video Accelarationの質問、話題は
どのスレでなされているでしょうか?
0049デフォルトの名無しさん
2010/07/22(木) 23:25:01少なくとも、C/C++のスレよりは適切なはず。
0051デフォルトの名無しさん
2010/07/23(金) 11:37:24構造体を外に出せばコンパイル出来るのですが内部においたままなんとかできないものでしょうか?
innner_struct.cpp: In function `int main()':
innner_struct.cpp:9: error: no matching function for call to `sort(int[10], int*, main()::cmp)'
#include <algorithm>
#include <iostream>
int main()
{
struct cmp { bool operator()(int a, int b) { return a < b; } };
int a[10] = { 3,1,4,1,5,9,2,6,5,3 };
std::sort(a, a+10, cmp());
for ( int i=0; i<10; i++ ) std::cout << ' ' << a[i];
};
0052デフォルトの名無しさん
2010/07/23(金) 21:43:34VCは出来るように拡張してるっぽい。
0054デフォルトの名無しさん
2010/07/24(土) 01:08:540055デフォルトの名無しさん
2010/07/24(土) 01:12:420056デフォルトの名無しさん
2010/07/24(土) 01:54:32std::string(const char *); というコンストラクタによって
暗黙の型変換が行われるから。
ただし、あくまで「stringに(暗黙的に)変換できる」だけであって
「char*を返す」わけではない。
0057デフォルトの名無しさん
2010/07/24(土) 07:14:500058デフォルトの名無しさん
2010/07/24(土) 08:25:350059デフォルトの名無しさん
2010/07/24(土) 14:24:330060デフォルトの名無しさん
2010/07/24(土) 16:10:15引数は新しい配列dst、もとの配列src、各次元の要素数が格納された一次元n要素の配列numElem
を考えています。例えばsrc[a][b][c]ならnumElem[3]={a,b,c}といった感じです。
関数内で渡されたsrc配列の要素数を知るために(sizeof numElem)/(sizeof numElem[0])
としたのですが、下記の設定でsizeof numElemが12を期待しているのに8になってしまいます。
なにが間違っているのでしょうか?
#include <stdio.h>
void arrayConv(double *dst, const double *src, const int *numElem);
int main(void){
double *src,*dst;
int numElem[3]={2,3,4};
arrayConv(dst,src,numElem);
}
void arrayConv(double *dst, const double *src, const int *numElem){
int num;
num=(sizeof numElem)/(sizeof numElem[0]);
printf("%d\t%d\t%d\n",num,sizeof numElem,numElem[0]);
switch(num){
case 2:
break;
case 3:
break;
}
}
0061デフォルトの名無しさん
2010/07/24(土) 16:32:14だから、sizeofの結果はポインタのサイズだ。
0063デフォルトの名無しさん
2010/07/24(土) 17:22:23sizeof numElem; // これは配列のサイズ取れる
const int *numElem;
sizeof numElem; // これはポインタのサイズ
0064デフォルトの名無しさん
2010/07/24(土) 17:24:00http://www.kouno.jp/home/c_faq/c6.html
006560
2010/07/24(土) 17:34:12たしかに関数の外では普通にサイズ12が出力されました。うーん?
>>64
6.21:
なぜサブルーチンの引数として渡された配列の大きさをsizeof()でき ちんと計算できないのか。
A:
コンパイラーは配列仮引数がポインターと宣言されたように振る舞い (質問6.4参照)、sizeof()はポインターの大きさを返す。
引数にした瞬間に配列はポインタになっちゃって、ただの先頭アドレスと型の情報で、
要素数情報がないために関数内で要素数を得ることはできないということでしょうか
0066デフォルトの名無しさん
2010/07/24(土) 19:51:03{
const int i;
const char *c;
public:
Class();
};
Class::Class()
{
i = 1234; // NG
c = "ok";
}
なぜintは駄目なんですか?
0067デフォルトの名無しさん
2010/07/24(土) 19:57:02{}
constはこうして初期化しないとだめ、代入は出来ない。
charの方は
const char* const c;
こういうふうに書き直せ。
0068デフォルトの名無しさん
2010/07/24(土) 21:11:290069デフォルトの名無しさん
2010/07/24(土) 22:09:42Cだとやってしまうような
0070デフォルトの名無しさん
2010/07/24(土) 23:53:45g++ 4.5.0で試してみたら通った。
0071デフォルトの名無しさん
2010/07/24(土) 23:55:02ふーん
0072デフォルトの名無しさん
2010/07/25(日) 02:14:36x -> a,bは
a = x&0xffffffff;
b = x>>32;
って分かるけど
a,b -> yはどうやればいいの?
0073デフォルトの名無しさん
2010/07/25(日) 02:22:430074デフォルトの名無しさん
2010/07/25(日) 02:44:040075デフォルトの名無しさん
2010/07/25(日) 06:50:51初期化記法を汚物と言ってる。
0076デフォルトの名無しさん
2010/07/25(日) 09:20:030077デフォルトの名無しさん
2010/07/25(日) 18:35:13それはたしかに思う。
0078デフォルトの名無しさん
2010/07/25(日) 18:41:150079デフォルトの名無しさん
2010/07/25(日) 18:52:010080デフォルトの名無しさん
2010/07/25(日) 19:03:190081デフォルトの名無しさん
2010/07/26(月) 21:28:170082デフォルトの名無しさん
2010/07/26(月) 21:30:120083デフォルトの名無しさん
2010/07/26(月) 21:38:190084デフォルトの名無しさん
2010/07/26(月) 22:47:25>unsigned char *userKey = "key";
>AES_KEY aesKey;
>AES_set_encrypt_key(userKey, 128, &aesKey);
>error: invalid conversion from ‘const char*’ to ‘unsigned char*’
なんで、コンパイラに怒られるの?
コンパイラ怖い
0085デフォルトの名無しさん
2010/07/26(月) 22:55:110086デフォルトの名無しさん
2010/07/26(月) 22:55:120087デフォルトの名無しさん
2010/07/26(月) 22:56:36今度はきっとAES_set_encrypt_keyの第3引数がunsigned char *だな
const unsigned char []で乗り切れ
0088デフォルトの名無しさん
2010/07/27(火) 02:21:40めるせんぬついすたーつかえ
0089デフォルトの名無しさん
2010/07/27(火) 08:26:290090デフォルトの名無しさん
2010/07/27(火) 09:45:09int b = a * 1024 * 1024;
このとき1024 * 1024はコンパイル時に計算されますか?
0091デフォルトの名無しさん
2010/07/27(火) 09:59:01コンパイラによる
0092デフォルトの名無しさん
2010/07/27(火) 10:02:36やはりそのような感じですか・・・ありがとうございます
0093デフォルトの名無しさん
2010/07/27(火) 10:14:08アセンブラコードを見るのが普通と思うが
const int a;にした上で
C++でとにかくコンパイル時に計算されればいいってんならテンプレートでやりよう自体はあるが
0094デフォルトの名無しさん
2010/07/27(火) 10:19:440095デフォルトの名無しさん
2010/07/27(火) 10:23:06だけど規格ではそれは定められていないよね?
0096デフォルトの名無しさん
2010/07/27(火) 10:32:44とりあえず、
int a = 1024 * 1024;
int b = a * 1024 * 1024;
は
; Line 10
mov DWORD PTR _a$[ebp], 1048576 ; 00100000H
; Line 11
mov eax, DWORD PTR _a$[ebp]
shl eax, 10 ; 0000000aH
shl eax, 10 ; 0000000aH
mov DWORD PTR _b$[ebp], eax
こうなりました
とりあえずコードによっても環境によってもかわるみたいですね。。
009796
2010/07/27(火) 10:35:49visual C++ 2010 Express
です
0098デフォルトの名無しさん
2010/07/27(火) 11:16:37はぁ?
計算の順序を勝手に入れ替えることの意味わかってないんじゃない?
値によっては回り込みが起きて、全く違う答えになるんだよ。
まともなコンパイラならこういう最適化を行わないか、
オプションの切り替えで制御するのが普通。
0099デフォルトの名無しさん
2010/07/27(火) 11:42:290100デフォルトの名無しさん
2010/07/27(火) 11:46:35どこの星の普通かしらないけど
たとえばgccならなんてオプション?
自分の使ってるコンパイラでもいいぞ
0101デフォルトの名無しさん
2010/07/27(火) 12:31:03> 計算の順序を勝手に入れ替えることの意味わかってないんじゃない?
> 値によっては回り込みが起きて、全く違う答えになるんだよ。
int b = a * 1024 * 1024;
これで畳みこみを行った場合と行わなかった場合で結果が異なるaの値を具体的に示してから、
言いがかり付けるんだな。
0102デフォルトの名無しさん
2010/07/27(火) 12:45:40> まともなコンパイラならこういう最適化を行わないか、
> オプションの切り替えで制御するのが普通。
gccってまともなコンパイラじゃなかったのか。www
$ gcc -v
gcc version 4.2.1
$ cat 92.c
void f()
{
int a = 5;
int b = a * 1024 * 1024;
}
$ gcc -O0 -S 92.c
.globl f
.type f, @function
f:
.LFB2:
pushq %rbp
.LCFI0:
movq %rsp, %rbp
.LCFI1:
movl $5, -8(%rbp)
movl -8(%rbp), %eax
sall $20, %eax
movl %eax, -4(%rbp)
leave
ret
0103デフォルトの名無しさん
2010/07/27(火) 13:11:10その検証するのに-O0ってのはどうなのよ・・・・
0104デフォルトの名無しさん
2010/07/27(火) 13:14:13-O0 Do not optimize. This is the default.
0105デフォルトの名無しさん
2010/07/27(火) 13:28:44テンプレートでどうにかする方法ってどんなのなん?
0106デフォルトの名無しさん
2010/07/27(火) 14:44:46>>98
> 計算の順序を勝手に入れ替えることの意味わかってないんじゃない?
> 値によっては回り込みが起きて、全く違う答えになるんだよ。
この実例まだ〜〜〜?
0107デフォルトの名無しさん
2010/07/27(火) 16:13:05a が double で 1024 がもっと大きな数だとまずいんじゃない?
そのときも同じように最適化が起きるんだったらコンパイラとしては問題あるよね。
0108デフォルトの名無しさん
2010/07/27(火) 16:16:410109デフォルトの名無しさん
2010/07/27(火) 16:23:55gcc ってまともなコンパイラじゃなかったんですねw
0110デフォルトの名無しさん
2010/07/27(火) 16:24:310111デフォルトの名無しさん
2010/07/27(火) 17:06:14#define elseif else if
とやってelseifを使うと何か問題ありますか?
0112デフォルトの名無しさん
2010/07/27(火) 17:17:35池沼なのにPGやってるお前の方がよっぽど問題あるわ。www
0113デフォルトの名無しさん
2010/07/27(火) 18:10:04問題ない。
まぁ厳密にはインデントが変わってくるが、動作には影響しない。
つか else if と書いても elseif のようにインデントしてる人が多いわな。
>>112
この人は何に対して切れてるんだろうw
0114デフォルトの名無しさん
2010/07/27(火) 21:18:32しいて言えば、エディタが色を変えてくれない
0115デフォルトの名無しさん
2010/07/27(火) 21:22:300116デフォルトの名無しさん
2010/07/27(火) 21:23:52こんなことは絶対にするな。絶対だぞ。
defineなんてifdef用以外に使うな。
0117デフォルトの名無しさん
2010/07/27(火) 21:29:20そういうのも嫌いじゃないが
苦労は買ってでもしろと言うしな
0118デフォルトの名無しさん
2010/07/27(火) 22:34:19#define for if(0) else for
0119デフォルトの名無しさん
2010/07/27(火) 22:35:370120デフォルトの名無しさん
2010/07/27(火) 23:16:470121デフォルトの名無しさん
2010/07/28(水) 00:29:30一人でやってるなら問題ないけど、バカっぽく見えるからやめたほうが
いい。
開発をしている時間のうちキーボードを打つ時間の割合なんてそんなに
多くないのだから、タイプ数を減らすだけの工夫は無駄。
0122デフォルトの名無しさん
2010/07/28(水) 00:35:370123デフォルトの名無しさん
2010/07/28(水) 00:41:130124デフォルトの名無しさん
2010/07/28(水) 00:43:250125デフォルトの名無しさん
2010/07/28(水) 00:56:280126デフォルトの名無しさん
2010/07/28(水) 00:58:370127デフォルトの名無しさん
2010/07/28(水) 03:48:47複数環境対応とデバックマクロで使用する
Cの場合は定数等含めて結構マクロは使用する
0128デフォルトの名無しさん
2010/07/28(水) 08:27:300129デフォルトの名無しさん
2010/07/28(水) 08:59:14タイプを減らすためでなく、インデントの問題だろ。
else if ごとに一段下げたりしたくないだろ。
けど、構文的には下げるのが正しいんだから。
これは俺も気持ち悪い。
0130デフォルトの名無しさん
2010/07/28(水) 12:55:57elseとifの間に{なし、改行すらなし。これで一段下げなんて普通しない。
0131デフォルトの名無しさん
2010/07/28(水) 14:25:54それは else if を elseif とみなしてインデントをつけているに他ならない。
0132デフォルトの名無しさん
2010/07/28(水) 14:33:35オラ初めて気づいたぞ
0133デフォルトの名無しさん
2010/07/28(水) 14:53:27そんなわけない
0134デフォルトの名無しさん
2010/07/28(水) 14:57:21正解
>>133
池沼
0135デフォルトの名無しさん
2010/07/28(水) 15:06:09else if () ←これが出来なくなるじゃん
else
0136デフォルトの名無しさん
2010/07/28(水) 15:07:37それで問題ないのだからelseifいらね
0137デフォルトの名無しさん
2010/07/28(水) 15:10:55それは
if () {
} else { if ()
else
}
と書いたのと同じ。コンパイラはそう解釈してるんだよ。
if() や else の次にくるのは、一つの文かまたは { } で囲まれた一つのブロックなんだよ。
0138デフォルトの名無しさん
2010/07/28(水) 15:15:28b = 0;
else if (a < 10)
b = 1;
else if (a < 20)
b = 2;
else
b = -1;
と書くのは間違いで、(もちろん動作は問題ない)
構文に即した厳密なインデントなら
if (a < 0)
b = 0;
else
if (a < 10)
b = 1;
else
if (a < 20)
b = 2;
else
b = -1;
が正しいということか。。。
0139デフォルトの名無しさん
2010/07/28(水) 15:20:58正解
0140デフォルトの名無しさん
2010/07/28(水) 15:35:510141デフォルトの名無しさん
2010/07/28(水) 15:36:550142デフォルトの名無しさん
2010/07/28(水) 15:44:370143デフォルトの名無しさん
2010/07/28(水) 15:48:31少なくとも else if を elseif と見なすようなことはしてないよ。
つまり if 文の入れ子として処理している。それは昔も今も同じ。
0144デフォルトの名無しさん
2010/07/28(水) 15:56:220145デフォルトの名無しさん
2010/07/28(水) 17:08:37もちろん switch は入れ子でなく対等な分岐
0146デフォルトの名無しさん
2010/07/28(水) 17:27:360147デフォルトの名無しさん
2010/07/28(水) 18:39:51014984
2010/07/28(水) 21:38:41int main()
{
const unsigned char userKey[] = "key";
AES_KEY key;
AES_set_encrypt_key(userKey, 256, &key);
return 0;
}
よくわからない、スマソ
0150デフォルトの名無しさん
2010/07/29(木) 09:42:35const unsigned char* userKey = (const unsigned char*)"key";
0151デフォルトの名無しさん
2010/07/29(木) 10:54:01やはり、あまり需要ないのだろうか?
或いは、ゲームのアドオン開発に関するスレがあれば誘導お願いします
0152151
2010/07/29(木) 11:00:51スレ汚しゴメン
0153デフォルトの名無しさん
2010/07/29(木) 11:35:460154デフォルトの名無しさん
2010/07/29(木) 11:45:24それなりのところではそれなりにそうなる
0155デフォルトの名無しさん
2010/07/29(木) 16:04:04猫CのC++第八章のクラスの話がわからん。
http://www.kumei.ne.jp/c_lang/cpp/cpp_08.htm
多分大方理解したと思うんだけど、一番下の実行結果を見ると
Catクラスのデストラクタが最後に呼ばれてるのが見てわかるんだけど…
main関数にデストラクタなんて書かれてないけど?どうして?これって勝手に呼ばれるの?
0156デフォルトの名無しさん
2010/07/29(木) 16:07:22クラスが消えるときに勝手に呼ばれる関数だからだよ
0157デフォルトの名無しさん
2010/07/29(木) 16:10:37やっぱりそうなんだ!ありがとう!早い回答で助かった
0158デフォルトの名無しさん
2010/07/29(木) 16:42:57メルセンヌツイスターは確かに古いが、
越えるものは出てきたっけ?
0159デフォルトの名無しさん
2010/07/29(木) 16:59:01非拡散楕円シェルピンスキー法
0160デフォルトの名無しさん
2010/07/29(木) 16:59:39もう誰も使ってないのかしら。
0161デフォルトの名無しさん
2010/07/29(木) 17:16:10vector<int>とやるとintは4bytesなので、
4bytes x サイズ分のメモリを使うと思っていたのですが、
実際は、8bytes x サイズ分、つまり倍
使っているように見えます。
サイズはそのままで、消費を4bytes分相当にする方法はないでしょうか。
環境はlinux g++ 4.4です。
0162デフォルトの名無しさん
2010/07/29(木) 17:17:060163デフォルトの名無しさん
2010/07/29(木) 17:23:44SFMT
0164デフォルトの名無しさん
2010/07/29(木) 17:29:22調べ方が悪い
0165デフォルトの名無しさん
2010/07/29(木) 17:46:14そうですか?
valgrind下で走らせてalloc,free値を見たのですが、見方が違うのか
0166デフォルトの名無しさん
2010/07/29(木) 21:12:06016784
2010/07/29(木) 21:49:09レスありがとうございます
>main.c::-1: error: undefined reference to `AES_set_encrypt_key'
やっぱり、怒られます
もしかして、gccの設定が悪いのかもしれませんorz
0168デフォルトの名無しさん
2010/07/29(木) 22:22:01でも、配列Array[]をArrayと書くと、Array[0]のアドレスが返ってくるだけってことだよね
0169デフォルトの名無しさん
2010/07/29(木) 22:23:220171デフォルトの名無しさん
2010/07/29(木) 22:35:190172デフォルトの名無しさん
2010/07/29(木) 22:52:35ぜんぜん違うけど密接に関わるものってことかな
int Array[10];
int* p = Array;
p[3] = 100;//添え字アクセス
*p = 200;//ポインタを使ってアクセス
*(p + 3) = 300;//ポインタ演算でのアクセス
こんな風に使える
使えるというだけで別なもの
0174デフォルトの名無しさん
2010/07/29(木) 23:54:10boostのスマートポインタにインターフェイスのhogeObject(純粋仮想関数:void func01() )が入っていて
hogeObjectを継承してhogeクラスがあって、そこのメンバ関数(void func02() )を呼び出したいのだけれども
当然インターフェイスでfunc02を定義してないので呼び出せない。
無理矢理hogeにダウンキャストをすれば呼び出せると思ったのだけど、どうにもコンパイルが通らないです。
この場合、どうやってスマートポインタ内のhogeObjectからhogeクラスのfunc02を呼び出せますか?
因みにプログラムの都合上、hogeObjectの純粋仮想関数を増やすことは出来ないです。
誰か教えてください。
0175デフォルトの名無しさん
2010/07/29(木) 23:56:13ただ、利便性のために若干仕様が分けられてる
[]ってのは単純にp+1とかをオーバーロードしてるだけだし
0176デフォルトの名無しさん
2010/07/29(木) 23:58:580177デフォルトの名無しさん
2010/07/30(金) 00:09:26// コアをチェック
ObjectContiner::iterator itr = mObjectContiner[OTHER].begin();
for( ; itr != mObjectContiner[OTHER].end() ; ++itr )
{
if( (*itr)->getData().Attribute == DP_IDEND )
{
// ここでC2682 shared_ptr からhoge*に変換出来ない。
se = dynamic_cast<hoge*>( (*itr) );
}
}
こんな感じです。
std::listの中にhogeObjectのスマートポインタがが入ってます
0178デフォルトの名無しさん
2010/07/30(金) 00:15:22申し訳無いです、自己解決しました。
se = dynamic_cast<SwordEnemy*>( (*itr).get() );
として動作しました。
関数を見落としていました。
お騒がせしました
0179デフォルトの名無しさん
2010/07/30(金) 00:15:58で
0180デフォルトの名無しさん
2010/07/30(金) 18:06:12Alloc memory dump
Total size:0(0.000kb) Alloc num:0
みたいなものが出ます。これは何を表しているのでしょうか?
Alloc memory dumpでggってみましたが出るのはエラー相談の掲示板ばかりで・・・
0181デフォルトの名無しさん
2010/08/01(日) 14:01:32#include <conip.h>
#include <stdlib.h>
#include <windows.h>
int main(int argc,char *argv[]){unsigned int count = 0;unsigned int i;char **list;
if((list = malloc(100*1024)) == NULL){return 1;}
while(1){
for(i = 1023;i > 0;i--){if((list[count] = malloc(1024)) != NULL){count++;}else{ break;}}
if(i != 0)break;if(count > 100000)break;Sleep(1);
}
putchar('\n');count--;printf("Count:%d\n",count);
for(i=0;i < count;i++){
int j;
for(j = 0;j < 1024;j++){list[i][j] = 'A' + i%26;}printf("%X ",list[i]);
}
printf("\nExit:");return 0;
}
なんか落ちる…
0182デフォルトの名無しさん
2010/08/01(日) 14:08:360183デフォルトの名無しさん
2010/08/01(日) 19:08:42VSスレに書き込めよ
ちなみにそれはメモリリークが存在しないことを表してる 至って正常ということ
0184デフォルトの名無しさん
2010/08/01(日) 22:36:44#include <openssl/aes.h>
int main()
{
unsigned char user_key[16] = "123456";
AES_KEY key;
AES_set_encrypt_key(user_key, 128, &key);
return 0;
}
>main.c::-1: error: undefined reference to `AES_set_encrypt_key'
>:-1: error: collect2: ld はステータス 1 で終了しました
0185デフォルトの名無しさん
2010/08/01(日) 22:48:130186184
2010/08/01(日) 22:53:44IDEに頼り切っていたので、やり方がわかりません
gcc v4.4.3、opensslは/usr/includeにあります
ごめんなさい
0187デフォルトの名無しさん
2010/08/01(日) 22:56:53-lm ってオプションいるだろ?(最近は無くてもいけるけど)そういうことだ
それの名前がわからん
でも/usr/libにはあるはず
もしくはそのライブラリの説明どっかにないのか
0188デフォルトの名無しさん
2010/08/01(日) 23:01:240189デフォルトの名無しさん
2010/08/01(日) 23:03:35可変可能でサイズを小さくした時、例ですが"○○ a"という文字を普通に
出力する時はいいのですが、段を分けて出力する時
○○このようにスペース空けてaを出力すると思ったのですが実際は
a
○○このようにスペース空けずにaを出力してしまいました。
a
charをメンバ変数CString型にコピーして出力しますが、ずれずに出力
するか、ずれたデータをchar形にコピーする方法は有りますか?
0190デフォルトの名無しさん
2010/08/01(日) 23:08:030191デフォルトの名無しさん
2010/08/02(月) 08:39:050192デフォルトの名無しさん
2010/08/02(月) 10:24:54恐らく>191は他人でしょうから、あなたのお使いの開発環境を明らかにした上で
該当スレに書き込むか、エスパースレにどうぞ。
0194184
2010/08/02(月) 22:57:02-lsslをつけたらコンパイルする事ができました
ありがとうございます
ところで、何故そのようなオプションをつけないと、コンパイルできないんですか?
-lsslってオプションはgccにデフォルトでは存在しないと思うのですが
0195デフォルトの名無しさん
2010/08/03(火) 00:39:160196デフォルトの名無しさん
2010/08/03(火) 01:41:56コンパイラーによって表示されるものなのかどうかわからなかったもので・・・
問題ないんですね。ありがとうございました
0197デフォルトの名無しさん
2010/08/03(火) 12:03:340198デフォルトの名無しさん
2010/08/03(火) 21:22:31thx
0199デフォルトの名無しさん
2010/08/03(火) 21:48:16-----------------
FortranからCの関数を呼ぶときに、FortranのFortran の名前付き COMMON は、大域的構造体を使用して C の中で代替できるそうです。
Fortranのソースに
integer, parameter:: N=10
real(4):: x(N), y(N), z(N)
COMMON /VEC/ x,y,z
Cのソースの一番外側に
extern struct vec {
float x1[10];
float y1[10];
float z1[10];
} vec_;
と書くと、確かにCでvec_.x1[0]でFortranの
x(1)にアクセスできました。
この要素数10をC言語側では動的に(?)決めたいのですが、どのように記述すれば良いのでしょうか。
よろしくおねがいします。
0200デフォルトの名無しさん
2010/08/04(水) 00:32:17メモリの動的確保でやるなら
struct vec {
float* x1;
float* y1;
float* z1;
};
struct vec* NewVec(int n){
size_t sz = sizeof(struct vec) + sizeof(float) * 3 * n;
struct vec* v = (struct vec*)malloc(sz); // キャストのツッコミはなしで
v->x1 = v + 1;
v->y1 = v->x1 + n;
v->z1 = v->y1 + n;
return v;
}
〜
struct vec* v = NewVec(10); でベクトル作成
v->x1[0] = 1.0; または (*v).x1[0] = 1.0; でアクセス
free(v); で後始末
0201デフォルトの名無しさん
2010/08/04(水) 01:31:16スタック上だとしてヒープ領域と一緒にしていいのか
0202デフォルトの名無しさん
2010/08/04(水) 07:48:13それと、ファイルから読み取って変数に入れていくようなプログラムで
NULLで初期化?できるような構造体にNULLを入れたいのですがどうすれば良いのでしょうか?もしかしてイント型の0でできる?ちなみにfscanfとかfget系の処理の仕方しかわかりません。よろしくお願いします
0203デフォルトの名無しさん
2010/08/04(水) 08:02:290204デフォルトの名無しさん
2010/08/04(水) 08:03:400205デフォルトの名無しさん
2010/08/04(水) 08:19:100206デフォルトの名無しさん
2010/08/04(水) 08:39:10・COMMONの大きさは動的に代えられないからだめ。
・ポインターが使える処理系もある。
Fortranスレに行きなさい。
0207デフォルトの名無しさん
2010/08/04(水) 09:06:31チュートリアルからやり直して下さい
0208デフォルトの名無しさん
2010/08/04(水) 09:27:51独り言ならついったーで。
0209デフォルトの名無しさん
2010/08/04(水) 09:29:590210デフォルトの名無しさん
2010/08/04(水) 09:39:050211デフォルトの名無しさん
2010/08/04(水) 09:40:59顔真っ赤の涙目になっちゃって悔し紛れにコピペした臭い
0212デフォルトの名無しさん
2010/08/04(水) 09:44:20/ / \\
. / (;;..゜);lll(;;..゜)\ このガキャあああああああ
/ ⌒(__人__)⌒ \ ナメてんのかああああfさdkjh;flsだhf
| ノ( |r┬- | u | ________
\ ⌒ |r l | / .| | |
ノ u `ー' \ | | | 真剣に聞いてんのに
/´ .| | | 煽ってんじじゃねええええ
| l プルプル u | | |
ヽ u -一ー_~、⌒)^),-、 | |________|
ヽ ____,ノγ⌒ヽ)ニニ-___| | |____
0213199
2010/08/04(水) 10:35:05ありがとうございます。やってみます。
>>201
Cで構造体で代替しようという考え自体がまずいということでしょうか?
>>206
COMMONの方は大きさがコンパイル時に決定しています。
Cの方はコンパイルに少し特殊な環境が必要なので一度コンパイルしたら使い回したいという考えです。
もともとあるFortranのプログラムをいじってCの関数を呼び出して使うようにしたいのですが
C側で使う変数が多くて引数にするの大変です。 元々COMMON文が多用されていたので
Cに持ってきて使えたらなぁ、と思い調べました。
0214デフォルトの名無しさん
2010/08/04(水) 10:54:11つまり、Fortran側で確保している領域にCからアクセスしたいという事だね。
>>206は忘れてくれ。
> Cの方はコンパイルに少し特殊な環境が必要なので一度コンパイルしたら使い回したいという考えです。
オブジェクトを使いまわすという事? リンクは必要だよ。
extern float vec_;
struct vec {
float* x1;
float* y1;
float* z1;
} vec;
void initialize(int n)
{
vec.x1 = &vec_
vec.y1 = &vec_ + n;
vec.z1 = &vec_ + n*2;
}
0215デフォルトの名無しさん
2010/08/04(水) 10:54:17FORTRANの呼び出され側の関数がCOMMON引数をどのように受け取るように
なっているかが問題
普通連続したメモリ領域が必要なんじゃないのか?
Cのポインタなんか使ったらあっちこっちにアドレスが飛んでだめだと思うが
0216デフォルトの名無しさん
2010/08/04(水) 10:57:25イメージとしてはこんな感じです
struct hoge{
int a;
char b[a];
};
0217デフォルトの名無しさん
2010/08/04(水) 11:01:50struct hoge {
int a;
char b[1];
}
struct data *dp;
dp = malloc(sizeof(hoge) + datalen); <-可変長のデータ長を足して確保
汚いテクニックでしかも規格では未定義の動作とされているが
よく使われる
0218デフォルトの名無しさん
2010/08/04(水) 11:03:01ありがとうございました
0219デフォルトの名無しさん
2010/08/04(水) 11:12:14struct hoge{
int a;
char b[];
};
0220デフォルトの名無しさん
2010/08/04(水) 11:19:230221デフォルトの名無しさん
2010/08/04(水) 11:23:410222デフォルトの名無しさん
2010/08/04(水) 11:27:560223デフォルトの名無しさん
2010/08/04(水) 11:34:14どういうことでしょうか?普通にメンバにchar[]を入れるとstruct 'hoge" にサイズが 0 の配列があります。というエラーがでます
少しググってみたのですがcharは最後の要素ではなくてchar c[a];char d[a];も実はありまして…
char b[1]の方もやってみると
ho = malloc(sizeof(hoge) + sizeof(a)*3);
void *' から 'hoge *'に変換できません とエラーが出ます。どうすれば良いのでしょうか?
0224デフォルトの名無しさん
2010/08/04(水) 11:39:59hogeなんて構造体が無いからだろ。バカか。
struct hogeとhogeの区別もつかないのか。市ねよ。
0225199
2010/08/04(水) 11:40:31その方法でできました。ありがとうございます!
>つまり、Fortran側で確保している領域にCからアクセスしたいという事だね。
そうです!ついでにC側でその領域の値の書き換えも行いたいと。
リンクは仕方ないんで毎回やります。。Fortran側はNの値を毎回書き換えてコンパイルする仕組みのようなので。
>>215
どうなんでしょう。とりあえずはできたので
実際の大きいプログラムで試してみます。
0226デフォルトの名無しさん
2010/08/04(水) 11:46:52ちょwひどすぎwww
struct hogeとhogeの違いって何のこと言ってるかわかりません…
struct hoge {
int a;
char b[1];
}
struct hoge *dp;
dp = malloc(sizeof(hoge) + a*3); <-可変長のデータ長を足して確保
どこがおかしいのでしょう?
0227デフォルトの名無しさん
2010/08/04(水) 11:48:15#include <stdlib.h>
struct a {
int a;
char b[];
};
struct a *aaa(int l)
{
return malloc(sizeof(struct a) + l);
}
これを
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 15.00.30729.01 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
で、コンパイルするとエラー出ないけど。
> char c[a];char d[a];も実はありまして…
複数は無理。似たような事をやるなら
struct hoge {
int a;
char *b;
char *c;
char *d;
char data_[];
};
でb,c,dにdata_から切り出して与える。
b,c,dを使わず、マクロで直接data_にアクセスさせる方法もある。
0228デフォルトの名無しさん
2010/08/04(水) 11:51:12ありがとうございます
やってみます
0229デフォルトの名無しさん
2010/08/04(水) 11:54:16×
dp = malloc(sizeof(hoge) + a*3);
○
dp = malloc(sizeof(struct hoge) + a*3);
ってことだろ
>>224の言い方はヒドいが、知っとけよとは思うな
0230デフォルトの名無しさん
2010/08/04(水) 12:00:41Cではポインタと配列は字面上、概ね同等だから>>214で動くけど、
struct vec {
float x1[10];
float y1[10];
float z1[10];
};
と
struct vec {
float* x1;
float* y1;
float* z1;
} vec;
は、メモリ上の配置は全然違うという事は知っておくといい。
0231デフォルトの名無しさん
2010/08/04(水) 12:07:58すいません
そうしてもerror C2440: '=' : 'void *' から 'hoge *' に変換できません。と出ます
dp = malloc(sizeof(struct hoge) + dp->a*1);どこがおかしいのでしょうか?
0232デフォルトの名無しさん
2010/08/04(水) 12:17:19C2466: サイズが 0 の配列を割り当てまたは宣言しようとしました。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
error C2040: 'dp': 'int []' は 'hoge *' と間接操作のレベルが異なります。
error C2440: '初期化中' : 'void *' から 'int []' に変換できません。
と出ます
0233デフォルトの名無しさん
2010/08/04(水) 12:21:35そのエラーメッセージはBCCじゃないのか?
BCCは可変長配列は使えないぞ
0234デフォルトの名無しさん
2010/08/04(水) 12:28:35VC++2008EEです
どうでしょうか?
struct hoge{
int a;
char b[a],c[a],d[a];
};やりたいことはこういうことです
struct hoge{
int a;
char b[1],c[1],d[1];
char e[1];
};
struct hoge *dp;
関数中でdp = malloc(sizeof(struct hoge) + dp->a*sizeof(char));
error C2440: '=' : 'void *' から 'hoge *'
どこがおかしいでしょうか?
0235デフォルトの名無しさん
2010/08/04(水) 13:05:070236デフォルトの名無しさん
2010/08/04(水) 13:16:310237デフォルトの名無しさん
2010/08/04(水) 13:25:55dp = (hoge *)malloce( );
キャスト変えてみろ
0238デフォルトの名無しさん
2010/08/04(水) 13:26:370239デフォルトの名無しさん
2010/08/04(水) 13:29:44void *' から 'hoge *'に変換できませんっていってるのに・・・
×
dp = malloc(sizeof(hoge) + a*3);
○
dp = (struct hoge*)malloc(sizeof(struct hoge) + a*3);
.cが全てだと思うなよ
0240デフォルトの名無しさん
2010/08/04(水) 13:30:31もう消したから戻るのメンドくさい…
int a;
std::vector<char> b,c,d;
for(int i=0;i<a;i++){b.push_back();}
でできてませんか?
0241デフォルトの名無しさん
2010/08/04(水) 13:31:45勝手にしろ
0242デフォルトの名無しさん
2010/08/04(水) 13:32:520243デフォルトの名無しさん
2010/08/04(水) 13:33:28vector使ってるからより重くなってるとか、メモリ食ってるとかありませんか?
0244デフォルトの名無しさん
2010/08/04(水) 13:41:23もうstring使えばいいじゃん。
0245デフォルトの名無しさん
2010/08/04(水) 13:46:02struct hoge{
int a;
char b[a];←ここ
}
です
struct hoge do[d];みたいに何個も作って値を入れて行った時にそれぞれのaの値とbの配列の要素数がリンクしてるってことです
こうするとできないので一番無駄の無いやり方が知りたいのです
0246デフォルトの名無しさん
2010/08/04(水) 16:24:080247デフォルトの名無しさん
2010/08/04(水) 18:06:56struct KATA hoge;
struct KATA temp;
temp.A.push_back(0.0);
temp.A[0] = 1;
memcpy(&hoge,&temp,sizeof(struct KATA));
temp.A[0] = 0;
hoge.A.push_back(temp.A[0]);←多分ここで
hoge.A[0]とhoge.A[1]が0になってしまうのですがなぜでしょうか?
hoge.A[0]には1、hoge.A[1]には0を入れたいです
0248デフォルトの名無しさん
2010/08/04(水) 19:05:05vectorにこういうキチガイじみた事はやめろ
やるならstd::copyでも使え
0249デフォルトの名無しさん
2010/08/05(木) 07:22:160250デフォルトの名無しさん
2010/08/05(木) 12:50:340251デフォルトの名無しさん
2010/08/05(木) 13:24:23int main()
{
unsigned long x = 64206;
cout << x
<< " in base 8 is \"" << oct << x << "\""
<< " and in base 16 is \"" << hex << x << "\"" << endl;
return 0;
}
0252デフォルトの名無しさん
2010/08/05(木) 14:09:280253デフォルトの名無しさん
2010/08/05(木) 14:43:550254デフォルトの名無しさん
2010/08/05(木) 21:47:180255デフォルトの名無しさん
2010/08/06(金) 23:07:401.5*e+005 と出力されるのですが、これは 1.5*exp(5) と同じ意味でしょうか?
0256デフォルトの名無しさん
2010/08/06(金) 23:19:288bit/channel色構造体の配列color[i]が、純赤色かどうかを判別するif文を書きました
if(color[i].alpha==0xFF&&color[i].red==0xFF&&color[i].blue==0x00&&color[i].green==0x00)
これは正しく動きました
しかしコードが長ったらしく、しかも何度も書かねばならないことになり、以下のマクロを使い簡略化を計ったのですが
#define ISPRED8(COLOR) COLOR.alpha==0xFF&&COLOR.red==0xFF&&COLOR.blue==0x00&&COLOR.green=0x00
if(ISPRED8(color[i]))
左オペランドがうんぬんとコンパイラに怒られてしまいます
適当に()付けた後、通してみましたが、trueが欲しいところでfalseが帰ってきてしまいます
かなり単純なところで躓いた分、何がいけないのか分かりかねます
何がいけないのでしょうか・・・?
0257デフォルトの名無しさん
2010/08/06(金) 23:22:061.5*e+005は1.5*10^5すなわち150000のことかと思います
1.5*exp(5)は1.5*e^5でありeが約2.72程度の無理数であるのでその二つは別物かと思います
0258デフォルトの名無しさん
2010/08/07(土) 00:48:401箇所代入になってる
0259デフォルトの名無しさん
2010/08/07(土) 00:51:43#define FOO(n) n*2
FOO(1 + 2)
-->
1 + 2*2 // 1 + 4 = 5
みたいなことがないように
#define FOO(n) (n*2)
でくくっとけ
0260デフォルトの名無しさん
2010/08/07(土) 00:57:40うわ・・・ほんとだ・・・・これはひどい・・・ちょっと凹んできます
>>259
ご指摘ありがとうございます
今回使い方が限定的だったので気にしていなかったのですが習慣づけたほうがよいですよね
ありがとうございました、こんなオチで申し訳ありません
0261デフォルトの名無しさん
2010/08/07(土) 00:59:490262デフォルトの名無しさん
2010/08/07(土) 01:26:150263デフォルトの名無しさん
2010/08/07(土) 01:34:010264デフォルトの名無しさん
2010/08/07(土) 01:40:33#define FOO(n) ((n) * 2)
0265デフォルトの名無しさん
2010/08/07(土) 01:56:450266デフォルトの名無しさん
2010/08/07(土) 11:11:38ティッシュのネピアとも違うしな
0267デフォルトの名無しさん
2010/08/07(土) 11:34:410268デフォルトの名無しさん
2010/08/07(土) 19:19:34ポインタを使う判断基準がわかりません
どういう時にポインタを使ったほうが良いとわかるのでしょうか?
0269デフォルトの名無しさん
2010/08/07(土) 19:28:400270デフォルトの名無しさん
2010/08/07(土) 19:35:23馬鹿かおまえwww
0271デフォルトの名無しさん
2010/08/07(土) 19:39:29わかりました!
ありがとうございます
0272デフォルトの名無しさん
2010/08/07(土) 20:07:170273デフォルトの名無しさん
2010/08/07(土) 20:27:24>というところが違うだけだったはずです。
結局違いって何よ?
0274デフォルトの名無しさん
2010/08/07(土) 21:11:54{
char name[10];
char address[30];
};
std::vector< XXX* > v;
もう一つ完璧に初期化されたXXX型zを用意してpush_back(z)
とする方法以外にpush_backで使える領域を確保することはできますか?
0275デフォルトの名無しさん
2010/08/07(土) 21:28:250276デフォルトの名無しさん
2010/08/07(土) 21:31:11g++はgccにc++オプションをつけたアライアス
0277デフォルトの名無しさん
2010/08/07(土) 21:37:45reserveは確か値が入ってないので直で使えませんよね?
その後strcpyの第一引数にvのメンバを入れるとエラーがでるのです
0278デフォルトの名無しさん
2010/08/07(土) 21:42:37v.push_back(new V);
こうしろよ。
そもそも
std::vector< XXX > v;
でいいだろ。
0279デフォルトの名無しさん
2010/08/07(土) 21:43:230280デフォルトの名無しさん
2010/08/07(土) 21:44:01ありがとうございます
なぜstd::vector< XXX* > v;
にするとstrcpyでエラーが出るのでしょうか?
0281デフォルトの名無しさん
2010/08/07(土) 21:49:531 番目の引数を 'XXX *' から 'XXX &' に変換できません。
となります
0282デフォルトの名無しさん
2010/08/07(土) 21:50:54XXX*はポインタだろ。ポイント先を示してやらないとそりゃエラーになるわな。
後、vectorにnewしてつっこんだリソースは自動的に解放されないから。
ポリモーフィズム的に振る舞う予定が無ければXXXにしとけ。
0283デフォルトの名無しさん
2010/08/07(土) 21:53:37の時ですね。できました
なぜstd::vector< XXX >ならnewでできないのにstd::vector< XXX* >ならnewで上手く行くか理解できません。説明よろしくお願いします
0284デフォルトの名無しさん
2010/08/07(土) 21:56:06てめぇ、ちょっとは自分で考えろw
XXXとXXX*じゃ型が違うだろう。
struct XXX hoge = new XXXなんてしないだろ?
struct XXX* hoge = new XXXだし。
0285デフォルトの名無しさん
2010/08/07(土) 21:59:00ありがとうございます
下をしたことが無かったので全く思いつきませんでした
全て繋がったような気がします。ありがとうございました
0286デフォルトの名無しさん
2010/08/07(土) 22:02:54g++ = gccなんだね
thx
0287デフォルトの名無しさん
2010/08/07(土) 22:45:39外人がこのスレ見たら笑うだろうな
0288デフォルトの名無しさん
2010/08/07(土) 22:47:060289デフォルトの名無しさん
2010/08/07(土) 22:47:33日本人だって仮変数名にunkoとかchinkoとか書くだろ?
あいつらもXXXどころかfuck,dickとか平気で使うぞ。
0290デフォルトの名無しさん
2010/08/07(土) 22:48:400291デフォルトの名無しさん
2010/08/07(土) 22:50:550292デフォルトの名無しさん
2010/08/07(土) 23:20:37ここで使われているの「C」言語だと思うのですが、「C++」で同様な事を解説しているサイトないでしょうか?
0293デフォルトの名無しさん
2010/08/07(土) 23:38:160294デフォルトの名無しさん
2010/08/08(日) 00:00:080295デフォルトの名無しさん
2010/08/08(日) 10:14:42C++の場合はnewで構造体の領域を確保しても大丈夫なんですか
0296デフォルトの名無しさん
2010/08/08(日) 10:29:520298デフォルトの名無しさん
2010/08/08(日) 11:25:45make_sharedを使ってください。
0299デフォルトの名無しさん
2010/08/08(日) 12:43:43それなのに、boostをすすめる上に、背景も言わない。
もう少し、丁寧に答えてあげなよ。
答えてあげることはいいと思うけどね。
それに、いつ削除するか決まっててわかっているならmake_shared使う必要ないよ。
C++0xの完成も2012年とまだまだ先の話だし。
いろんな方法がある。適材適所で機能を使うことが大切。
それは、日本語でも同じ。
0300デフォルトの名無しさん
2010/08/08(日) 13:05:170301デフォルトの名無しさん
2010/08/08(日) 18:21:57循環参照はまずいものの見つける方法は用意されてるみたいですが
0302デフォルトの名無しさん
2010/08/08(日) 18:35:080303デフォルトの名無しさん
2010/08/08(日) 19:30:23なかなか書けるようにならないね
0304デフォルトの名無しさん
2010/08/08(日) 20:21:32どんな些細なミスでも容赦なく派遣切りさせていただきますのでご了承ください。
0305デフォルトの名無しさん
2010/08/08(日) 21:03:36char "array2 = "array";
array1 = array2;
これができないのは、array1のアドレスがconstだからですか?
0306デフォルトの名無しさん
2010/08/08(日) 21:08:53http://www.kouno.jp/home/c_faq/c6.html
0307305
2010/08/08(日) 21:44:07すごい、理解しにくい文章でした
つまり、array1の値は配列なので値が変えられないって
だけの話ですね
値を変えたかったらポインタを使えと
0308デフォルトの名無しさん
2010/08/08(日) 21:51:170309デフォルトの名無しさん
2010/08/08(日) 23:31:37void GetSize(int &, int &, int &, int &)
を作ってしまって,たまに必要がない値があるから
int nHeight;
GetSize(*(new int), *(new int), *(new int), nHeight);
としてます.
使用しなくても変数を宣言したほうが,処理上速いですか?
int nX, nY, nWidth, nHeight;
GetSize(nX, nY, nWidth, nHeight);
ポインタにするのが一番なんだろうけど...
0310デフォルトの名無しさん
2010/08/08(日) 23:38:040311デフォルトの名無しさん
2010/08/08(日) 23:39:010312デフォルトの名無しさん
2010/08/08(日) 23:47:02あぁ,そっか気づかなかった
ありがとう
直します.
>>310
矩形の構造体にまとめると...
コードがかさばらなくて済みますね
ありがとうです
0313デフォルトの名無しさん
2010/08/09(月) 01:49:28そもそも縦横左右それぞれの取得関数用意しとけよと
0314デフォルトの名無しさん
2010/08/09(月) 08:03:15今からシグネチャ変更してもいいならだけど、こんなんどうよ?
http://codepad.org/hpZ7BpRJ
これで定数を渡した部分だけ無視できる
0315デフォルトの名無しさん
2010/08/09(月) 09:39:29ポインタ型を返す関数だと何か不味いですか?
自分の見たソースがそうなだけですか?
0316デフォルトの名無しさん
2010/08/09(月) 10:17:55ポインタの性質上、引数で受け取った変数のどこかを指すポインタを返すのが多いけど。
0317デフォルトの名無しさん
2010/08/09(月) 10:32:01コーディング規約や慣習で、ポインタを返さないと言うポリシーはたまによくある。
0318デフォルトの名無しさん
2010/08/09(月) 10:32:43その読みは酷すぎる。せめて、エイリアスにしておいてくれ。
0320デフォルトの名無しさん
2010/08/09(月) 12:45:52vector<HOGE2> hoge2
で常に同時に増えるのですが、同時にある番目の要素を消したいのですが
vector< HOGE1>::iterator itS, itE = hoge1.end();
for( itS = hoge2.begin(); itS != itE; ++ itS )
{
hoge2.erase(itS);vector<HOGE1*>(hoge1).swap(hoge1);
}
hoge1のみの消し方だとこんな感じでやってるのですが
この中に上手くhoge2の同じ番目を消すことはできるでしょうか?
0321デフォルトの名無しさん
2010/08/09(月) 12:56:51distance使えばいいんじゃね?
0322デフォルトの名無しさん
2010/08/09(月) 13:10:40すいません
理解できません
どうすれば良いのでしょうか?
0323デフォルトの名無しさん
2010/08/09(月) 13:21:27そもそも>320のコードはなにがしたいのか意味わかんなかった
いろいろおかしい
ただ、イテレータを使いたいみたいだったから、vector<HOGE1>のイテレータで
vector<HOGE2>の削除をするにはdistanceとadvance使えばいいんじゃないかなと提案しただけ
普通に考えたらある番目つってんだからその数値で両方にv.erase(v.begin() + n)すればいいだけじゃないのか?
0324デフォルトの名無しさん
2010/08/09(月) 13:22:400325デフォルトの名無しさん
2010/08/09(月) 13:30:52>>320はあるイテレーターの時、その要素を消してメモリもサイズを減らすってつもりなのですがおかしいですか?
hoge1はイテレータを使いたいのでそのやり方でも問題ありません。ありがとうございます
0326デフォルトの名無しさん
2010/08/09(月) 14:03:200327デフォルトの名無しさん
2010/08/09(月) 14:10:19vector< HOGE1>::iterator itS, itE = hoge1.end();
for( itS = hoge2.begin(); itS != itE; ++ itS )
{
if(itSを使った条件){hoge2.erase(itS);vector<HOGE1*>(hoge1).swap(hoge1);
break;}
}
こんな感じです
0328デフォルトの名無しさん
2010/08/09(月) 15:42:360329デフォルトの名無しさん
2010/08/09(月) 15:45:370330デフォルトの名無しさん
2010/08/09(月) 15:46:160331デフォルトの名無しさん
2010/08/09(月) 15:57:46ランダムじゃないとだめです><
>>330
vectorでもいいよ!!
0332デフォルトの名無しさん
2010/08/09(月) 16:16:26教えるのめんどくさいからやだ。自分で考えて。
ちなみに万あっても微々たる差。
0333デフォルトの名無しさん
2010/08/09(月) 16:34:090334デフォルトの名無しさん
2010/08/09(月) 16:39:190335デフォルトの名無しさん
2010/08/09(月) 23:54:450336デフォルトの名無しさん
2010/08/10(火) 00:47:02置換群の元の一つを置換行列に変換して、それをvectorに掛ける。
0337デフォルトの名無しさん
2010/08/10(火) 01:13:29現状ではクラスを定義してもその変数をグローバルで宣言して
いろんなソースファイルから使えるようにしていますが
そろそろそういう状態から抜け出したいです
そこでどういうクラス設計や考え方をすればよいか理解できる
わかりやすい書籍などありましたら教えてください
0338デフォルトの名無しさん
2010/08/10(火) 05:58:400339デフォルトの名無しさん
2010/08/10(火) 07:43:02ありましたが、霧が非常に深かったのです。ところがボートは左舷の方半分はもうだめになっていましたから、とてもみんなは乗り切らない
のです。もうそのうちにも船は沈みますし、私は必死となって、どうか小さな人たちを乗せて下さいと叫びました。近くの人たちはすぐみち
を開いてそして子供たちのために祈って呉れました。けれどもそこからボートまでのところにはまだまだ小さな子どもたちや親たちやなんか
居て、とても押しのける勇気がなかったのです。それでもわたくしはどうしてもこの方たちをお助けするのが私の義務だと思いましたから前
にいる子供らを押しのけようとしました。けれどもまたそんなにして助けてあげるよりはこのまま神のお前にみんなで行く方がほんとうにこ
の方たちの幸福だとも思いました。それからまたその神にそむく罪はわたくしひとりでしょってぜひとも助けてあげようと思いました。けれ
どもどうして見ているとそれができないのでした。どもらばかりボートの中へはなしてやってお母さんが狂気のようにキスを送りお父さんが
かなしいのをじっとこらえてまっすぐに立っているなどとてももう腸もちぎれるようでした。そのうち船はもうずんずん沈みますから、私は
もうすっかり覚悟してこの人たち二人を抱いて、浮べるだけは浮ぼうとかたまって船の沈むのを待っていました。誰が投げたかライフブイが
一つ飛んで来ましたけれども滑ってずうっと向うへ行ってしまいました。私は一生けん命で甲板の格子になったとこをはなして、三人それに
しっかりとりつきました。どこからともなく〔約二文字分空白〕番の声があがりました。たちまちみんなはいろいろな国語で一ぺんにそれを
うたいました。そのとき俄かに大きな音がして私たちは水に落ちました。もう渦に入ったと思いながらしっかりこの人たちをだいてそれから
ぼうっとしたと思ったらもうここへ来ていたのです。この方たちのお母さんは一昨年没くなられました。ええボートはきっと助かったにちが
いありません、何せよほど熟練な水夫たちが漕いですばやく船からはなれていましたから。
0340デフォルトの名無しさん
2010/08/10(火) 08:31:22デザインパターンでも勉強しろ
そして過剰設計に陥ってる自分に気づいてからが本当の設計が始まる
0341デフォルトの名無しさん
2010/08/10(火) 11:14:52銀河鉄道の夜か。タイタニック号の事故を下敷きにしているんだね。
銀河鉄道の夜の映画音楽を担当した細野晴臣がタイタニック号の生き残りの孫だと言うのが因果だね。
0342デフォルトの名無しさん
2010/08/10(火) 11:43:01配列すなわち定数。
int a;
a = 2; OK
2 = a; NG
int *a, b[10];
a = b; OK
b = a; NG
0343デフォルトの名無しさん
2010/08/10(火) 12:15:26ttp://oshiete.goo.ne.jp/qa/2438745.html
C++なら
std::random_shuffle
を使えばいいって言う話。
0344デフォルトの名無しさん
2010/08/10(火) 12:41:31大規模C++ソフトウェアデザインは勉強になった
日本語がところどころ難解だけど
0345デフォルトの名無しさん
2010/08/10(火) 15:34:51#if 0
〜処理
#endif
とあって
自分で実装しないといけないとかいう話も聞く関数中なのですが
#if 0 #endifって無視される部分ですよね?なぜこんなことをしてるのですか?一応サンプルのやり方だけ残しとくよみたいな感じなのですか?
0346デフォルトの名無しさん
2010/08/10(火) 16:02:23そのとおり。そのソースを書いた人のやさしさ
0347デフォルトの名無しさん
2010/08/10(火) 18:45:07プログラムのコンパイル時間が長いので、頻繁に調整する関数をDLLにしようか迷ってるんですが、
プログラムに直接処理用の関数を関数を書くのと、
関数をDLLに分けて処理させるのでは、オーバヘッドに違いは出ますか?
0348デフォルトの名無しさん
2010/08/10(火) 19:18:470349デフォルトの名無しさん
2010/08/10(火) 19:29:01コンパイルを早くしたいなら、dllに分けていいよ。
dllにすることによっての呼び出しオーバーヘッドは考えてなくいい。
あと、少し詳しく説明すると以下のようになるよ。
dllを使うプログラムの方は、実行ファイルにdllのコードを書き込まないよ。
関数の定義がどのファイルにあるかとかの情報を実行ファイルに書くだけ
(ファイル情報はなかったかも、でもこれのせいで”こんぱいる”が過剰に遅くなることはない)。
遅くなるのは、アプリケーションの起動。
実行時に、プロセスのアドレス空間にdllをロードするのに時間がかかるからだよ。
0350デフォルトの名無しさん
2010/08/10(火) 19:43:020351デフォルトの名無しさん
2010/08/10(火) 20:10:48wikiで、ライブラリを見てみ?
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA
それと350のような無能は何がしたいんだろうな。
0352デフォルトの名無しさん
2010/08/10(火) 20:36:280353デフォルトの名無しさん
2010/08/10(火) 21:17:10コミュ力低そうだし
0354デフォルトの名無しさん
2010/08/10(火) 21:21:34静的型の言語なんで、コンパイル時にサイズが確定してる。
0355デフォルトの名無しさん
2010/08/10(火) 21:23:08thx
0356デフォルトの名無しさん
2010/08/10(火) 21:24:24にしてもたいしたことなさそうだけど
大きな関数だけをdllに移すんだったらだけど
0357デフォルトの名無しさん
2010/08/10(火) 21:49:18アドレス値を即値(相対)で指定した直接ジャンプとなるか
メモリ内にあるアドレスを元にした間接ジャンプとなるか
という程度の違いは出る。
(メモリアクセスが入るので、コンパイラによってはレジスタに飛び先を保存して再利用したりも)
でもって、間接ジャンプの場合、最初の一回の分岐予測は必ず外れ
直接ジャンプ(で絶対ジャンプ)なら最初から分岐予測が成功する。
ただ、(ループ内や関数内での)2回目以降は両方とも常に成功するはず。
0358デフォルトの名無しさん
2010/08/10(火) 21:52:48完成したらstaticlinkにすりゃ医院で内科医
0359デフォルトの名無しさん
2010/08/10(火) 21:53:36しかし、>>349は「オーバーヘッドに差は無い」ではなく「オーバーヘッドは考え
なくて良い」といっているので、>>350は下らない言いがかり。
1泊以上の数値演算プログラムの一番厳しいループ中でもモジュール内呼び出しと
DLL呼び出しで、実行時間に有意差は出ねー。
0360デフォルトの名無しさん
2010/08/10(火) 22:10:180361デフォルトの名無しさん
2010/08/11(水) 12:49:10C99の範囲ではそーでもないと一応
可変長配列にsizeofしたり
0362デフォルトの名無しさん
2010/08/11(水) 12:58:22これはこれで間違いなくオーバーヘッドは出るんだけどさ
0363デフォルトの名無しさん
2010/08/11(水) 13:19:01不透明ポインタ(opaque pointer)
0364デフォルトの名無しさん
2010/08/11(水) 20:34:240365デフォルトの名無しさん
2010/08/11(水) 21:46:22結構借金あったんだなー。
0366デフォルトの名無しさん
2010/08/12(木) 12:52:08忘れたのはポインタの名前じゃなくて手法の名前だww
0367デフォルトの名無しさん
2010/08/12(木) 14:40:07ゲーム専門学校で遊んで暮らしてるやつが大半。
0368デフォルトの名無しさん
2010/08/12(木) 15:08:48pimplのこと?
0369デフォルトの名無しさん
2010/08/13(金) 11:23:44全てのメージャーなコンパイラで同じサイズ何ですか?
0370デフォルトの名無しさん
2010/08/13(金) 11:33:210372デフォルトの名無しさん
2010/08/13(金) 11:43:320373デフォルトの名無しさん
2010/08/13(金) 12:34:560374デフォルトの名無しさん
2010/08/13(金) 12:37:43理論の話だけじゃなくて現実にあるんだろ確か。
なんでそんな迷惑なシステムになっちゃったの?
0375デフォルトの名無しさん
2010/08/13(金) 12:46:570376デフォルトの名無しさん
2010/08/13(金) 13:02:59Cの処理系の一バイトは8ビット以上。
0377デフォルトの名無しさん
2010/08/13(金) 14:01:50void hoge(int *array)
void hoge(int array[])
のどちらで宣言する事が多いんですか?
0378デフォルトの名無しさん
2010/08/13(金) 14:43:08どっちも手抜き
まともなプログラムはサイズを合わせて指定する
void hoge(int *array, size_t size)
void hoge(int array[N])
0379デフォルトの名無しさん
2010/08/13(金) 15:03:44一応念の為に聞いておくけどギャグだよね?
まさかとは思うけど、後者のNに意味があるなんて思っちゃいないよね?
0381デフォルトの名無しさん
2010/08/13(金) 19:58:040382デフォルトの名無しさん
2010/08/13(金) 20:38:100383デフォルトの名無しさん
2010/08/13(金) 20:39:450384デフォルトの名無しさん
2010/08/14(土) 00:44:17偉そうに間違った知識をまき散らして・・・アホかっての
0385デフォルトの名無しさん
2010/08/14(土) 01:01:20詳細プリーズ
0386デフォルトの名無しさん
2010/08/14(土) 01:15:45詳細も糞も。
C/C++ほとんど使わない俺の目にも>>378の後者は変だ。
>void hoge(int array[N])
この引数のプロトタイプは何を意味しているのだろう。
要素数Nの配列しか受け付けない?
呼び出し側で指定している配列の要素数がNかどうかなんて、
どうやってコンパイル時に検出するの?
0387デフォルトの名無しさん
2010/08/14(土) 01:35:42void hoge(int array[N]) なんて書いても配列の要素数の束縛なんてできない
void hoge(int array[], size_t size) なら言いたいこと分かるけど
0388デフォルトの名無しさん
2010/08/14(土) 01:42:46前者もおかしいのかとおもた
0389デフォルトの名無しさん
2010/08/14(土) 03:35:02以下のプログラムで
void setname(char* ss)のssとは何をさしているのでしょうか?
最初は年齢か名前の文字数が入るのかと思ったのですが
どうも違うような気がします
本当にレベルの低い質問なんですが
ご教授よろしくお願いします
0390389
2010/08/14(土) 03:38:07#include <iostream>
#include <string.h>
using namespace std;
class hito1 //クラス宣言
{
private:
char name[40];
int age;
public:
void setname(char* ss){ //名前を設定するメンバ関数の宣言
strcpy(name,ss);
}
void setage(int tosi){ //年齢を設定するメンバ関数の宣言
if(tosi<0) age=0; else age=tosi;
}
void disp(){ //内容を出力するメンバ関数の宣言
cout << "名前:" << name << endl;
cout << "年齢:" << age << endl;
}
};
void main(){
hito1 yamamoto;
yamamoto.setname("佐々木 太郎");
yamamoto.setage(20);
yamamoto.disp();
}
0391デフォルトの名無しさん
2010/08/14(土) 03:45:46strcpy(name,ss);
}
これのstrcpyっていうのはname(1つ目)にss()2個目を入れるっていうやつ
んで上のsetname(char* ss){〜っていうのはsetnameが呼ばれたときに()の中に入っているのをssに入れるってこと
yamamoto.setname("佐々木 太郎");
これで佐々木 太郎いうのがssに一旦入る。んでstrcpy(name,ss);でssがnameにコピーされる
使い方としては一時的な入れ物みたいなもので特定のものを指してるわけじゃないし使う範囲も狭い。だからssとかいう手抜きな名前がついてる
まぁ本当に初歩の初歩だからここで質問するより参考書とか初心者向けサイトとかを見たほうが速いんじゃないかな
0392デフォルトの名無しさん
2010/08/14(土) 04:08:260393デフォルトの名無しさん
2010/08/14(土) 07:34:49それを参考してはいけない。
0394デフォルトの名無しさん
2010/08/14(土) 10:07:43終端されていない配列をコピーしちゃダメ!っていう意味かい?
Cで「文字列」って言えば、終端されていることが前提です。
長さ不明って言っても、文字列長はわかりますけど。
0395デフォルトの名無しさん
2010/08/14(土) 11:11:530396デフォルトの名無しさん
2010/08/14(土) 11:50:14文字列長が転送先に収まるか確認してからstrcpyしろ。
という事を、お前のような初心者に一々説明するのは面倒だから、strcpyは使用禁止。
0397デフォルトの名無しさん
2010/08/14(土) 11:54:500398デフォルトの名無しさん
2010/08/14(土) 13:25:18>文字列長が転送先に収まるか確認してからstrcpyしろ。
これなら納得。
「長さ不明の文字列」って言葉の使い方の問題だ。
「長さ不明の文字列」ならコピー先に収まるかどうか、判定すらできないじゃん?
って思っちゃったのよ。
>393から396をエスパーできなかったよ。
strcpy禁止にしてstrncpyやstrcpy_sを使うのは、コーディングルールとしてはアリと思う。
0399デフォルトの名無しさん
2010/08/14(土) 15:19:150400デフォルトの名無しさん
2010/08/14(土) 15:24:200401デフォルトの名無しさん
2010/08/14(土) 15:42:270402デフォルトの名無しさん
2010/08/14(土) 22:42:340403デフォルトの名無しさん
2010/08/15(日) 10:14:34>各メンバは、同じメモリ領域を共有します。
これは、変数の管理コストを下げたりするメリットがあるけど
>共用体変数にある値を代入すると他のデータは失われる
データが壊れるってわかっているのに、何故unionを使う必要があるのですか?
0404デフォルトの名無しさん
2010/08/15(日) 10:55:401.節約する
2.他の型で読み取ることが有用なことがある, intで突っ込んだデータをcharで1バイトずつ読み取ったり
0405デフォルトの名無しさん
2010/08/15(日) 13:43:37もうひとつ。
どの型のデータを格納するかわからない場合がある。
シリアル通信とか、ネットワークプログラムでは定番。
0406デフォルトの名無しさん
2010/08/15(日) 13:59:25が要らんことを言ってるだけな気がする。
要は同じメモリ領域を共有してるってことだから、この一文は無くていい
0407デフォルトの名無しさん
2010/08/15(日) 16:13:20名前は違うけど同じものを指しているってこともある
0408デフォルトの名無しさん
2010/08/15(日) 17:02:260409デフォルトの名無しさん
2010/08/15(日) 17:05:120410デフォルトの名無しさん
2010/08/15(日) 19:52:00「union変数のある部分ではint型としてアクセスしたいけど、
別のある部分ではuintとしてアクセスしたい」みたいな
そういう場合でもない限り、使うことはないし、
特に、初心者は気にすることもない
0412デフォルトの名無しさん
2010/08/15(日) 23:06:00RFC読んでも見当たらないのですが、知ってる人がいたらオナガイします。
0413403
2010/08/15(日) 23:25:06>他の型で読み取ることが有用なことがある, intで突っ込んだデータをcharで1バイトずつ読み取ったり
すみません、ここら辺がいまいちわかりません
>>410
プロトコルを作るときに便利なんですか、unionの使い方を覚えたいですね
0414デフォルトの名無しさん
2010/08/15(日) 23:31:16常駐するタイプのソフトを作るとき、出来る限りリソースは最小限に抑えたい
その際にオブジェクト一つにテキストが内包されてるか数値が内包されてるかオブジェクトによって異なる場合、などに使う。
classでも同じようなことが出来るが。
0416400
2010/08/15(日) 23:45:18そう、ドット化って意外とわからないっすよね。それを巨大化したりすろのも。学生時代に画像認識系でやったことあった気がするけどさっぱり思いだせない。
>402
Macも使ってるんで試してみますわ。情報ありがとうございます(・∀・)
0417デフォルトの名無しさん
2010/08/15(日) 23:47:40ざっとこんな感じ。intに格納されているデータがバイト単位で読めたりする。今、コード上で共用体のメンバu32に代入しているけど、これを動的に設定すると、らしくなる。
#include <stdio.h>
/* 型を示すID */
typedef enum {
E_U8 , E_U16, E_U32
} E_TYPE_DATA;
/* データ本体を示す共用体 */
typedef union {
unsigned char u8[4]; /* unsigned 8bit */
unsigned short u16[2]; /* unsigned 16bit */
unsigned u32; /* unsigned 32bit */
} T_DATA_BODY;
/* データ構造体 */
typedef struct {
E_TYPE_DATA type; /* データ型ID */
T_DATA_BODY data; /* データボディ */
} T_DATA;
int main(int argc, char** argv)
{
T_DATA tData;
tData.data.u32 = 0x12345678;
printf("%x\n", tData.data.u32);
printf("%hhx, %hhx, %hhx, %hhx\n"
, tData.data.u8[0], tData.data.u8[1], tData.data.u8[2], tData.data.u8[3]);
return 0;
}
0418デフォルトの名無しさん
2010/08/15(日) 23:58:51ちょっとググってみたら、こんなページを見つけたよ。
http://www.networksorcery.com/enp/protocol/rtp.htm
これを見るとcodecを指定するみたい。aviはコンテナなので、格納されているcodecを指定することになるんじゃないの?
0419デフォルトの名無しさん
2010/08/16(月) 00:12:05ここで聞く前に、そこ見てRFC読んだのですが、avi(Audio Video Interleave) の記述を見つけられませんでしたorz
どのcodec を指定してやればいいのだろうか?
0420デフォルトの名無しさん
2010/08/16(月) 01:41:05仕様を無視してもよけりゃ適当に衝突しないとこを指定すればいいんじゃないの
0421デフォルトの名無しさん
2010/08/16(月) 09:04:100422デフォルトの名無しさん
2010/08/16(月) 09:05:560423デフォルトの名無しさん
2010/08/16(月) 09:13:28ただ、そんな風になること自体がおかしいって説もあるが
0424デフォルトの名無しさん
2010/08/16(月) 09:33:130425デフォルトの名無しさん
2010/08/16(月) 09:43:58>424の通り、onceは一部の処理系では使えるけれど、他の処理系でも同じ意味である保証がない。
一部の処理系で言うonceは>423の言うインクルードガードと同じ目的に使うものなので、一般的にソースコードに使う意味はない。
0426デフォルトの名無しさん
2010/08/16(月) 09:58:580427デフォルトの名無しさん
2010/08/16(月) 13:44:44エイリアスがあるとうまく働かないんだよね
0428デフォルトの名無しさん
2010/08/16(月) 14:41:42#pragma once が通らないような処理系なんて考える必要はない。
これを言い出したら昔の処理系では void のキーワードすら認識できないものがある。
そんな処理系を想定してコードを書くのはナンセンス。
>一般的にソースコードに使う意味はない。
ソースをインクルードできるのは普通のこと。void を認識しない処理系でもこれはできる。
ソースをインクルードするときには #pragma once は便利な機能。
0429デフォルトの名無しさん
2010/08/16(月) 16:08:23pragma onceを別の意味にしている処理系があってもISO準拠。
voidがない処理系については、その頃はANSI-C以前だろ。
0430デフォルトの名無しさん
2010/08/16(月) 16:12:19#pragma once 使っても意味がないだろ
0431デフォルトの名無しさん
2010/08/16(月) 16:12:22ソースをインクルードするような運用はそれ自体が大問題だと思うぞ。
せめて、拡張子を.incとか.iとかにしてくれ。
0432デフォルトの名無しさん
2010/08/16(月) 16:59:24#pragma once は ANSI だよ
0433pragma単体ならansiにあるが……
2010/08/16(月) 17:06:03ソースは?
0434デフォルトの名無しさん
2010/08/16(月) 17:07:270435デフォルトの名無しさん
2010/08/16(月) 17:13:48馬鹿?
0436デフォルトの名無しさん
2010/08/16(月) 17:22:020437デフォルトの名無しさん
2010/08/16(月) 18:50:11floatで-3.4549897 と -3.4549899 の引き算を行った所、
答えが-0.0000002(7桁をオーバー)ではなく 2.3841858e-007 になり、
割り算を当てるとゼロ割り算と同じエラーを吐きます。
時折見かける、この e-007 などは扱える数を超えたという意味なのでしょうか。
こういった場合ifで桁数を超えないか監視するのが定番なのでしょうか?
0438デフォルトの名無しさん
2010/08/16(月) 18:55:50所謂指数表記です。関数電卓アプリなどでもしばしば見られると思います。
尚、浮動小数点数は元々そういった小さい数も扱えるようになっているので、
指数表記を知っておく必要があります。
また、その計算結果は見ての通り演算精度が得られないために2e-7になっていませんが、
doubleで演算すればより2e-7に近い値が得られると思います。
従って、(その他の理由もありますが)特に必要がない限りC/C++ではfloatを使うべきではありません。
0439デフォルトの名無しさん
2010/08/16(月) 19:09:59今時 #pragma once 使わず #if でインクルードガードとかやるなんて馬鹿だとしか思えんね
ビルドに余計な時間かかるし、無用なバグを生むことにもなりかねない
まぁ趣味レベルのプログラムならどうでもいいんだろうけどね
void 使わないのも勝手、関数のプロトタイプ宣言使わないのも勝手w
0440デフォルトの名無しさん
2010/08/16(月) 19:22:20こんな子どもじみた考えで実務とか語ってるのかよ
0441デフォルトの名無しさん
2010/08/16(月) 19:24:46「割り算を当てる」ってどういう意味だよ。
単精度で扱える範囲は10の-15乗 〜 10の38乗だから2e-7は楽勝で扱える値域。
それで割ってもゼロ割にはならない。
0443デフォルトの名無しさん
2010/08/16(月) 20:00:27マクロを展開して出来上がった、実行ファイルの速さと、コンパイル時間とのトレードオフの問題なのではなかろうか?
#if を見て、なんでも悪いと決め付ける理由が、わしにはようわからん、C++ 再考 のテンプレートの章を一度よみなはれ
0444デフォルトの名無しさん
2010/08/16(月) 20:06:550445デフォルトの名無しさん
2010/08/16(月) 20:25:230446デフォルトの名無しさん
2010/08/16(月) 20:50:270447デフォルトの名無しさん
2010/08/16(月) 20:51:12必死で馬鹿を否定する馬鹿↓
0448デフォルトの名無しさん
2010/08/16(月) 20:53:52___ ム i
「 ヒ_i〉 ゝ 〈
ト ノ iニ(()
i { ____ | ヽ
i i /__, , ‐-\ i }
| i / (e) (A) \ {、 λ
ト−┤. / (__人__) \ ,ノ  ̄ ,!
i ゝ、_ | U ` | ,. '´ハ ,!
. ヽ、 `` 、,__\ /" \ ヽ/
\ノ ノ ハ ̄r/:::r―--―/::7 ノ /
ヽ. ヽ::〈; . '::. :' |::/ / ,. "
`ー 、 \ヽ::. ;:::|/ r'"
0449437
2010/08/16(月) 21:03:53指数表記と言うのですか・・一時的な演算ならばdoubleで行うと良いのですね。
なるべく避けられる部分は避けようと思います。ありがとうございました。
0450デフォルトの名無しさん
2010/08/16(月) 21:06:10変数Aから変数Bを引いた値(差)を求めたいのですが、
変数A・Bとも正〜負までが不規則に現れる為、
負の場合の反転を起こして上手く差を求められません。
現状は変数A・B共に一定の数値を足して正の値に押し上げて
対応しているのですが、もっとシンプルで確実な方法は無いものでしょうか?
0451デフォルトの名無しさん
2010/08/16(月) 21:13:30A-Bじゃないの?w
0452デフォルトの名無しさん
2010/08/16(月) 21:29:12>>450はもはやなにいってのか分からないので
上手く動いてないコードを提出してくれるかもっと説明するかしろ
0453デフォルトの名無しさん
2010/08/16(月) 21:47:470454デフォルトの名無しさん
2010/08/16(月) 21:49:49スマートポインタでも使え!
0455デフォルトの名無しさん
2010/08/16(月) 21:55:06その2つは
相反しない要求だと思うぞ。
0456デフォルトの名無しさん
2010/08/16(月) 22:01:560457デフォルトの名無しさん
2010/08/16(月) 22:16:580458デフォルトの名無しさん
2010/08/16(月) 22:28:19> std::exitで終了を管理してるから
それが原因だとわかっているんじゃないか。
0459デフォルトの名無しさん
2010/08/16(月) 23:43:45#importってインポートするファイルがコンパイル後の実行ファイルを実行する環境に無くても別に平気なの?
0460デフォルトの名無しさん
2010/08/16(月) 23:50:420461デフォルトの名無しさん
2010/08/17(火) 00:49:11って何?
0462デフォルトの名無しさん
2010/08/17(火) 01:15:28C/C++ではないな。出てけ。
0463デフォルトの名無しさん
2010/08/17(火) 01:17:200464デフォルトの名無しさん
2010/08/17(火) 03:49:08そういう意味かよ
exitで終了するときまだ開放してないのがあるってのなら、一般的なOSでは気にする必要がないというか
メモリリークしない
並列処理で使うやつだとちゃんとしないと駄目なのもがあるが
0465デフォルトの名無しさん
2010/08/17(火) 08:31:02初心者にウソを教えるな
0466デフォルトの名無しさん
2010/08/17(火) 15:49:470467デフォルトの名無しさん
2010/08/17(火) 17:59:10みんなが本当だと言えばそれが真実になる
0468デフォルトの名無しさん
2010/08/17(火) 18:42:25朝鮮人みたいな事言うなヴォケ
規格票で示せ
0469デフォルトの名無しさん
2010/08/17(火) 19:26:300470デフォルトの名無しさん
2010/08/17(火) 19:27:140471デフォルトの名無しさん
2010/08/17(火) 19:52:130472デフォルトの名無しさん
2010/08/17(火) 19:58:33インラインにしてヘッダに書いちゃうと解析コストがちょびっと増えそうで気になる
0473デフォルトの名無しさん
2010/08/17(火) 19:59:27Effective C++に詳しくあるはずだ
#defineよりconst
#defineよりinline
0474デフォルトの名無しさん
2010/08/17(火) 20:07:18少なくともeclipseのメソッドツリー機能は憑いてきてくれる
0475デフォルトの名無しさん
2010/08/18(水) 13:41:190476デフォルトの名無しさん
2010/08/18(水) 13:56:420477デフォルトの名無しさん
2010/08/18(水) 14:03:57ありがとうございます。
0478デフォルトの名無しさん
2010/08/18(水) 16:04:030479デフォルトの名無しさん
2010/08/18(水) 16:32:130480デフォルトの名無しさん
2010/08/18(水) 16:49:510481デフォルトの名無しさん
2010/08/18(水) 16:53:33最新のWindowsSDK落としてきてbin,lib,includeをそっちと置き替えるってのはどうだろう?
どっちにしろEEはMFCとかの追加機能は使えないんだし
0482デフォルトの名無しさん
2010/08/18(水) 17:10:170483デフォルトの名無しさん
2010/08/18(水) 17:48:080484デフォルトの名無しさん
2010/08/18(水) 18:37:270485デフォルトの名無しさん
2010/08/18(水) 23:00:390486デフォルトの名無しさん
2010/08/18(水) 23:02:220487デフォルトの名無しさん
2010/08/18(水) 23:03:03Linuxで使える、商用OKな無償のコンパイラは?
0488デフォルトの名無しさん
2010/08/18(水) 23:06:500489デフォルトの名無しさん
2010/08/18(水) 23:24:470490デフォルトの名無しさん
2010/08/18(水) 23:25:18区別されてしかるべきと思うんだけどなあ
0491デフォルトの名無しさん
2010/08/19(木) 00:40:190492デフォルトの名無しさん
2010/08/19(木) 01:29:220493デフォルトの名無しさん
2010/08/19(木) 04:49:21WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT ,
0 , 270 , 100 , 30 , hwnd , (HMENU)10 ,
cs->hInstance , NULL);
CreateWindow(TEXT("EDIT") , TEXT("") ,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT ,
110 , 270 , 100 , 30 , hwnd , (HMENU)11 ,
cs->hInstance , NULL);
CreateWindow(TEXT("EDIT") , TEXT("") ,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT ,
220 , 270 , 100 , 30 , hwnd , (HMENU)12,
cs->hInstance , NULL);
CreateWindow(TEXT("EDIT") , TEXT("") ,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT ,
330 , 270 , 100 , 30 , hwnd , (HMENU)13,
cs->hInstance , NULL);
として
GetDlgItemText(hwnd ,10,strx ,1000);
GetDlgItemText(hwnd ,11,stry ,1000);
GetDlgItemText(hwnd ,12,strz ,1000);
sscanf(strx,"%f",&x);
sscanf(stry,"%f",&y);←
sscanf(strz,"%f",&z);
とすると←でエラーが出て、どうやらGetDlgItemTextのstry以下がちゃんとアドレスが入ってないようなのですがなぜでしょうか?
0494デフォルトの名無しさん
2010/08/19(木) 06:10:20なぜでしょうか?
0495デフォルトの名無しさん
2010/08/19(木) 07:12:170496デフォルトの名無しさん
2010/08/19(木) 07:22:12どういうことですか?
CreateWindow(TEXT("EDIT") , TEXT("") ,
WS_CHILD | WS_VISIBLE | WS_BORDER | ES_LEFT ,
110 , 270 , 100 , 30 , hwnd , (HMENU)11 ,
クリエイトウインドウの ↑の部分と同じintを指定しているのですがそれでは駄目なのですか?
どうすれば良いのですか?
0497デフォルトの名無しさん
2010/08/19(木) 07:29:28LPSTR strx,stry,strz;
GetDlgItemText(hwnd ,10,strx ,1000);
GetDlgItemText(hwnd ,11,stry ,1000);
GetDlgItemText(hwnd ,12,strz ,1000);
sscanf(strx,"%f",&x);
sscanf(stry,"%f",&y);
sscanf(strz,"%f",&z);
を
LPSTR str;
GetDlgItemText(hwnd ,10,str ,100);sscanf(str,"%f",&x);
GetDlgItemText(hwnd ,11,str ,100);sscanf(str,"%f",&y);
GetDlgItemText(hwnd ,12,str ,100);sscanf(str,"%f",&z);
にしたらコンパイルが通ったのですが何故ですか?
0498デフォルトの名無しさん
2010/08/19(木) 07:49:490499デフォルトの名無しさん
2010/08/19(木) 08:02:26http://hibari.2ch.net/test/read.cgi/tech/1274949734/912
0500デフォルトの名無しさん
2010/08/19(木) 09:54:300501デフォルトの名無しさん
2010/08/19(木) 10:00:540502デフォルトの名無しさん
2010/08/19(木) 12:56:28危なかったぜ
0503デフォルトの名無しさん
2010/08/19(木) 22:18:21コンパイラーは警告すらださないしメモリもリークしてないみたいなんだけどどうかな
0504デフォルトの名無しさん
2010/08/19(木) 22:37:530505デフォルトの名無しさん
2010/08/20(金) 00:00:230506デフォルトの名無しさん
2010/08/20(金) 08:07:240507デフォルトの名無しさん
2010/08/20(金) 15:44:50できることは何でもしていい
050836
2010/08/20(金) 16:05:21とかでも暗黙的にメンバのデストラクタ呼ぶわけだから、
それのために仮想デストラクタにしといた方がいいのかも?
それとも不要なのか?
よくわからん
0509デフォルトの名無しさん
2010/08/20(金) 16:07:58質問の内容が変わってるから、これはマルチじゃないよ。
0510デフォルトの名無しさん
2010/08/20(金) 16:20:23仮想じゃないメンバを呼び出すことは規格的には未定義じゃなかったか?
どれが呼ばれるか分からないとかじゃなくて
0511デフォルトの名無しさん
2010/08/20(金) 17:46:370512デフォルトの名無しさん
2010/08/20(金) 17:58:20よく分からないならそうしておけ
派生するが仮想関数にしなくていいようなケースだってあるけど、理由とか知らなきゃやれないし
0513デフォルトの名無しさん
2010/08/20(金) 23:27:33継承しないクラスなら仮想関数にする必要はない
0514デフォルトの名無しさん
2010/08/20(金) 23:28:460515デフォルトの名無しさん
2010/08/21(土) 00:16:38struct FOO {
FOO(){ cout << "create FOO." << endl; }
~FOO(){ cout << "destruct FOO." << endl; }
};
struct HOGE {
};
struct HOGEHOGE: public HOGE {
FOO foo;
};
int main(int argc, char* argv[])
{
HOGE* hoge = new HOGEHOGE;
delete hoge;
return 0;
}
上記コードだと、(少なくともVC08では) HOGEHOGE::foo のデストラクタがコールされない。
HOGEを
struct HOGE {
virtual ~HOGE(){}
};
にすると、ちゃんと HOGEHOGE::foo のデストラクタが呼ばれる。
派生クラスで、デストラクタを持つ型をメンバとして持つ場合でも、仮想デストラクタにしといたほうが良いようだ。
0516デフォルトの名無しさん
2010/08/21(土) 00:45:250517デフォルトの名無しさん
2010/08/21(土) 12:28:02書くのが面倒以外で。
0518デフォルトの名無しさん
2010/08/21(土) 12:58:10delete hoge;
というのは
hoge->~HOGEHOGE();
ではなく
hoge->~HOGE();
が実行されているのと等価ですか?
0519デフォルトの名無しさん
2010/08/21(土) 13:08:52vtableに使うメモリを節約したいとか?
0520デフォルトの名無しさん
2010/08/21(土) 15:03:15デストラクタを常にvirtualにするのは、馬鹿の一つ覚え。
0521デフォルトの名無しさん
2010/08/21(土) 15:36:310522デフォルトの名無しさん
2010/08/21(土) 15:45:35もしかして構造体をfwrite()とかfread()とかでそのまま読み書きしようって話?
Cでもそんなのやめてほしい。
0523デフォルトの名無しさん
2010/08/21(土) 15:57:190524デフォルトの名無しさん
2010/08/21(土) 21:00:260525デフォルトの名無しさん
2010/08/21(土) 21:12:39const な変数にしたい場合、
const int A = 0;
*const_cast<int*>(&A) = 30;//テキストから動的に読み込んだデータ
とか、
クラスメンバーconst変数に初期化子として代入
とかがふと思いつきますが、
他に良い方法ありますか?
0526デフォルトの名無しさん
2010/08/21(土) 21:24:04const int y = x;
-----
int my_read_func_ex()
{
int x: my_read_func(x);
return x;
}
const int y = my_read_func_ex();
0527デフォルトの名無しさん
2010/08/21(土) 21:42:55明後日の回答じゃね?
>>525
const変数の初期化は一度しかできないから生成時にできなければ、constじゃない
変数へのポインタか参照を使うしかない。つまり超大雑把に言って他にはないんじゃね。
0528デフォルトの名無しさん
2010/08/21(土) 21:44:250529デフォルトの名無しさん
2010/08/21(土) 21:44:53int A = 0;
const int& refA = A;
A = 30;
// 以降Aは使用せずrefAだけ使用する
0530デフォルトの名無しさん
2010/08/21(土) 22:07:42ありがとうございます
0531デフォルトの名無しさん
2010/08/22(日) 11:26:26他にとか言う以前にその方法は最悪だ
const_castしての書き込みが許されるのはそこが本当に書き込み可能だった場合のみ
const int Aに書き込みしちゃ駄目よ
0532デフォルトの名無しさん
2010/08/22(日) 11:40:270533デフォルトの名無しさん
2010/08/22(日) 12:20:260534デフォルトの名無しさん
2010/08/23(月) 16:13:52たとえばこのプログラムの場合で、test0〜test4を作るためにはどうすればいいですか?
多分○○のところを何か埋めれば書けるんじゃないかと思うんですが、検討がつきません。
class testclass {};
int main()
{int A =0;
While(A<5){
testclass test○○();
A++;
}
}
0535デフォルトの名無しさん
2010/08/23(月) 16:22:55そんなときはマクロ
0536デフォルトの名無しさん
2010/08/23(月) 16:36:26変数に入れた値を使ってというならやっぱ無理だけどね
5がコンパイル時に確定してるなら可能だ
test0 〜test4までの宣言を創りだすことが可能だ
でも、変数に入れた値を使って作りたいってどんな状況なのさ・・・・・・・
ありえないと思うんだが
0537デフォルトの名無しさん
2010/08/23(月) 16:41:260538534
2010/08/23(月) 16:59:20つまらない質問すいませんでした。
0539デフォルトの名無しさん
2010/08/23(月) 17:02:350540デフォルトの名無しさん
2010/08/23(月) 17:08:010541デフォルトの名無しさん
2010/08/23(月) 17:16:56答えてる時からそういう結論になるだろうなと思ってたから気にすんな
0542525
2010/08/23(月) 17:56:26やっぱりそうなりますよね・・・
>一回だけ書き込み可能な整数ラッパークラス
このあたりでいきます
ありがとうございました
0543デフォルトの名無しさん
2010/08/23(月) 23:17:13楽な気がするのは気のせいですか?
0544デフォルトの名無しさん
2010/08/23(月) 23:40:35C++に標準ではファイル操作なんてありませんが。
# あるのはストリーム操作。FILEを使ってもストリーム操作。
0545デフォルトの名無しさん
2010/08/23(月) 23:54:080546デフォルトの名無しさん
2010/08/23(月) 23:55:46クラスの入出力をしないなら確かにFILE使った方が速いし楽
でも自分で入出力をカスタマイズしようとするとすぐ<<と>>のオーバーロードが欲しくなる
0547デフォルトの名無しさん
2010/08/24(火) 01:57:47気のせいじゃね?
0548デフォルトの名無しさん
2010/08/24(火) 07:05:07なにがうれしくて<<なnnda
0549デフォルトの名無しさん
2010/08/24(火) 07:47:58stream系の便利なところは、オーバーロードできることだね。
Cでも構造体は作れるけど、それ専用の出力関数を作るのならoperator<<()を作る方が再利用しやすい。
0550デフォルトの名無しさん
2010/08/24(火) 11:22:21linux0.01のブートの部分はなんとなく理解出来たのですが
ハードディスクなどのハードウェアの部分になると何をしているのかよくわかりません。
もしおすすめの書籍などあれば教えて下さい。よろしくお願いします。
0551デフォルトの名無しさん
2010/08/24(火) 11:51:05そういう情報はネットに溢れてるし、ほとんど書籍化されてないよ
英文を読めないのが問題なんだよ、書籍買うのなら英語の学習本だね
0552デフォルトの名無しさん
2010/08/24(火) 12:24:17minix はどうだろうか?
0553デフォルトの名無しさん
2010/08/24(火) 14:12:06C++で実行するとコマンドプロンプトにすぐ移るのですが、結果の量が多く最後の方しか見ることができません。
結果をすべて見るにはどうすれば良いでしょうか?
0554デフォルトの名無しさん
2010/08/24(火) 14:20:180555デフォルトの名無しさん
2010/08/24(火) 15:41:53また、処理が終了すると何かキーを押すだけで終了してしまいます。
どのタイミングでhoge.exe | moreを入れれば良いでしょうか?
0556デフォルトの名無しさん
2010/08/24(火) 15:54:35コマンドプロンプトを先に開いてから
0557デフォルトの名無しさん
2010/08/24(火) 15:55:46\
∧ニユ/ ̄ヽ
\ ( ´∀/) i
\.\ _(」つ/とl) . | \
;::;::\i\ 匚レ| .〈/ ) | \
。::;;:'\.\ (_,)ー' |_,, -'''"!
^人;:'::;゚:;.\l\ _,,, -''"|_,, -''"|
^^从::;;:。':\.\_,, -''"|_,, -''"| . :|
へ ^へ;;::';;:'\l_,, -''" . | 从^ 〜
^ ^ヘ^人从::;;;:| ,ィ人^. | ^ ^へ^^
〜 ^.へ' ^':レ^从 へ' | 〜 ^
へ ^^ へ 〜人^ ^ へ〜 〜
0558デフォルトの名無しさん
2010/08/24(火) 15:57:39(a.cppを実行すると仮定してお願いします。)
0559デフォルトの名無しさん
2010/08/24(火) 16:00:020560デフォルトの名無しさん
2010/08/24(火) 16:16:47コマンドプロンプトを開いて、そのフォルダに移動し、a.cppを実行する。
それでウィンドウが開くから。まずはそこまでやってくれ。
0561デフォルトの名無しさん
2010/08/24(火) 16:48:230562デフォルトの名無しさん
2010/08/24(火) 17:02:03英単語はえっちなのしか知りません><
英語勉強します・・
>>552
MINIXが一番いいみたいですね。
本もありますし、そうしようと思います。
ありがとうございました。
0563デフォルトの名無しさん
2010/08/24(火) 17:07:363重カッコでやると全部が条件に達したときに終わってしまいますが一つだけ達してくれればよいのですが
0564デフォルトの名無しさん
2010/08/24(火) 17:11:26for (;A || B || C;) {
}
0565デフォルトの名無しさん
2010/08/24(火) 17:15:590566デフォルトの名無しさん
2010/08/24(火) 21:55:240567デフォルトの名無しさん
2010/08/24(火) 23:01:53for文使って という顧客の要件定義がある以上仕方ない
0568デフォルトの名無しさん
2010/08/25(水) 22:01:36実効速度も速いし
0569デフォルトの名無しさん
2010/08/25(水) 23:24:380570デフォルトの名無しさん
2010/08/25(水) 23:25:36これさえなければな・・・。
0571デフォルトの名無しさん
2010/08/26(木) 01:33:160572デフォルトの名無しさん
2010/08/26(木) 01:39:450573デフォルトの名無しさん
2010/08/27(金) 02:20:330574デフォルトの名無しさん
2010/08/27(金) 08:45:530575デフォルトの名無しさん
2010/08/27(金) 09:09:54お前バカだろ
0576デフォルトの名無しさん
2010/08/27(金) 09:35:33さすがにそれはねーよw
0577デフォルトの名無しさん
2010/08/27(金) 11:24:380578デフォルトの名無しさん
2010/08/27(金) 11:30:020579デフォルトの名無しさん
2010/08/27(金) 12:05:28| ここはお前の日記帳じゃねえんだ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\_______ _______/ | チラシの裏にでも書いてろ
∨ \_________ ____
/::::::::::< \ィ,:::::::::::::;N ヘ r;ァ'N;:::::::::::::,ィ/ |/ >::::::::::ヽ
i:::::::::::::::ン、 `ヽル/ ヽ / __ 〃 ヽル1'´ ∠:::::::::::::::::i
. l:::::::::::::::l ̄ 一- = ., - ,___ i -/― ヽ | / i′ ___, - ,. = -一  ̄l:::::::::::::::l
/ニヽ:::::::l r`,==- 、 ! / | |/ ! , -==、´r' l::::::/,ニ.ヽ
,| /'l l:::::l く二''‐- ,,_ l ' (フヽ ○ l _,, -‐''二ゝ l::::l f゙ヽ |、
-| { ( l:::! _、=;ニ,ァ-ニッヽ、 --ーJ レー-- 、ヽヾニ-ァ,ニ;=、_ !:::l ) } ト
ヽ、)ノ::{ ´,,,ニ'=゙ー ´、yr゛7'¨ッ ヾ¨'7"ry、` ー゙='ニ,,,` }::ヽ(ノ
ミ:::::::i, 、.,,,;;;;,l'  ̄゛ `! 、ヽゝー :ーゝヽ、 !´ " ̄ 'l,;;;;,,,.、 ,i:::::::ミ
ミ::::::::リi,, 、ゝニ´(__ }_'r 、イ ー-.ヽ :::::::::::::::::::::::::::::ヽ.-‐ ト、 r'_{ __)`ニゝ、 ,,iリ::::::::ミ
, ゙;::::::::::::::゛`:::::、,-ッ-ー`ニ`ッ;`'V:::l\iV ::::::::::::::::::::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、::::: `"::::::::::::::;゙ ,
\\ ヽ::::::::::::::::::i.,,ン、`ニ二´.,ッ::::、゙ .N::::::::::::::::::::::::::::::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::///
\ \::::::::::::::::::::::::::::::::::::::::::::/ l::::::::::::::::::::::::::::::::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ /
0580デフォルトの名無しさん
2010/08/27(金) 19:09:41cat >crc.cpp <<EOF
#include "crc.h"
void CRC32_noinline::operator() (unsigned char c) {calc(c);}
EOF
cat >crc.h <<EOF
class CRC32{ public: CRC32():crc(~0U){}
operator unsigned int(){return ~crc;}
void operator()(unsigned char c){calc(c);}
protected: void calc(unsigned char c) {
for (int j=0; j<8; j++){
if ((c >> 7)^(crc >> 31)) crc = (crc << 1)^0x04c11db7;
else crc = (crc << 1);
c <<= 1; }}
private: unsigned int crc; };
class CRC32_noinline : public CRC32 {
public: void operator()(unsigned char c);};
EOF
cat >test.cpp <<EOF
#include <iostream>
#include <iomanip>
#include "crc.h"
using namespace std;
template<class C> void test() { C crc;
for (long i = 0; i < 0x10000000L; ++i) crc(static_cast<unsigned char>(i));
cout<<"CRC: "<<hex<<setw(8)<<setfill('0')<<(unsigned)crc<<endl; }
int main(int argc, char* argv[]){
if (argc == 1) test<CRC32>();
else test<CRC32_noinline>();
return 0; }
EOF
g++ -o test -O2 test.cpp crc.cpp; time ./test; time ./test noinline
0581デフォルトの名無しさん
2010/08/27(金) 19:13:23CRC: 5451fcca
19.62user 0.01system 0:19.64elapsed 99%CPU (0avgtext+0avgdata 3552maxresident)k
0inputs+0outputs (0major+273minor)pagefaults 0swaps
CRC: 5451fcca
22.44user 0.00system 0:22.44elapsed 99%CPU (0avgtext+0avgdata 3568maxresident)k
0inputs+0outputs (0major+274minor)pagefaults 0swaps
0582デフォルトの名無しさん
2010/08/27(金) 23:32:160583デフォルトの名無しさん
2010/08/27(金) 23:53:420584デフォルトの名無しさん
2010/08/28(土) 00:40:20std::cout << "test" << std::endl;
くらいしか処理を書いていないのに、結構違うんだなーと思ったものでね
0585デフォルトの名無しさん
2010/08/28(土) 00:48:390586デフォルトの名無しさん
2010/08/28(土) 05:43:47関数呼び出しのオーバヘッドかな。
iccやgccの4みたいにオブジェクト間最適化ができたら差がなくなりそうだ。
0587デフォルトの名無しさん
2010/08/28(土) 07:13:16まあLTO可能なコンパイラなら当然か
0588581
2010/08/28(土) 11:31:38でもリンク時最適化ってコンパイル時と同じ最適化ができるのか?
0589デフォルトの名無しさん
2010/08/28(土) 19:48:220591デフォルトの名無しさん
2010/08/28(土) 19:58:180592デフォルトの名無しさん
2010/08/28(土) 20:43:49できないね。まあ仕方ないな。
0593デフォルトの名無しさん
2010/08/29(日) 21:59:27test.cpp
#include "hoge.h"
main.cpp
#include "hoge.h"
#include "test.h"
mainから「hoge.h」と「test.h」を呼び出しているのに、コンパイラエラーが発生しないんですか?
#ifndef TEST_H
#define TEST_H
#endif TEST_H
などという記述はちゃんとコメントアウトしてあります
0594デフォルトの名無しさん
2010/08/29(日) 22:05:030595デフォルトの名無しさん
2010/08/29(日) 22:07:14ヘッダーでグローバル変数を定義してるとかアホなことをしてない限り
0596デフォルトの名無しさん
2010/08/29(日) 22:13:57させないためのもの。ヘッダからヘッダをインクルードしていると、これはよく
発生する。
[header1.h]
#include "header.1"
...
[header2.h]
...
[source.c]
#include "header1.h"
#include "header2.h"
↑こうするとheader2.hは二回インクルードされる
0597デフォルトの名無しさん
2010/08/29(日) 22:15:44[header1.h]
#include "header2.h"
...
[header2.h]
...
[source.c]
#include "header1.h"
#include "header2.h"
0599デフォルトの名無しさん
2010/08/30(月) 22:52:470600デフォルトの名無しさん
2010/08/30(月) 23:49:350601デフォルトの名無しさん
2010/08/31(火) 20:02:23「pragmaはコンパイラ・OSやらによって動作が違うから使うな」
みたいな注意書きを見て恐くて、
不要な警告を消したり等色々便利そうなのですが、ずっと使わずにいます。
Windows以外(主にUNIX・Linuxなど)でプログラムを動かす場合、
pragmaを使っていても平気なものなのでしょうか。 やめておいた方が良いのでしょうか?
0602デフォルトの名無しさん
2010/08/31(火) 20:07:24VCで警告を消すぐらいならプロジェクトのプロパティで設定できるでしょ
0603デフォルトの名無しさん
2010/08/31(火) 20:12:54を理解してれば使っていいよ
0604601
2010/08/31(火) 20:22:20移植するならヘッダの2度読み防止とかもifndefでやるべきなのですね。
警告の消し方も調べてみようと思います。ありがとうございました〜
0605デフォルトの名無しさん
2010/09/01(水) 00:42:47事実上*NIXのコンパイラなんてgccだけなんだから、
gccでも使える#pragma onceなんかはあまり気にせず書くという考え方もある。
0606デフォルトの名無しさん
2010/09/01(水) 00:50:370607デフォルトの名無しさん
2010/09/01(水) 01:06:100608デフォルトの名無しさん
2010/09/01(水) 01:12:220609デフォルトの名無しさん
2010/09/01(水) 15:03:33ファイルが増えてきたためmakeを利用しようとおもっております。
ファイルが増加するたびにmakeファイルの定義をついかしても良いのですが、
定義を追加せずに指定フォルダ以下の更新したファイルのみコンパイルする記述がないでしょうか?
昔どこかで上記のような動作を行えるコマンドかなにかがあるとの事を、
どこかで見たのですが失念してしまいました。
昔は指定フォルダ以下のファイル群に対し、makeファイルを作成する
プログラムを作っていたのですがすでに遺失してしまいました。
0610デフォルトの名無しさん
2010/09/01(水) 15:05:100611デフォルトの名無しさん
2010/09/01(水) 16:19:220612デフォルトの名無しさん
2010/09/01(水) 19:31:59[Main] [クラスA] [クラスB] の3つのヘッダとソースファイルが有ります。
今は[Main]でクラスAのインスタンスを作り、
クラスAで利用する[クラスB]のインスタンスを、クラスAのソースのグローバルスコープで、static付で作っています。
今までクラスAは1つのインスタンスなので、これで問題無かったのですが
クラスAのインスタンスを複数(配列)にする事になりました。
このままだとクラスBはどのクラスAのインスタンスから呼んでも同じものになりますよね?
クラスBのインスタンスを常に別々に別けたい場合と、
クラスBのインスタンスを常に1つ(同じ)にしたい場合、どこでインスタンスを作るのが良い行い方なのでしょうか?
0613デフォルトの名無しさん
2010/09/01(水) 19:37:27staticでインスタンス持ったりするのやめれ。不自由っしょ?
> クラスAで利用する[クラスB]のインスタンスを
フツーにAのメンバ変数で持てば十分では?
0614デフォルトの名無しさん
2010/09/01(水) 19:49:210615デフォルトの名無しさん
2010/09/02(木) 00:32:49ループ回数が多くて実行周期が遅くなってしまいます。
少しでもステップ数を減らしたいんだけど、他にいい書き方ないかな?
void writeNumOriginalFontBig(char p){
unsigned long adrs, i, j, k;
char *dp;
char dt;
int bit = 0;
int xdotCt=0;
dp = originalFontBig + (p * (6 * FONT_BIG_Y));
dt = *dp++;
for (i = 0; i < 88; i++) { /* 縦ドット分繰り返し */
adrs = (((cy + i) * LINE_CR ) + cx + VRAM_BASE_ADDRESS);
for(j = 0; j < 6; j++){ /* 横ドット分繰り返す */
for(k = 0, bit = 0x80; k < 8; k++){
if(xdotCt >= 44){
xdotCt = 0;
break;}
if(TESTBIT(dt, bit) == 1){ /* データがある */
OUTPORTB(adrs, BLACK);}
else{
OUTPORTB(adrs, WHITE);}
dt = dt << 1;
adrs++;
xdotCt++;}
dt = *dp++;}}
glcdMove(cx + 44, cy); /* 描画位置移動 */
}
0616デフォルトの名無しさん
2010/09/02(木) 06:34:53バッファを1MBにしてfreadするのは効率が悪いでしょうか?
0617デフォルトの名無しさん
2010/09/02(木) 06:42:390618616
2010/09/02(木) 06:44:40char buf[4096]とかってをよく見ますが、これじゃ小さいですか..
ちなみに、file構造体って1バイトずつのアクセスでいいんですよね(確認だけど)
0619デフォルトの名無しさん
2010/09/02(木) 07:09:02MAXBSIZEは65536だった。
0620デフォルトの名無しさん
2010/09/02(木) 07:25:560621デフォルトの名無しさん
2010/09/02(木) 08:41:16FILE構造体はバッファを4096とかにしてても
1バイトづつアクセスするとめちゃくちゃ遅くなる
>>616 ならバッファ1MBにしておいて1MB読んで書けばいいよ
0622デフォルトの名無しさん
2010/09/02(木) 11:10:300623デフォルトの名無しさん
2010/09/02(木) 11:16:590624デフォルトの名無しさん
2010/09/02(木) 11:20:490625デフォルトの名無しさん
2010/09/02(木) 11:22:140626デフォルトの名無しさん
2010/09/02(木) 12:16:41レス、ありがとう。
makedepenedでかいけつできました。
ありがとうございました。
0628デフォルトの名無しさん
2010/09/02(木) 14:27:250629デフォルトの名無しさん
2010/09/02(木) 14:31:42100MB一度に読んで、1MBづつ書くほうが効率的だよ。
0630デフォルトの名無しさん
2010/09/03(金) 00:32:09UIをC++でフルスクラッチで作ろうと思っています。
ゲームのUIのようなものを考えています。
参考になるようなサイト、スレ、書籍等を教えていただけたらと思います。
検索してもミドルウェアとかライブラリばかりがひっかかって
純粋にUIを作るというとこに辿りつけませんでした。
よろしくお願いします。
0631デフォルトの名無しさん
2010/09/03(金) 00:40:40「デバイスコンテキスト」でググレば幸せになれるかも
0632デフォルトの名無しさん
2010/09/03(金) 00:48:47一応DCとってピクセルを描画等はひととおり経験済みです。
それで、それらを使ってUIを作るとしたとき
どういった手順が定石というか定番の手法なのかというか
その辺りを知りたいのです。
多分すごい初歩的?な質問かもしれませんが
よろしくお願いします。
0633デフォルトの名無しさん
2010/09/03(金) 01:36:440634デフォルトの名無しさん
2010/09/03(金) 01:42:05DC描画じゃゲームには向いていないんじゃないか?
0635デフォルトの名無しさん
2010/09/03(金) 01:48:290636デフォルトの名無しさん
2010/09/03(金) 02:03:44もう少しヒントを!
ググル先生も絞り込めないみたいです。
>>634
メインはとりあえずOpenGLで作っています。
UI設計の基本的な考え方、ということで
環境依存の質問ではなさそうなので
環境を記述しませんでしたが
DirectXやOpenGLじゃないといけないor不利な
状況というものがあるのでしょうか?
0637デフォルトの名無しさん
2010/09/03(金) 04:29:31あったよ、名前ちがってたわ。
組み込みGUI(ウィンドウ・システム)環境の設計と実装 [単行本(ソフトカバー)]
0638デフォルトの名無しさん
2010/09/03(金) 06:05:36特にVista以降は遅い
もっとも、テーブルゲームくらいならGDIでもいいんだろうけど
0639デフォルトの名無しさん
2010/09/03(金) 13:05:18C#の日本語文字列はユニコードが使用され、c++で普通にTcharを使えばS-JISが使われて、
_tcscpyでの比較をすると同じ文字なのに同じと判定してくれません。
c++のほうでユニコードを使おうという結論にしたのですが、
TCHAR moji[100] = _T("比較対象文字")
と定義すると、文字コードがS-JISになってしまいます。
MultiByteToWideChar(CP_ACP,0,moji,-1,NULL,NULL);
とやろうにもtcharからLPCSTRへ変換出来ませんというエラーが出ます。
試行錯誤した結果
char moji[100] = {"比較対象文字列"}
と定義してからなら上の変換関数に通り、ユニコードへ変換出来たんですが、
最初からtcharのみを使ってユニコードでの初期値代入する方法は無いのでしょうか?
0640デフォルトの名無しさん
2010/09/03(金) 13:16:020641デフォルトの名無しさん
2010/09/03(金) 13:27:20strcpy_sは標準ではないのでその判断基準はだめだな
0642デフォルトの名無しさん
2010/09/03(金) 14:17:35TCHARまわりの知識に不安を感じるからTCHARや_UNICODEでよく調べてみろ。
VC使ってると仮定するけど、とりあえずはVCのプロジェクトのプロパティ→全般のあたりに
UNICODE関連の設定がないか調べてみろ。
0643デフォルトの名無しさん
2010/09/03(金) 14:33:10設定はユニコードを使用するになっています。
また#define _UNICODEを書くと再定義しているという警告が出ます。
しかし具体的に書くと
c++のソースで定数として定義した「お」→0x304a
c#から持ってきたデータの「お」→0xa882
と別データになっています。
いろんなサイトを見てL"お"なども試しましたが、やっぱり0x304aになります。
http://pentan.info/php/reg/is_hira.html
このサイトを見て、C#側はユニコード、C++はS-JISと判断しました。
0644デフォルトの名無しさん
2010/09/03(金) 14:45:17tchar moji[100] = _T("お");
MultiByteToWideChar(CP_ACP,0,(char*)moji,-1,NULL,NULL);
という強引なキャストでいけるかなと試したのですが、なぜかこの場合変換されません。
最初の変数の型をcharにしないと、最初に入れられる値が変わってきて変換対象とされないのかなと思ったりしてます。
0645デフォルトの名無しさん
2010/09/03(金) 14:49:40定数の変換自体は上手くいくかもしれませんが、
行う予定の数々の文字列処理はユニコードなのでそのあたりで問題がでそうな気がします。
0646デフォルトの名無しさん
2010/09/03(金) 14:51:11vectorみたいにこっからここまでっていう目印をつける
オブジェクト1つに対してフラグになるものも余分にひとつどこかに用意する
ほかになんかいい方法ありますか?
0647デフォルトの名無しさん
2010/09/03(金) 15:06:09マルチ乙
0648デフォルトの名無しさん
2010/09/03(金) 15:06:56落ち着いて自分の書き込みとそのサイトをもう一度よく見比べてみるんだ
0649デフォルトの名無しさん
2010/09/03(金) 15:12:55あれれー?
ちきしょう、サイト管理者めいつの間に内容を変えたw。
0650デフォルトの名無しさん
2010/09/03(金) 15:14:590651デフォルトの名無しさん
2010/09/03(金) 16:03:26どうやら荒しのアホにコピペされたようです
マルチではありません
0652デフォルトの名無しさん
2010/09/03(金) 23:45:11ありがとうございます!
さっそくポチってきます。
こういうのは「組み込み系」になるんですね。
勉強になりました!
0653デフォルトの名無しさん
2010/09/04(土) 03:01:37なにか方法はあるでしょうか?
0654デフォルトの名無しさん
2010/09/04(土) 03:19:23目的のポインタから配列の先頭ポインタを引いたらできました
0655デフォルトの名無しさん
2010/09/04(土) 07:14:06charなら1だから引くだけでいいけど
0656デフォルトの名無しさん
2010/09/04(土) 11:05:43嘘教えるなよ
0657デフォルトの名無しさん
2010/09/04(土) 14:44:280658デフォルトの名無しさん
2010/09/05(日) 01:13:45あくまで同じ配列のポインタ同士の減算だから個数が得られているだけだから、
嘘は言いすぎだろ、メモリ配置的に考えて
その例ならunsignedで引き算するなら割る必要があるんだし
((unsigned)&bar[5] - (unsigned)&bar[0]) / sizeof(T)
冗長だから&bar[5] - &bar[0]の方が良いという意見は納得できるが
0659658
2010/09/05(日) 01:33:51同じ配列のポインタ同士の減算では割る必要がないが、
ポインタの数値の減算は割る必要がある
というので「嘘教えんな」だとほんの少し違和感があっただけだ
蛇足かもしれんが
0660デフォルトの名無しさん
2010/09/05(日) 01:37:590661デフォルトの名無しさん
2010/09/05(日) 02:02:170662デフォルトの名無しさん
2010/09/05(日) 05:08:30ちょっと言い訳としては苦しいな
0663デフォルトの名無しさん
2010/09/05(日) 05:15:29ポインタとアドレスの区別ついてないだろw
0664デフォルトの名無しさん
2010/09/05(日) 07:57:11規格で保証されてたはず。
0665デフォルトの名無しさん
2010/09/05(日) 09:59:44[expr.sizeof] 5.3.3 Sizeof
The sizeof operator yields the number of bytes in the object representation of its operand. The operand
is either an expression, which is not evaluated, or a parenthesized type-id. The sizeof operator shall not
be applied to an expression that has function or incomplete type, or to an enumeration type before all its
enumerators have been declared, or to the parenthesized name of such types, or to an lvalue that designates
a bit-field. sizeof(char), sizeof(signed char) and sizeof(unsigned char) are 1; the
result of sizeof applied to any other fundamental type (3.9.1) is implementation-defined. [Note: in par-
ticular, sizeof(bool) and sizeof(wchar_t) are implementation-defined.
69)
] [Note: See 1.7 for
the definition of byte and 3.9 for the definition of object representation. ]
0666デフォルトの名無しさん
2010/09/05(日) 13:48:30どのあたりが理解不足かはっきり説明してくれ
0667デフォルトの名無しさん
2010/09/05(日) 13:51:07に対しての>>655だぞ?
もう>>658とか言い訳してないで間違いを認めろよwwwwww
0668デフォルトの名無しさん
2010/09/05(日) 14:08:480669デフォルトの名無しさん
2010/09/05(日) 14:09:470670デフォルトの名無しさん
2010/09/05(日) 14:11:27ここは質問スレだしな
0671デフォルトの名無しさん
2010/09/05(日) 14:11:520672デフォルトの名無しさん
2010/09/05(日) 14:16:140673デフォルトの名無しさん
2010/09/05(日) 14:16:300674デフォルトの名無しさん
2010/09/05(日) 14:18:140675デフォルトの名無しさん
2010/09/05(日) 14:21:36short b[5] = { 0, 1, 2, 3, 4};
long c[5] = { 0, 1, 2, 3, 4} ;
printf ( "%d\n", *a+1 ) ;
printf ( "%d\n", *b+1 ) ;
printf ( "%d\n", *c+1 ) ;
これの表示結果が全部1になるなんてポインタの初期の初期に覚えることじゃ
なぜサイズで割らないといけないとか発想がでるのかわからない
0676デフォルトの名無しさん
2010/09/05(日) 14:23:02unsigend って unsigned charの略じゃないって知ってるか?w
0677デフォルトの名無しさん
2010/09/05(日) 14:26:03unsigned intの意味だが別にそこ問題じゃなくないか?
0678デフォルトの名無しさん
2010/09/05(日) 14:26:28printf ( "%d\n", *(a+1) ) ;
printf ( "%d\n", *(b+1) ) ;
printf ( "%d\n", *(c+1) ) ;
では?
0679デフォルトの名無しさん
2010/09/05(日) 14:28:360680デフォルトの名無しさん
2010/09/05(日) 14:29:55やってみれば分かるが結果は一緒だ
0681デフォルトの名無しさん
2010/09/05(日) 14:32:47結果が一緒だろうが過程が・・・・・
そんな紛らわしい配列の中身にすんなよwwwwww
0682デフォルトの名無しさん
2010/09/05(日) 14:39:43char a[5] = { 0, 2, 2, 3, 4};
short b[5] = { 0, 2, 2, 3, 4};
long c[5] = { 0, 2, 2, 3, 4} ;
printf ( "%d\n", *a+1 ) ;
printf ( "%d\n", *b+1 ) ;
printf ( "%d\n", *c+1 ) ;
は1が出力される
0683デフォルトの名無しさん
2010/09/05(日) 18:36:370684デフォルトの名無しさん
2010/09/05(日) 18:40:15>>675が間違ってるってことだろ。
それ以外になんかある?
0685デフォルトの名無しさん
2010/09/05(日) 18:43:25これは[0]の0に+1したのを出力する事を想定してるのか
それとも[1]の1を出力する事を想定してるのか
どっち?
0686デフォルトの名無しさん
2010/09/05(日) 18:44:45流れからして明らかだろ
いまさらなにいってんだよ
0687デフォルトの名無しさん
2010/09/05(日) 18:46:170688デフォルトの名無しさん
2010/09/05(日) 18:49:250689デフォルトの名無しさん
2010/09/05(日) 18:52:56基本的にはmakeファイルを作るものだと、考えているのですが
0690デフォルトの名無しさん
2010/09/05(日) 19:28:240691デフォルトの名無しさん
2010/09/05(日) 20:48:300692デフォルトの名無しさん
2010/09/05(日) 21:17:24当を得ている
0693デフォルトの名無しさん
2010/09/06(月) 18:03:56int型に入れた 00001 という数字(当然ただの1になりますが)を、
処理後にchar配列型に入れて 00001 に戻す場合、どうすれば手短に実現できるでしょうか?
今はstrlenで長さを取り、足りない回数forを回して継ぎ接ぎしているのですが。。
0694デフォルトの名無しさん
2010/09/06(月) 18:09:27四行目の説明からして文字列にしたやつを戻したいってことだよなぁ?
sscanfなりatoiなりstrtolなり好きなの使えばいいじゃん
0695デフォルトの名無しさん
2010/09/06(月) 18:56:250696デフォルトの名無しさん
2010/09/06(月) 21:48:53printf("%05d",n):
じゃないのん?
0697デフォルトの名無しさん
2010/09/06(月) 22:03:04最初にintに入れるときに桁数を別に覚えとけばいいんじゃないのか
0698デフォルトの名無しさん
2010/09/06(月) 22:15:11int n = 1;
char buf[6];
sprintf(buf, "%05d", n);
0699デフォルトの名無しさん
2010/09/06(月) 22:16:370700デフォルトの名無しさん
2010/09/06(月) 22:56:46このソースの場合、俺は
char buf[100];
とする派。
0701デフォルトの名無しさん
2010/09/06(月) 23:13:03無意味にチャレンジすることないし
0702デフォルトの名無しさん
2010/09/06(月) 23:17:42a %= 10;
ってやったらaの値は-1なんだけど、これってどのコンパイラでも保障されてる?
0703デフォルトの名無しさん
2010/09/06(月) 23:26:39CならC99より前ではされてない、しかも本当にコンパイラによって違う
C99で決められた
C++は知らね
0704デフォルトの名無しさん
2010/09/06(月) 23:30:130705デフォルトの名無しさん
2010/09/06(月) 23:36:580706デフォルトの名無しさん
2010/09/06(月) 23:50:26ごめんよ
0707デフォルトの名無しさん
2010/09/07(火) 00:36:27%05dというのが有るんですね。処理を減らす事ができました。ありがとうございました。
0708デフォルトの名無しさん
2010/09/07(火) 00:37:050709デフォルトの名無しさん
2010/09/07(火) 08:02:270710デフォルトの名無しさん
2010/09/07(火) 09:25:41そうです。だからCでは10進整定数の0は存在しません。
0711デフォルトの名無しさん
2010/09/07(火) 09:46:12残念
8進数定数の0が存在しないのでした
0712デフォルトの名無しさん
2010/09/07(火) 09:53:080713デフォルトの名無しさん
2010/09/07(火) 09:55:06だからそれが間違ってるってこと
0714デフォルトの名無しさん
2010/09/07(火) 09:58:110715デフォルトの名無しさん
2010/09/07(火) 10:06:350716デフォルトの名無しさん
2010/09/07(火) 10:12:060717デフォルトの名無しさん
2010/09/07(火) 22:12:090718デフォルトの名無しさん
2010/09/07(火) 23:10:19実行ファイル
0719デフォルトの名無しさん
2010/09/08(水) 18:37:56魔次男?
0721デフォルトの名無しさん
2010/09/09(木) 09:54:26vector<CLASS*> array;
と宣言した配列に、
CLASS obj=CLASS();
array.push_back(&obj);
という感じに要素を追加しようとするとエラーが出るんですが、
単純にポインタ型の動的配列って出来なかったりするんでしょうか?
0722デフォルトの名無しさん
2010/09/09(木) 09:55:59vectorに突っ込むのはできる
お前が別なとこで間違ってるだけ
0723デフォルトの名無しさん
2010/09/09(木) 09:57:21私の方のミスでしたか……
いろいろ試してみます!
ありがとうございました!
0724デフォルトの名無しさん
2010/09/09(木) 12:03:110725デフォルトの名無しさん
2010/09/09(木) 13:08:030726デフォルトの名無しさん
2010/09/09(木) 16:54:13というかみんな何使ってるんですか?
0727デフォルトの名無しさん
2010/09/09(木) 16:55:320728デフォルトの名無しさん
2010/09/09(木) 16:56:050729デフォルトの名無しさん
2010/09/09(木) 19:12:55C/C++(Linux上)でプロセスをデーモン化したいのですが、
手順の意味がわかりません。fork()使えばいいのがわかりましたが、
fork()の挙動がわかりません。あと、fork()がとても危険な香りがします。
http://www7a.biglobe.ne.jp/~tsuneoka/daemon/index.html
を参考にしていますが、ソースの内容でfork()の辺りが理解できません・・・。
>>726 GCCというかG++ あとVisual C++ 2010
0730デフォルトの名無しさん
2010/09/09(木) 19:24:13forkは自プロセスを複製します
忍者みたいに自分が2人に分身するわけです
そうするとforkから戻ってきたときには自分が2人いるわけです
元々の親プロセスと、新しくできた子プロセス
親プロセスの方は、forkの戻り値が子のプロセスID (1以上) になります
子プロセスの方は、forkの戻り値が0になります
(エラーの場合は -1)
ここのサンプルだと、親の方は exit で終了して、子の方はそのまま close 以下略を実行するわけです
0731デフォルトの名無しさん
2010/09/09(木) 19:25:01質問の意図がよく分からない。
forkが知りたければ"マルチプロセス fork"あたりで検索を。
0732デフォルトの名無しさん
2010/09/09(木) 19:37:320733729
2010/09/09(木) 20:00:21あぁ、自分を複製しているから、こんな奇妙な流れなんですね・・・。
直後のケース文含め、なぜこの流れなのかようやくわかりました。
どうもありがとうです。
ってあれ?
これって自己複製をループさせたら、恐ろしいことになりません?
>>732
deamon(3)ですか、探してみます・・・。
0734デフォルトの名無しさん
2010/09/09(木) 20:53:320735729
2010/09/09(木) 21:37:56daemon()使ったら、かなり簡単でした。
おかげで、スタート時に自前のサーバーを起動できます。
ありがとうございました〜〜〜。
>>734
恐ろしいですね・・・・。注意して使います・・・。
0736デフォルトの名無しさん
2010/09/09(木) 23:11:36g++(gcc) と bcc32 も併用しています。bcc32 はメッセージが日本語なのでわりと便利です。
0737デフォルトの名無しさん
2010/09/09(木) 23:14:44fork() をループに含ませてチャイルドプロセスを量産できます。パイプ機能のあるシェルをつくってみるのもいいでしょうね。
http://codepad.org/3H6b7xM6
0738デフォルトの名無しさん
2010/09/11(土) 17:48:32スタック領域に動的確保できる関数があったと思うのですが何という名前だったでしょうか
使うわけではないのですが、思い出せなくて気になります
0739デフォルトの名無しさん
2010/09/11(土) 17:57:580740デフォルトの名無しさん
2010/09/11(土) 17:59:06ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/alloca.3.html
0741デフォルトの名無しさん
2010/09/11(土) 18:03:380742デフォルトの名無しさん
2010/09/11(土) 18:06:260743デフォルトの名無しさん
2010/09/11(土) 18:08:08そうそれだありがとう
思い出せなっくてもやもやしてただけだったので、使う予定はないです
心配していただいてありがとうございます
大体gccなら可変長配列対応してるしね
0744デフォルトの名無しさん
2010/09/11(土) 18:33:24>742
0745デフォルトの名無しさん
2010/09/11(土) 18:35:270746デフォルトの名無しさん
2010/09/11(土) 18:59:060747デフォルトの名無しさん
2010/09/11(土) 23:54:07どうしてもエラーが解消されないのでご教授御願いします
エラー部は一番下のcoutの部分の様なのですが・・・
VS2010でコーディングしています
#include<iostream>
using namespace std;
class myclass{
int a;
public:
void set_a(int num);
int get_a();
};
void myclass::set_a(int num){
a=num;
}
int myclass::get_a(){
return a;
}
int main(){
myclass ob1,ob2;
ob1.set_a(10);
ob2.set_a(99);
cout<< ob1.set_a() <<"\n";
cout<< ob1.set_a() <<"\n";
return 0;
}
0748デフォルトの名無しさん
2010/09/11(土) 23:56:070749デフォルトの名無しさん
2010/09/11(土) 23:56:530750デフォルトの名無しさん
2010/09/11(土) 23:57:060751デフォルトの名無しさん
2010/09/11(土) 23:57:480752デフォルトの名無しさん
2010/09/12(日) 00:02:300753デフォルトの名無しさん
2010/09/12(日) 00:41:030754デフォルトの名無しさん
2010/09/12(日) 00:54:11尊敬した
0755デフォルトの名無しさん
2010/09/12(日) 01:02:05誰うまw
0756デフォルトの名無しさん
2010/09/12(日) 01:21:44惚れた
0757デフォルトの名無しさん
2010/09/12(日) 01:57:00天才を見つけた
0758デフォルトの名無しさん
2010/09/12(日) 01:59:150759デフォルトの名無しさん
2010/09/12(日) 02:18:25いつもの2chで安心したw
0760デフォルトの名無しさん
2010/09/12(日) 02:21:190761デフォルトの名無しさん
2010/09/12(日) 03:02:160762デフォルトの名無しさん
2010/09/12(日) 03:07:580763デフォルトの名無しさん
2010/09/12(日) 05:48:56これも(ry
0764753
2010/09/12(日) 10:08:47のはいいけどさぁ、ほどほどにしようや。
0765デフォルトの名無しさん
2010/09/12(日) 11:51:190766デフォルトの名無しさん
2010/09/12(日) 16:48:37charの1文字をstd::string化するにはどうすれば良いでしょうか
0767デフォルトの名無しさん
2010/09/12(日) 17:26:091文字だって分かりやすいよ
0768デフォルトの名無しさん
2010/09/12(日) 17:37:00tmp[0] = c; // こうして
tmp[1] = '\0'; // こうして
string s(tmp) // こうとか
0769デフォルトの名無しさん
2010/09/12(日) 17:39:13みたいなコンストラクタってなかったっけ。
0770デフォルトの名無しさん
2010/09/12(日) 17:46:00自作クラス群の共通的なメンバ関数(親抽象クラスにて宣言)があり
このクラスでは1文字を返しますが、他クラスでは2文字以上返す可能性があるため
stringで返すよう揃えたいんです。
>>769
ありました…('A')
そうか、1つめの引数を1にすれば良いんですね
string s(1,c)で生きます
0771デフォルトの名無しさん
2010/09/12(日) 19:49:19何ですか、これ?
0772デフォルトの名無しさん
2010/09/12(日) 20:16:16てかググればでてくるとおもうぞ。
0774デフォルトの名無しさん
2010/09/12(日) 21:32:40{
void setXXX();
void getXXX();
}
class Hoge
{
public:
static void setXXX();
static void getXXX();
}
あなたならば、どちらを使いますか?
0775デフォルトの名無しさん
2010/09/12(日) 21:34:380776デフォルトの名無しさん
2010/09/12(日) 21:36:500777デフォルトの名無しさん
2010/09/12(日) 22:18:13また、*.cにだけに書いた関数は、staticが無くてもstaticと同じになるんですか?
0778デフォルトの名無しさん
2010/09/12(日) 22:48:41staticの有無とヘッダファイルに書くかどうかは直接関係ありません。
また、staticがない関数はある関数と同じにはなりえません。
0779デフォルトの名無しさん
2010/09/12(日) 22:51:52> C言語ではstaticの付いている関数/変数は、ヘッダファイルに書かなくてもいいんですか?
書くことはできるけど複数ソースファイルでそれをincludeすると嫌なことが起きうる。
> また、*.cにだけに書いた関数は、staticが無くてもstaticと同じになるんですか?
ならない。
0781デフォルトの名無しさん
2010/09/12(日) 22:57:56>779
0783デフォルトの名無しさん
2010/09/12(日) 23:10:08staticには静的領域って意味もあるけど、
そのソースファイルでしか使えないって意味もあって多分にこっちの方が重要。
(だからソース間での共通項を書くincludeファイルに書くことはまずない)
0785デフォルトの名無しさん
2010/09/13(月) 14:21:17省略
}
を行うとeroor C2041 指定された文字8は基数8に適切な数字ではありませんとでます。
どうすれば良いでしょうか?
0786デフォルトの名無しさん
2010/09/13(月) 14:22:1108 → 8
にすればよいです
0787デフォルトの名無しさん
2010/09/13(月) 14:25:29返信を早くしてくださりありがとうございます。
0788デフォルトの名無しさん
2010/09/13(月) 15:47:520789デフォルトの名無しさん
2010/09/13(月) 18:19:390790デフォルトの名無しさん
2010/09/13(月) 18:21:180791デフォルトの名無しさん
2010/09/13(月) 18:41:12入門はwebの資料で済ませて、手元に置いておく資料には中級者向け以上のものを買うのオススメ
0792デフォルトの名無しさん
2010/09/13(月) 18:55:45C++のweb資料って多過ぎて、整理されたものを探すのは意外と手間
初心者こそ整理された本な気がする
0793デフォルトの名無しさん
2010/09/13(月) 19:28:50専門書で他人との相互理解を深めたいときには書籍
0794デフォルトの名無しさん
2010/09/13(月) 19:32:04これがFAに決まってる。
0795デフォルトの名無しさん
2010/09/13(月) 19:59:12名前空間とかstringstreamとか導入前の本とかには気をつけろ
0796デフォルトの名無しさん
2010/09/13(月) 20:02:27http://www.amazon.com/dp/0132479257/
0797デフォルトの名無しさん
2010/09/13(月) 22:04:02printf("%d\n", rand());
}
これを何回実行しても同じ結果しか出ないんですが
ランダム係数って言うのは「ランダムに見える特定の順番の数字を出力する関数」なんでしょうか
それとも使い方を間違ってるんでしょうか
0798デフォルトの名無しさん
2010/09/13(月) 22:05:030799デフォルトの名無しさん
2010/09/13(月) 22:05:22srand()を先に呼んどく。
0800デフォルトの名無しさん
2010/09/13(月) 22:07:010801デフォルトの名無しさん
2010/09/13(月) 22:07:410802デフォルトの名無しさん
2010/09/13(月) 22:07:42それでためしてみます
0803デフォルトの名無しさん
2010/09/13(月) 22:20:22srand(0);
printf("%d\n", rand());
}
こうですか?
同じのばかり出ますが
0804デフォルトの名無しさん
2010/09/13(月) 22:21:42srand(rand());
でやってみ
毎回違うのが出るから
0805デフォルトの名無しさん
2010/09/13(月) 22:22:140806デフォルトの名無しさん
2010/09/13(月) 22:22:44{
srand(rand());
printf("%d", rand();)
}
こんな感じで使う
0807デフォルトの名無しさん
2010/09/13(月) 22:24:05#include <stdlib.h>
#include <time.h>
int main(int ac, char **av)
{
int i;
time_t t;
time(&t);
srand(t);
for(i = 0; i < 10; i++){
printf("%d\n", rand());
}
return 0;
}
0808デフォルトの名無しさん
2010/09/13(月) 22:26:290809デフォルトの名無しさん
2010/09/13(月) 22:28:370810デフォルトの名無しさん
2010/09/13(月) 22:42:30そのため、下位のビットは上位のビットと同じくらいにランダムである。
しかし、旧版の rand() の実装や、他のシステムの現在の実装では、下位のビットが上位のビットほどランダムになっていない。
移植性を高める場合でも、精度の高い乱数が必要なアプリケーションではこの関数は使用してはいけない (代わりに random(3) を使うこと)。
0811デフォルトの名無しさん
2010/09/13(月) 22:55:330812デフォルトの名無しさん
2010/09/13(月) 23:13:24同じような流れを何度も見た気がする。
0813デフォルトの名無しさん
2010/09/13(月) 23:37:05独習→accelarated c++ はいかがでしょうか?
0814813
2010/09/13(月) 23:42:41→ http://www.amazon.co.jp/dp/4894714221/
はいかがでしょうか。c++ の前に c の本を数冊読んでおく必要はありますが。
0815デフォルトの名無しさん
2010/09/14(火) 00:04:28それではばらつかない。
質問の意図からすれば srand(time(NULL)) あたりがいいかと。
0816デフォルトの名無しさん
2010/09/14(火) 00:09:47srand(time(0));
printf("%d\n", rand());
}
こうですか?
うまくいっているみたいですが
0817デフォルトの名無しさん
2010/09/14(火) 00:11:27srand(i);
printf("%d\n", rand());
}
こうした方がいい
0818デフォルトの名無しさん
2010/09/14(火) 00:13:381秒間でループしたら同じ乱数系列しか出ないだろ
0819デフォルトの名無しさん
2010/09/14(火) 00:24:390820デフォルトの名無しさん
2010/09/14(火) 00:25:37srand() はプログラムの頭に一回実行するだけでよい。ループの中で srand() するものではない。精進せよ。
0821デフォルトの名無しさん
2010/09/14(火) 00:29:18srand(time(0));
for (i = 0; i < 10; i++) {
srand(i);
printf("%d\n", rand());
}
こういうことか
0822デフォルトの名無しさん
2010/09/14(火) 00:31:040823デフォルトの名無しさん
2010/09/14(火) 00:33:00#incllude <sys/time.h>
for (i = 0; i < 10; i++) {
struct timespec ts;
nanotime(&ts);
srand(ts.tv_nsec);
printf("%d\n", rand());
}
0824デフォルトの名無しさん
2010/09/14(火) 00:50:23だからループの中で srand() しなおす必要はない。精進せよ。
0825デフォルトの名無しさん
2010/09/14(火) 00:52:44勘違いしてた
srand(time(0));
for (i = 0; i < 10; i++) {
printf("%d\n", time(0));
}
こうか
0826デフォルトの名無しさん
2010/09/14(火) 01:01:47time() を表示してどうする?
0827デフォルトの名無しさん
2010/09/14(火) 01:03:52すげー偏ってるw
0828デフォルトの名無しさん
2010/09/14(火) 01:04:51for (i = 0; i < 10; i++) {
printf("%d\n", rand());
}
0829デフォルトの名無しさん
2010/09/14(火) 01:07:110830デフォルトの名無しさん
2010/09/14(火) 01:09:47プロセッサ時間をシードにするのは‥‥‥思ったほど偏らないかと。
0831デフォルトの名無しさん
2010/09/14(火) 01:11:380 返しても良いらしいし
0832デフォルトの名無しさん
2010/09/14(火) 02:06:330833デフォルトの名無しさん
2010/09/14(火) 02:21:48struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);
srand(ts.tv_nsec);
for (i = 0; i < 10; i++) {
printf("%d\n", rand());
}
0834デフォルトの名無しさん
2010/09/14(火) 15:23:14この場合遅延評価されてメモリ確保されないことは保障される?
0835デフォルトの名無しさん
2010/09/14(火) 15:26:28それは遅延評価とは呼ばないよ
0836デフォルトの名無しさん
2010/09/14(火) 15:30:10今やらなくてもいいことを後回しにする(この場合プッシュされるまで確保しなくてもいい)のは全部遅延評価だと思ってました
0837デフォルトの名無しさん
2010/09/14(火) 15:55:25if (b) return true; // X
if (c) return true; // Y
}
F_a( F_b(), F_c() ) という式があったときに,
1. X で b を参照している←この時点で初めて F_b() が評価される
2. もし b がtrue なら c は評価されない = F_c() は評価されない
ってのが遅延評価
0838デフォルトの名無しさん
2010/09/14(火) 20:48:38あなたは1つの関数に何個までreturn文が許せますか?
0839デフォルトの名無しさん
2010/09/14(火) 20:50:530840デフォルトの名無しさん
2010/09/14(火) 21:01:330841デフォルトの名無しさん
2010/09/14(火) 21:51:590842デフォルトの名無しさん
2010/09/15(水) 00:04:25なんこでも必要ならしかたがないでしょうね。
0843デフォルトの名無しさん
2010/09/15(水) 00:48:580844デフォルトの名無しさん
2010/09/15(水) 07:14:28例えばこんなの
class A{
public:
A *me;
void Del(){
delete me;
}
};
int main(){
A *a=new A;
a->me=a;
a->Del();
}
0845デフォルトの名無しさん
2010/09/15(水) 07:17:33できますよ。
0846デフォルトの名無しさん
2010/09/15(水) 07:18:35できるよ
ただしdelete文を実行後はメンバ変数にアクセスしちゃいけなくなる
てゆーか delete thisもできる
0847デフォルトの名無しさん
2010/09/15(水) 07:39:41エラーは出てなかったけど、意図の通りに動いてるか心配だったのでよかったです。
リスト構造のクラス作りたかったのでこれは便利ですね。
でも、次は試しに大量に確保、関数で開放しようとしたら、a[1].Del();でエラーが
出てしまいます。
a[i].me=&a[i];消してme使わずdelete thisとしても同じでエラーが出てしまいます。
何故でしょうか?
new[]で確保したのは、一つずつ開放は無理で、delete[]で一気に開放しないといけないとか?
class A{
public:
A *me;
void Del(){
delete me;
}
};
int main(){
const unsigned int f=10000;
A *a=new A[f];
for(int i=0;i<f;i++){
a[i].me=&a[i];
}
for(int i=0;i<f;i++){
a[i].Del();
}
}
0848デフォルトの名無しさん
2010/09/15(水) 07:44:33そういうことだ
0849デフォルトの名無しさん
2010/09/15(水) 08:12:11>new[]で確保したのは、一つずつ開放は無理で、delete[]で一気に開放しないといけないとか?
そうですよ。
delete this;を効果的に利用できるシーンってあんまりなくて、
行儀が悪いと言われる事もあるよ。Del()と言うメソッドを呼び出すなら、
delete this;でデストラクタ呼び出したって構わないでしょ。
それに常にヒープ領域に確保されていなければならないって事になる。
0850デフォルトの名無しさん
2010/09/15(水) 08:32:50双方向リストを作りたかったので、前後クラスの前後を指すポインタの修正をして、自分を削除。
というDel関数を作ろうとしてた。
けど、よく考えるとデストラクタにポインタ修正の処理入れるだけの方が効率よさそうですね。
0851デフォルトの名無しさん
2010/09/15(水) 13:16:55ヌル文字を含む文字列へのポインタ又は配列はその文字列の長さを予めどこかに保存しておく以外に
サイズを取得することは無理でしょうか
つまり下のような文字列の正確なサイズ取得法です
LPCTSTR str = "hoge\0hoge";
どこで終端がわかるんだって話になってかなり無理そうですが…
0852デフォルトの名無しさん
2010/09/15(水) 13:27:220853デフォルトの名無しさん
2010/09/15(水) 13:57:51ありがとうございます、でも申し訳ありませんがちょっと重要なものが抜けてました
ヌル文字を含んだ文字列と通常の文字列を一律に扱うことを考えまして
そのサイズを取得できればと考えたのです
つまり>>851のstrは"hoge\0hoge"にも"hoge"にもなりうるんです
解決策としてはすべての文字列の最後尾に\0を付けて手動的に二連ヌルにするしか無いでしょうか
0854デフォルトの名無しさん
2010/09/15(水) 14:03:58頑張っても無理があるという意味も含めて。
素直に書かない書き方はみんなの身を滅ぼす。
0855デフォルトの名無しさん
2010/09/15(水) 14:31:41文字列とは「0が2個続いたら終端」。このように定義すれば、
1 str = "hoge\0";
2 str = "hoge\0hage\0";
1も2も「通常の文字列」
当然、str*系の標準関数は使用できなくなる。文字列の定義が違うんだから当たり前だ。
0856デフォルトの名無しさん
2010/09/15(水) 14:42:30正解は文字列先頭の連続した\0と同じ数だけ\0が連続したらそこを終端とすればよいわけです
ex. \0\0\0hoge\0fuga\0\0piyo\0\0\0
これならば先頭と末尾の\0の数を増やせばどんな文字列にも対応可能です
0857デフォルトの名無しさん
2010/09/15(水) 14:45:37>解決策としてはすべての文字列の最後尾に\0を付けて手動的に二連ヌルにするしか無いでしょうか
というか、この方法で何がまずいの?
0858851
2010/09/15(水) 14:59:29やはり特殊文字列は特殊文字列として扱うようにします、ありがとうございました
>>857
全ての文字列の書き直し、文字列関数を使っている部分の書き直しの手間と
ただヌル文字含文字列が扱えるというその結果を考えてちょっとどうだろうと思いました
0859デフォルトの名無しさん
2010/09/15(水) 15:06:22何がしたいのかが全然わからない
0860デフォルトの名無しさん
2010/09/15(水) 15:12:180861デフォルトの名無しさん
2010/09/15(水) 15:19:56その方法は先頭に"\0"を置く事が出来ないのでダメ。
0862デフォルトの名無しさん
2010/09/15(水) 15:22:220863デフォルトの名無しさん
2010/09/15(水) 15:24:39判断基準の文字を\0から任意の文字に置き換えればおk
0864デフォルトの名無しさん
2010/09/15(水) 15:27:16その判断基準の文字で始まる文字列を先頭におけない。
これくらい、すぐ気付け。
0865デフォルトの名無しさん
2010/09/15(水) 15:31:14判断基準の文字を動的にかえればいい。
これくらい、すぐ気付け。
0866851
2010/09/15(水) 15:31:34とりあえずほとんどのところは置き換えられたのですが>>852も言っているような
GetPrivateProfileSection関数などで得られる特殊な文字配列に関して色々問題が考えられたんです
0867デフォルトの名無しさん
2010/09/15(水) 15:36:190868デフォルトの名無しさん
2010/09/15(水) 15:55:18文字列としてのNULは \0X (Xは\0がいくつ続くか)
と記憶しておいて,文字列が欲しい時は
\0X を展開した文字列を生成する参照関数でもつくっとけ
0869デフォルトの名無しさん
2010/09/15(水) 15:57:40終端の\0\0の後に偶然\0が入ってたら死人が出る
0870デフォルトの名無しさん
2010/09/15(水) 16:14:580871デフォルトの名無しさん
2010/09/15(水) 16:16:41why?
0872デフォルトの名無しさん
2010/09/15(水) 16:20:21ごめん勘違いした
0873デフォルトの名無しさん
2010/09/15(水) 16:22:08何のためにサイズ用の変数捨てたんだろうってならないんだろうか
0874デフォルトの名無しさん
2010/09/15(水) 16:23:57パスカル式?
0875デフォルトの名無しさん
2010/09/15(水) 17:36:12COMのBSTR
0876デフォルトの名無しさん
2010/09/15(水) 18:20:380877デフォルトの名無しさん
2010/09/15(水) 19:56:470878デフォルトの名無しさん
2010/09/16(木) 00:39:570879デフォルトの名無しさん
2010/09/16(木) 01:59:320880デフォルトの名無しさん
2010/09/16(木) 11:07:220881デフォルトの名無しさん
2010/09/16(木) 19:23:55VehicleNo = data->getFleetVehicles().size();
//Number of vertices within the problem
DemandNo = data->getVertexs().size()-1;
//Getting the capacity of the first vehicle in the fleet vehicles map
VehicleCapa = data->getFleetVehicles().begin().value()->getCapacity();
というプログラムがあったのですが、これは何を行っているのですか?
正直、何故2番目が size()-1 か、や begin().value() も何故この順序なのかもわからないレベルです
説明か、手がかりになることだけでも教えていただけるとありがたいです
スレ違いでしたらすいませんが、よろしくお願いします
0882デフォルトの名無しさん
2010/09/16(木) 19:30:230883デフォルトの名無しさん
2010/09/16(木) 20:06:41{
priv->setOutputFile(file,rotate,handle_qt_messages);
}
関数の中身を見てみると、1行しか書いていない事が多いのですが
これは、実装の変更をしやすくするためですか?
0884デフォルトの名無しさん
2010/09/16(木) 20:08:20申し訳ありません、区切りとしては
void VRPAlgorithm::setData( LogVRPData* data ){
//Number of vehicles within the problem
VehicleNo = data->getFleetVehicles().size();
//Number of vertices, not including the depot, within the problem
DemandNo = data->getVertexs().size()-1;
//Getting the capacity of the first vehicle in the fleet vehicles map. It is assumed that all fleet vehicles have the same capacity
VehicleCapa = data->getFleetVehicles().begin().value()->getCapacity();
//allocating demand memory
DemandQ = (int*)calloc( DemandNo+1, sizeof(int) );
//setting up DemandQ values
QMap< uint, GKLogVertex* >::const_iterator iter, iterEnd;
iterEnd = data->getVertexs().end();
for( iter = data->getVertexs().begin(); iter != iterEnd; ++iter ){
//trying to convert a GKLogVertex into a GKClient
GKClient * client = dynamic_cast<GKClient*>( iter.value() );
if( client != NULL ){//the vertex is a client
DemandQ[iter.key()] = data->getClientProperty( client ).getDemand();
}else{//the vertex is a depot
DemandQ[iter.key()] = 0;
}
}
となっていて、プログラムの一番始めは
#include "VRPAlgorithm.h"
#include "LogVRPData.h"
#include "GKFleetVehicle.h"
#include "GKClient.h"
となっています
0885デフォルトの名無しさん
2010/09/16(木) 20:23:27何のプログラムかわからんので…
一般的なテクニックの話でいうと、
size()-1するのは、配列の最後の添字を取り出したいときによくやる。
aが配列だとして、
sizeof( a ) == 3
だとすると、
a[0], a[1], a[2]が存在する。
3-1で、最後の2が出る。
begin().value()とかはもうその先の実装がどうなっているかわからないので、
答えようがないんだけど、よくあるパターンとしては、
getFleetVehicles()が返してくるオブジェクトがイテレータで(配列みたいなもの)
その中に入っている複数のデータを順番に取り出したい時に、begin()という
メソッドを呼び出すと、オブジェクトの配列を返してくる。
で、そのオブジェクトがvalue()というメソッドを持っていて、
おそらくは、そのメソッドはそのオブジェクトが抱えている要素の数を返してくる、
ってなことでしょう。
雰囲気的にはVCか?
Document-Viewっぽいなw
0886デフォルトの名無しさん
2010/09/16(木) 21:10:49丁寧に説明してくれてありがとうございます
全部で600行くらいあるので、一部だけしか載せられなくて申し訳ありません
プログラムは最適化問題のもので、計算ソフトの関係でVCで書き直しているみたいです
GKFleetVehicles.hやGKClient.hというのが元々ソフトに組み込まれている(?)ので、
その計算ソフトの方で車両の数などの条件を決め、それを読み込む(?)部分です
参考書の「クラスメンバのアクセス」などを読んでもほぼ素人なので全くわからない状態でして
もし参考になるサイトや本、C++のどの部分の知識が必要か等のアドバイスがあれば
何でもいいので教えていただけると助かります
言い訳になりますが、素人で質問の仕方も悪くて本当にすいません
0887デフォルトの名無しさん
2010/09/16(木) 21:27:50data->getFleetVehicles().begin().value()->getCapacity();
の構文が理解出来ないとかそういうレベルの話だったのか?
0888デフォルトの名無しさん
2010/09/16(木) 21:36:52恥ずかしいですがそうです
本当に下らない質問で申し訳ないです
教えていただけないでしょうか?
0889デフォルトの名無しさん
2010/09/16(木) 21:45:25その返り値のオブジェクトのメンバ関数beginを呼び出して・・・・・ってことを繰り返してる
と考えるのが妥当だろう
0890デフォルトの名無しさん
2010/09/16(木) 22:48:15どうもありがとうございます
何回も答えていただいて感謝してます
教えてくれたことをもとに考えてみます
0891デフォルトの名無しさん
2010/09/16(木) 23:56:31つーかだね、とりあえずCは書けるの?
まずCを覚えないと、C++なんて無理だぞ?
0892デフォルトの名無しさん
2010/09/17(金) 00:20:530893デフォルトの名無しさん
2010/09/17(金) 01:54:12JavaとCとアルゴリズムを講義で基本だけ学んだだけです
C++の本を読みながらやっているのですが
どうも合わないようで正直困ってます
もう一度見直します
0894デフォルトの名無しさん
2010/09/17(金) 02:32:06そうとは言い切れない部分もあるけどな
確かにC++の資料はC知ってる前提のが結構多いが
そもそもは別の言語だし、Cと違って高級言語らしいやり方も可能なわけで
数としては少ないが、説明順が
iostream&文字列リテラル→string→制御構文→vector→関数定義→参照渡し→その他ライブラリ→配列→char[]→ポインタ
みたいな感じの書籍もある、知った時はちょっとしたカルチャーショックだった
0895デフォルトの名無しさん
2010/09/17(金) 02:33:34うーん、じゃあ、まず、「C++ 入門」とかで検索して、自分で読めそうな入門サイトを選びなよ。
(とりあえずgoogleの上位から選んでおけば、どれにあたってもまず問題ない)
で、とりあえず、
クラスを定義して、そこからインスタンスを生成して、メソッドを呼び出す
というところまでは、はしょらずに勉強しなさい。
そこまでいく間にわからないことがあれば、それをこのスレで質問してもいいし、
そこまで行ったら、また戻ってきて、改めてこのスレの自分の質問と回答ながめて、
理解できない所を質問すればいいと思う。
0896デフォルトの名無しさん
2010/09/17(金) 02:38:20確かに。
実際、俺はphpしか組めない奴に、
boostのライブラリとかインストールしておいてやって、それらの使い方だけを教えこんで
プログラムを書かせたことがあるw
まあ、多少手直しもしたけど、大筋は動いたわさw
でも、この場合に限っては、VCでのソースを読まなきゃならないってものだから、
Cがわからない、ポインタわからないだと話にはならないだろうな、と思って。
0897デフォルトの名無しさん
2010/09/17(金) 09:12:33map<char*, int>
を使えばいいと分かるのですが、逆に電話番号から名前を調べるときはどうするのがいいですか
やっぱり逆向きのマップも作って置いた方がいいですか?
0898デフォルトの名無しさん
2010/09/17(金) 09:14:410899デフォルトの名無しさん
2010/09/17(金) 09:17:36find_ifすればいいんじゃね?
0900897
2010/09/17(金) 09:27:35http://www.kab-studio.biz/Programing/Codian/STL/06.html
> 同じく std::map::find() を使った検索も、キーに対してのみ行われます。
ということなのでfind()はダメです。
キー、バリューとあったときにキーではなくバリューで検索したい
0901デフォルトの名無しさん
2010/09/17(金) 10:21:49ためしてないけど。
チェックするための関数の引数は const std::pair<K,V>& になるかな?
0902デフォルトの名無しさん
2010/09/17(金) 10:23:42const std::pair<char*,int>&
0903デフォルトの名無しさん
2010/09/17(金) 11:11:430904デフォルトの名無しさん
2010/09/17(金) 12:36:21{
・・・
}
これってC限定なの?
けっこう便利だと思うんだけどなぜかC++では通らない・・・
0905デフォルトの名無しさん
2010/09/17(金) 12:42:340906デフォルトの名無しさん
2010/09/17(金) 12:42:520907デフォルトの名無しさん
2010/09/17(金) 12:49:230908デフォルトの名無しさん
2010/09/17(金) 16:46:40便利?
自分は引数を2回書くので面倒だと思った
0909デフォルトの名無しさん
2010/09/17(金) 16:58:53型の名前が長いのを一回で済むって話だろ
ばかじゃね
0910デフォルトの名無しさん
2010/09/17(金) 17:33:01頭大丈夫か?
だからその代わりに変数を2回づつ書かないといけないんだろ。
上の例なら変数6回も書いてるぞ。
そもそも長いタイプ名が嫌なら、短いタイプ名にすればいいんじゃないのか。
あとタイプ名が長いのが好みなら、変数名も長いのが普通だろ。
変数名が長ければ余計にタイプ量増えるぞ。
で、関数ごとにイチイチ書き方変えるなんて面倒で持ち悪いぞ。
昔はこの書き方しかできなかったら、そう書いてただけで、
今の書き方ができるのに、わざわざ昔の書き方で書く人なんていなよ。
で、どこが便利なんだ?
0911デフォルトの名無しさん
2010/09/17(金) 18:01:00VC2010でコンパイルしたstatic libraryを
VC2008でリンクしようとするとエラーが出るのですが、
1>LibTest_d.lib(WiiLibrary.obj) : warning LNK4229: 無効なディレクティブ '/FAILIFMISMATCH:_MSC_VER=1600' が見つかりました。無視します。
1>LibTest_d.lib(WiiLibrary.obj) : warning LNK4229: 無効なディレクティブ '/FAILIFMISMATCH:_ITERATOR_DEBUG_LEVEL=2' が見つかりました。無視します。
1>LibTest_d.lib(WiiLibrary.obj) : error LNK2019: 未解決の外部シンボル "class std::error_category const & __cdecl std::iostream_category(void)"
根本的にこれは無理なことなのでしょうか?
2010→2010では成功しているので基本的な設定は正しいはずです
0912デフォルトの名無しさん
2010/09/17(金) 18:13:34変数宣言もコンマ演算子で列記できるんだから
統一的な観点から仮引数も同じ型の場合コンマでつなげられればいいのに
0913デフォルトの名無しさん
2010/09/17(金) 18:27:21boost::vectorやboost::arrayなどの配列(固定にせよ、可変にせよ)
で、はじめは0なのですが、こちらをフレキシブルに、例えば1から始まるようにできませんか?
もしくはそのような機能を備えたコンテナなどありましたら教えてくださいませ。
0914デフォルトの名無しさん
2010/09/17(金) 20:31:43ちょっとやりたいことが不明瞭だが、
1、どうしても1からはじめたければ0を無視する
2、配列に追加していきたいならば、
vector<int> Array;
Array.reserve(30);//30この領域確保
Array.push_back(2);//追加
3、2だとあくまでも配列だから、どこまで追加してもパフォーマンスが落ちない
list<>の双方向リンクリストを使う
やりたいことと合致していればうれしい
0915デフォルトの名無しさん
2010/09/17(金) 20:43:49{
std::size_t value;
At(std::size_t v) : value(v) {}
};
template <class C> typename C::reference operator | (C & c, At at)
{
return C[at.value - 1];
}
template <class C> typename C::const_reference operator | (C & c, At at)
{
return C[at.value -1];
}
int main(void)
{
std::vector<int> v(10);
v|At(1) = 100; // v[0] = 100;
v|At(11) = 1100; // v[10] = 1100;
return 0;
}
0916デフォルトの名無しさん
2010/09/17(金) 20:49:250917デフォルトの名無しさん
2010/09/17(金) 20:51:47そんなことはないんじゃないか?
0918デフォルトの名無しさん
2010/09/17(金) 21:19:060919デフォルトの名無しさん
2010/09/17(金) 23:36:20で
どっちに統一されたの?
0920デフォルトの名無しさん
2010/09/18(土) 00:09:12int * const array = allocated;
or
int allocated[size];
int * const array = allocated - 1;
後者だと、厳密には実装依存なのかな。大抵巧くいくはずだけど。
0921デフォルトの名無しさん
2010/09/18(土) 00:11:36どこもおかしくないと思うのだが
0922デフォルトの名無しさん
2010/09/18(土) 01:17:52で帰ってくるのは0(NULL)じゃないんでしょうか?
0923デフォルトの名無しさん
2010/09/18(土) 01:19:02いや、文法的には通るでしょ。
で、普通のコンパイラは1バイト確保されると思う。
0924デフォルトの名無しさん
2010/09/18(土) 01:20:39スッキリしました。
ありがとうございました。
0926デフォルトの名無しさん
2010/09/18(土) 01:42:24事前にサイズのチェックをします。(`・ω・´) シャキーン
0927デフォルトの名無しさん
2010/09/18(土) 08:49:13後者は配列の一つ前の場所を算出しているが、その際にアンダーフローが起きない保証はない。
実際、そんな環境はないと思うが規格上は拙い。
0928デフォルトの名無しさん
2010/09/18(土) 10:42:340929デフォルトの名無しさん
2010/09/18(土) 10:46:310930デフォルトの名無しさん
2010/09/18(土) 10:50:50動的だと出来るんだっけか?
0931デフォルトの名無しさん
2010/09/18(土) 12:57:35最大限のメモリ確保をしようとしたのかもしれんね
0932929
2010/09/18(土) 13:19:28int main() {
40064c: 55 push %rbp
40064d: 48 89 e5 mov %rsp,%rbp
400650: 48 83 ec 10 sub $0x10,%rsp
int* p = new int[-1];
400654: 48 c7 c7 fc ff ff ff mov $0xfffffffffffffffc,%rdi
40065b: e8 c8 fe ff ff callq 400528 <operator new[](unsigned long)@plt>
400660: 48 89 45 f8 mov %rax,-0x8(%rbp)
400664: b8 00 00 00 00 mov $0x0,%eax
}
400669: c9 leaveq
40066a: c3 retq
40066b: 90 nop
40066c: 90 nop
40066d: 90 nop
40066e: 90 nop
40066f: 90 nop
こんなのでました(gcc-4.3.2 x86_64-linux)
0933デフォルトの名無しさん
2010/09/19(日) 00:30:56最大値が-1.#QNAN0e+000
最小値が-0.000000e+000と表示されたのですがどういう意味なのでしょうか
ソース
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("long doubleの最大値 %le\n", LDBL_MAX);
printf("long doubleの最小値 %le\n", -LDBL_MIN);
return 0;
}
0934デフォルトの名無しさん
2010/09/19(日) 00:38:37long double は %Le を使え
0935デフォルトの名無しさん
2010/09/19(日) 01:19:39ヘッダのクラス順序でこんがらがっていたのを(どこかに書いてあったとおりに)テンプレートクラスにしただけでほぼ解決しました
これってどういう仕組みなんでしょうか
(このテンプレートクラスは名ばかりのテンプレートクラスでテンプレート引数はまったく使っていませんし
最終的にはtypedefしてテンプレートであることさえも隠してます)
0936デフォルトの名無しさん
2010/09/19(日) 01:23:290937デフォルトの名無しさん
2010/09/19(日) 01:36:23クラスであることに変わりないのに
0938デフォルトの名無しさん
2010/09/19(日) 02:12:22コンパイルの側面から見るとまったく別の過程を通ってるような気がしたんです
例えばテンプレート関数は普通に推論された型の関数が量産されるだけらしいのですが(間違ってたらすみません)
テンプレートクラスでは上に書いたようにテンプレートであるただそれだけで
読み込み順序的に問題のあったコンパイルが通るようになる、
いわば関数のプロトタイプ宣言(ちょっと違うか)みたいな働きが確認されたんです
もちろんクラスの前方宣言やポインタでは解決できなかったクラス内部でも他関連クラスのメンバが入り組んだ問題でした
これはどこがどう変わったゆえなんだろうかと思ったんです
0939デフォルトの名無しさん
2010/09/19(日) 02:31:540940デフォルトの名無しさん
2010/09/19(日) 02:44:230941デフォルトの名無しさん
2010/09/19(日) 02:54:21確かに調べてみたらコンパイル時の時間差について書かれているのを見つけました
どうやらそこら辺が通常のクラスとは違うようですね、さらに調べてみます
0942933
2010/09/20(月) 12:23:59%Leに変更してやってみましたが結果変わらず
どうすれば解決できますか?
ソース
#include <stdio.h>
#include <float.h>
int main(void)
{
printf("long doubleの最大値 %Le\n", LDBL_MAX);
printf("long doubleの最小値 %Le\n", -LDBL_MIN);
return 0;
}
0943デフォルトの名無しさん
2010/09/20(月) 12:28:13for(j=0;j<16;j++){
for(i=0;i<16;i++){
d1[j]^=GF[e1[j][i]];
d2[j]^=GF[e2[j][i]];
}
}
0944デフォルトの名無しさん
2010/09/20(月) 12:31:42デジタル時計作ってるんだがカーソル移動(?)がうまくいかない
コレどこが間違ってるんだろうか
#include <stdio.h>
#include <time.h>
#include <conio.h>
int main(void)
{
time_t present_tm;
struct tm *my_time;
char *now_time;
while (!kbhit()) {
time(&present_tm);
my_time = localtime(&present_tm);
now_time = asctime(my_time);
printf("\x1b[4;1H");
printf("now_time = %s\n", now_time);
}
return 0;
}
0945デフォルトの名無しさん
2010/09/20(月) 12:34:15例えばキャスト以外は同じ内容の hoge(char* ptest)とhoge(void* ptest) という関数があり
後者は関数内でreinterpret_castでchar*に変換します
そうすると実行速度は遅くなるんでしょうか?
どこかでコンパイラ云々とあって変わらないようなことが書いてあったんですが
どちらか分からなくて
0946デフォルトの名無しさん
2010/09/20(月) 12:41:14time ./a.exe>1
time gpg --chipher-algo AES -z 0 -passphraze aaaaa -ca 1
0947デフォルトの名無しさん
2010/09/20(月) 13:05:59time ./a.exe>1
time gpg --chipher-algo AES -z 0 -passphraze aaaaa -ca 1
0948デフォルトの名無しさん
2010/09/20(月) 16:23:01printf("\x1b[4;1H");
のようなエスケープシーケンスはコマンドプロンプトでは動かないから別の方法でカーソル動かしてください
0949デフォルトの名無しさん
2010/09/20(月) 16:56:45迷ったら実測。
まぁ、そのケースなら観測するまでもなく最適化されたコードは同じになりそうだ。
0950デフォルトの名無しさん
2010/09/20(月) 16:58:29どこで比較しているのか判らない。
gpgというプロセスと等価のa.exeを作ったから処理時間を比較したいと言うことなら、
同じ入力に対して同じ出力が得られるように条件をそろえれば宜しかろ。
0951デフォルトの名無しさん
2010/09/20(月) 21:31:17クラスのコンストラクタに、(x,y)を指定して、クラスのpublic変数に int num[x][y];を作りたい
やったこと
class Cul{
public :
int *num;
Cul( int x,int y ){
num = new int[x][y];
}
}
おこったエラー
error C2440: '=' : 'int (*)[1]' から 'int *' に変換できません。
要はクラスが作成されるとき、指定されたx、yのサイズの2次元配列を動的に確保したい
っていうことなんですが
0952デフォルトの名無しさん
2010/09/20(月) 21:35:13具体的にどうすればいいのか教えてください
0953デフォルトの名無しさん
2010/09/20(月) 21:38:46xの方は動かせるがyは固定
int (*num)[10] = new int [x][10]; みたいに
それかポインタのポインタとして擬似的に二次元配列を表現するしか無理
0954デフォルトの名無しさん
2010/09/20(月) 21:41:36public :
int *num;
Cul( int x,int y ){
num = new int[x * y];
}
}
としてアクセスは
num[i][j]に相当するのがnum[i * y + j]
でごまかすのが無難かなぁ
0955デフォルトの名無しさん
2010/09/20(月) 21:41:49なるほど……
できれば両方指定したかったのですが、とりあえず多めにサイズをとることで対処したいと思います
ありがとうございました
0956デフォルトの名無しさん
2010/09/20(月) 21:42:00{
public:
Cul( int x, int y )
{
num = new int*[ x ];
for( int i = 0; i < x; ++ i )
{
num[ i ] = new int[ y ];
}
}
int** num;
};
0957デフォルトの名無しさん
2010/09/20(月) 21:44:05おお!
num[get_num( i , j )]
get_num(int i, int j ){
return i * y + j;
}
みたいな感じにしようと思います。
ありがとうございました
0958デフォルトの名無しさん
2010/09/20(月) 21:45:540959デフォルトの名無しさん
2010/09/20(月) 21:45:54ああ、そうやればいいんですね
みなさんありがとうございました!
0960デフォルトの名無しさん
2010/09/20(月) 21:49:490961デフォルトの名無しさん
2010/09/20(月) 21:51:160962デフォルトの名無しさん
2010/09/20(月) 22:07:10vector<vector<int> > num(x, vector<int>(y));
0963デフォルトの名無しさん
2010/09/20(月) 22:13:19自分でテンプレート化して作ってもいんじゃね?
Array2D<int> intArray(30,20);
みたいな
0964デフォルトの名無しさん
2010/09/21(火) 02:53:11よくわからない状況になってconst全部削除して解決した
constは他人が触れる表面上の部分だけに使うものだと思う
0965デフォルトの名無しさん
2010/09/21(火) 03:29:44お前C++0xに行って苦労するよきっと
0966デフォルトの名無しさん
2010/09/21(火) 03:37:100967デフォルトの名無しさん
2010/09/21(火) 03:40:470968デフォルトの名無しさん
2010/09/21(火) 03:44:260969デフォルトの名無しさん
2010/09/21(火) 03:54:410970デフォルトの名無しさん
2010/09/21(火) 06:32:51宿題ではないのでこちらで聞きたいのですが、
宿題スレのアップローダーはこちらでも使っても良いのでしょうか?
よろしくお願いします
0971970
2010/09/21(火) 07:00:42こちらのスレでコードパットを使って質問するのはダメなのでしょうか
よろしくお願いします
0972デフォルトの名無しさん
2010/09/21(火) 07:08:130973デフォルトの名無しさん
2010/09/21(火) 07:11:29別に構いませんが。つーか、Codepadをなんだと思っているんだか。
0974デフォルトの名無しさん
2010/09/21(火) 07:55:49http://codepad.org/SoL0o3uc
の27行目がわかりません
「error C2440: '=' : 'const GKTimeDuration' から 'int' に変換できません」と出ました
const_castを使うのかな?と思いましたがどうすればよいかわかりません
http://codepad.org/pYLWB08b
がGKClientProperty.hです
初心者なので質問の仕方もおかしいかもしれませんが
よろしくお願いします
0975デフォルトの名無しさん
2010/09/21(火) 08:02:06GKTimeDurationがどんな型なのかこっちで分からんから、そのヘッダーもよろしく
0976デフォルトの名無しさん
2010/09/21(火) 08:17:460977デフォルトの名無しさん
2010/09/21(火) 08:45:13遅くなってしまい大変申し訳ありません
http://codepad.org/gbnTFw8C
がGKTimeDurationです
>>976
卒論ではないですが、理解を深めるために
先輩がCで書いたものをC++で書き直せと言われました
ソフトの方がC++で書かれていて、GKClientProperty.hなどはソフトに入っているものです
プログラミング苦手なのですがそーゆー班に割り振られてしまって困ってます
0978デフォルトの名無しさん
2010/09/21(火) 08:52:520979デフォルトの名無しさん
2010/09/21(火) 08:57:02見てくださってありがとうございます
どーゆーことでしょうか?
0980デフォルトの名無しさん
2010/09/21(火) 09:12:560981デフォルトの名無しさん
2010/09/21(火) 10:12:17#include <string.h>
int main(int ac, char **av)
{
union {
char hiragana[4];
int code;
} ch;
strcpy(ch.hiragana, "あ");
printf("%c\n", ch.hiragana);
printf("%02x %02x\n", ch.code & 0x00FF, ch.code >> 8 & 0x00FF);
return 0;
}
0982デフォルトの名無しさん
2010/09/21(火) 10:21:040983デフォルトの名無しさん
2010/09/21(火) 10:31:580984デフォルトの名無しさん
2010/09/21(火) 11:05:53こんなことするなら int と union する意味が無い
エンディアン違う環境行ったらどうするつもりなんだ
0985デフォルトの名無しさん
2010/09/21(火) 11:08:07? &n ? ,オォウヲォ
l~~~~~~~l
(C++) & (C++) , i[N] == ??? ,
/ \√ ~~~~~~~~~~~~~~~~~~~~~~~~
MmMmMmMmMmMmMmM
0986デフォルトの名無しさん
2010/09/21(火) 11:10:080987デフォルトの名無しさん
2010/09/21(火) 11:25:37遣りたいことを先ず整理すること。
CのコードをC++に1vs.1に修正するのか0から書き直すのか最初の方針を決めること。
1vs.1に修正するなら先ずは動くことを最優先に、一つずつ修正する。
どんな話の流れでGKTimeDuration型を使うことになったのかがよく判らんが、
それを使うのなら1vs.1に修正するのは諦めた方がいい。
0988デフォルトの名無しさん
2010/09/21(火) 11:50:37知識はC#,Actionscript,javascriptです
やりたい用途はDLL作成です
0989デフォルトの名無しさん
2010/09/21(火) 11:57:570990デフォルトの名無しさん
2010/09/21(火) 12:20:320991デフォルトの名無しさん
2010/09/21(火) 12:25:150992デフォルトの名無しさん
2010/09/21(火) 12:28:030993デフォルトの名無しさん
2010/09/21(火) 12:28:50どんな仕様のdllを作りたいかによる。
それによって自ずとCかC++のどちらかが決定される
0994デフォルトの名無しさん
2010/09/21(火) 12:32:08ありがとうございます
用途は秀丸エディタのマクロから利用するdllと変換モジュールの作成です
0995デフォルトの名無しさん
2010/09/21(火) 12:41:100996デフォルトの名無しさん
2010/09/21(火) 12:48:35!? &n ? ,オォウヲォ
l~~~~~~~l
(C++) & (C++)
/ \
MmMmMmMmMmMmMmM
0997デフォルトの名無しさん
2010/09/21(火) 13:18:340998デフォルトの名無しさん
2010/09/21(火) 13:58:23C#でDLL作ったのですが呼び出せなかったんです
0999デフォルトの名無しさん
2010/09/21(火) 13:59:53おまえ前も秀丸のプラグインをC#でつくって呼び出せないとかさわいでたろw
1000デフォルトの名無しさん
2010/09/21(火) 14:28:59胸がアツウなるな
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。