【初心者歓迎】C/C++室 Ver.63【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2009/01/09(金) 20:07:31ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.62【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1229095398/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
◆ソースのインデントについて
半角やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのが最も良いですが、
直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
0002デフォルトの名無しさん
2009/01/09(金) 20:13:56前スレが終わってしまったのでもう一度貼ります
997 名前:デフォルトの名無しさん[sage] 投稿日:2009/01/09(金) 19:53:52
失礼します
コンストラクタについての質問なのですが
C → B → A の順で自身のコンストラクタを呼び出すことは可能でしょうか?
可能であればどのように書けばよいか教えてください
下の例は簡略化しているので全パターン書いても大したことはないですが
実際のものはもう少し引数が増えます
class hoge
{
int m_foo, m_bar;
public:
hoge(int foo, int bar) : m_foo(foo), m_bar(bar){} // A
hoge(int foo) : hoge(foo, 100-foo){} // B
hoge(void) : hoge(rand()){} // C
};
※これはコンパイルエラーになります
0003デフォルトの名無しさん
2009/01/09(金) 20:21:17初期化用の関数を作るといいよ。
0004デフォルトの名無しさん
2009/01/09(金) 20:49:00hoge(int foo = rand(), int bar = 100 - foo) : m_foo(foo), m_bar(bar){}
0005デフォルトの名無しさん
2009/01/09(金) 20:54:17無理なのですね
分かりました。ありがとうございます
ということは、代替手段としては
次のようにするしかないということですね
class hoge
{
int m_foo, m_bar;
void init(int foo, int bar) { m_foo=foo; m_bar=bar; }
void init(int foo) { init(foo, 100-foo); }
void init(void) { init(rand()%101); }
public:
hoge(int foo, int bar) { init(foo, bar); } // A
hoge(int foo) { init(foo); } // B
hoge(void) { init(); } // C
};
0006デフォルトの名無しさん
2009/01/09(金) 20:58:21わざわざinitをオーバーロードする必要はないと思うけど
0007デフォルトの名無しさん
2009/01/09(金) 20:58:46コンパイルエラーになりました
g++ -c -o hoge.o hoge.cpp
hoge.cpp:7: error: `foo' was not declared in this scope
make: *** [hoge.o] Error 1
コンパイラのバージョンはこれです
g++ (GCC) 3.4.5 (mingw special)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00087
2009/01/09(金) 21:00:29#include<cstdlib>
class hoge
{
int m_foo, m_bar;
public:
hoge(int foo = rand(), int bar = 100 - foo) : m_foo(foo), m_bar(bar){}
};
0009デフォルトの名無しさん
2009/01/09(金) 21:04:32知らんかった
0010デフォルトの名無しさん
2009/01/09(金) 21:10:540011デフォルトの名無しさん
2009/01/09(金) 21:20:11下側のクラス hoge の三番目のコンストラクタを実現する方法はありますか?
あるとすれば、どのように書けばいいのでしょうか?
#include<cstdlib>
class base // このクラスは変更できないものとする
{
int m_foo, m_bar;
public:
base(int foo, int bar) : m_foo(foo), m_bar(bar) {}
};
class hoge : public base
{
public:
hoge(int foo, int bar) : base(foo, bar) {}
hoge(int foo) : base(foo, 100-foo) {}
hoge() : base(int tmp=rand()%101, 100-tmp) {} // このコンストラクタはどのように書けばよいですか?
};
0012デフォルトの名無しさん
2009/01/09(金) 21:24:16hoge(int foo = rand() % 101) : base(foo, 100 - foo) { }
でいいと思う。
0013デフォルトの名無しさん
2009/01/09(金) 21:28:20できました
ありがとうございます
0014デフォルトの名無しさん
2009/01/09(金) 22:20:080015デフォルトの名無しさん
2009/01/09(金) 22:29:110016デフォルトの名無しさん
2009/01/09(金) 22:32:260017デフォルトの名無しさん
2009/01/09(金) 22:54:18(int*)(p->num);
((int*)p)->num);
これは全部同じですか?
if( a==b && a==c)
if( (a==b) && (a==c) )
これも同じですか?
0018デフォルトの名無しさん
2009/01/09(金) 22:56:29はい全部同じです
優先順位ぐらい自分で調べましょう
0019デフォルトの名無しさん
2009/01/09(金) 22:57:44おいw
違うじゃねぇかw
0020デフォルトの名無しさん
2009/01/09(金) 22:59:26ちげぇwwwwwwwwwwwwww w
0021デフォルトの名無しさん
2009/01/09(金) 23:06:22違うwwwww
3行目は明らかにエラーだろwwwwww
0022デフォルトの名無しさん
2009/01/09(金) 23:41:18>>18
>>18
0023デフォルトの名無しさん
2009/01/10(土) 00:26:000024デフォルトの名無しさん
2009/01/10(土) 00:33:240025デフォルトの名無しさん
2009/01/10(土) 01:01:570026デフォルトの名無しさん
2009/01/10(土) 01:05:040027デフォルトの名無しさん
2009/01/10(土) 01:06:42strcmp の戻り値は 正数 か ゼロ か 負数 かのいずれかなので
1 とか -1 であることは保証されてないです
0028デフォルトの名無しさん
2009/01/10(土) 01:06:540029デフォルトの名無しさん
2009/01/10(土) 01:07:160030デフォルトの名無しさん
2009/01/10(土) 01:09:21規格では無いよ。
0031デフォルトの名無しさん
2009/01/10(土) 01:35:150032デフォルトの名無しさん
2009/01/10(土) 02:04:23もっと勉強しなくてはと思わせるようなアルゴリズムを紹介してください。
0033デフォルトの名無しさん
2009/01/10(土) 02:05:270034デフォルトの名無しさん
2009/01/10(土) 02:08:26動画圧縮とか
0035デフォルトの名無しさん
2009/01/10(土) 02:19:24これどうやって宣言するんですか?
numを変数にしたいんです
0036デフォルトの名無しさん
2009/01/10(土) 02:21:30そのままでおk
0037デフォルトの名無しさん
2009/01/10(土) 02:32:12寝言は寝て言え。
>>35
std::vector< std::complex<double> > x(num);
003836
2009/01/10(土) 02:43:37後でサイズを変えたいと言う意味か!
0039デフォルトの名無しさん
2009/01/10(土) 03:21:28寝言は寝て言え。
0040デフォルトの名無しさん
2009/01/10(土) 03:30:50コンパイルできるでしょ?
#include<complex>
int main(void){
int num=5;
std::complex<double> x[num];
x[0].real()=0.0;
x[0].imag()=1.0;
return 0;
}
0041デフォルトの名無しさん
2009/01/10(土) 09:12:02どのように切り抜けるか知っていますか。下記例。
#include<stdio.h>
int main(){
FILE *fp;
char a[256];
char *b[4];
char *c,*d;
int i;
if((fp=fopen("address.dat","r"))==NULL)exit(1);
c=fgets(a,256,fp);
printf("%s",c);
d=fgets(a,256,fp);
printf("%s",d);
fclose(fp);
}
これを
c=fgets(a,256,fp);
d=fgets(a,256,fp);
printf("%s",d);
printf("%s",c);
のような順序にすると同じ値が出てしまいます。(1行目が消えて、ファイルの2行目の出力になる)
0042デフォルトの名無しさん
2009/01/10(土) 10:10:450043デフォルトの名無しさん
2009/01/10(土) 10:20:14C99に対応したコンパイラならできるかもね
0044デフォルトの名無しさん
2009/01/10(土) 10:23:57C99 ならテンプレートが使える?!
0045デフォルトの名無しさん
2009/01/10(土) 10:27:060046デフォルトの名無しさん
2009/01/10(土) 11:24:560047デフォルトの名無しさん
2009/01/10(土) 14:22:040048デフォルトの名無しさん
2009/01/10(土) 14:29:010049デフォルトの名無しさん
2009/01/10(土) 14:30:31std::vector の方が色々出来て便利だし。
0050デフォルトの名無しさん
2009/01/10(土) 14:35:53色んなテンプレートが破綻するので入れられない
0051デフォルトの名無しさん
2009/01/10(土) 15:00:34vectorみたいなコンテナクラスで生成時可変長の配列なら入るんじゃなかったかと。
0052デフォルトの名無しさん
2009/01/10(土) 15:06:51以下をコンパイルすると
17: error: class ‘Ext’ does not have any field named ‘Base’
17: error: no matching function for call to ‘Base<int, int>::Base()’
12: note: candidates are: Base<T1, T2>::Base(T1) [with T1 = int, T2 = int]
7: note: Base<int, int>::Base(const Base<int, int>&)
というエラーになるのですが、
テンプレートで指定したクラスをコンストラクタの引数に
指定してはいけないのでしょうか?
005352
2009/01/10(土) 15:07:27class Base {
protected:
int num;
T2 value;
public:
Base(T1 val) : num(0), value((T2)val) { }
};
class Ext : public Base<int, int> {
public:
Ext(int val) : Base(val) { }
};
int main(int ac, char *av[])
{
Ext myext(1);
return 0;
}
0054デフォルトの名無しさん
2009/01/10(土) 15:08:49そうなの?
もうvector::resize()しなくていいの?
0055デフォルトの名無しさん
2009/01/10(土) 15:15:43VC++2008では通る
0057デフォルトの名無しさん
2009/01/10(土) 15:18:35もしかして、arrayのことを言っているなら、それは違うと言っておく。
中身はただの配列で、つまり固定長。
005851
2009/01/10(土) 15:21:28005952
2009/01/10(土) 15:36:36コンストラクタの定義が間違っていました。
0060デフォルトの名無しさん
2009/01/10(土) 21:45:260061デフォルトの名無しさん
2009/01/10(土) 21:57:160062デフォルトの名無しさん
2009/01/11(日) 01:23:53C#でwindowsアプリ開発経験あり。
そんな俺がC++を学ぶとしたら何かお勧めの書籍とかサイトはありますか?
0063デフォルトの名無しさん
2009/01/11(日) 01:31:410064デフォルトの名無しさん
2009/01/11(日) 01:38:16だったら基本はすぐ理解して書けるだろうからC++特有の罠を勉強した方がいいな
とりあえずEffective C++を読むがいい
0065デフォルトの名無しさん
2009/01/11(日) 01:48:06�d
明日本屋で探してきます。
0066デフォルトの名無しさん
2009/01/11(日) 02:21:51俺は、この正月にC,Java,ruby知っててC++に手を出したが
More Effective C++はわからんかった。英語のせいもあるけどw
結局、独習C++のお世話になってます。
コンストラクタの引数とかテンプレートとか
なかなか変態的だよね。
0067デフォルトの名無しさん
2009/01/11(日) 14:52:30今、次のような関数をエクスポートしようとしているのですが、うまくできません
*.h部
__declspec(dllexport)
void
debug_message(
const TCHAR *format,
...
);
*.cpp部
__declspec(dllexport)
void
debug_message(
)
{
0068デフォルトの名無しさん
2009/01/11(日) 14:56:16extern "C"
とか?
0069デフォルトの名無しさん
2009/01/11(日) 15:06:10以下はヘッダファイルの一部です。
/* テーブル化したsin() */
double sin_table(double radian);
……
#ifdef USE_TABLE
#define sin sin_table
#endif
上記のように、テーブルを使う際にUSE_TABLEを定義すればsin_table()をsin()と書けるようにしたいのですが、
こういう書き方は元々のsin()を隠してしまうのですべきでは無いのでしょうか?
0070デフォルトの名無しさん
2009/01/11(日) 15:10:20#define SIN sin_table
#else
#define SIN sin
#endif
みたいに別のものを使うべきだな。
0072デフォルトの名無しさん
2009/01/12(月) 13:26:30どうしたらいいですか?? 子を2つ持つ場合です。
if(head->right!=NULL && head->left!=NULL){
y=head->left;
if(y->right==NULL && y->left==NULL)
{
strcpy(head->data,y->data);
free(y);
head->left=NULL;
}
w=head;
while(1){
if(y->right!=NULL){
w=y;
y=y->right;
}
else
break;}
strcpy(head->data,y->data);
if(y->left!=NULL)
{w->right=NULL;
w->right=y->left;
free(y);
}
else{
free(y);
w->right==NULL
}}
0073デフォルトの名無しさん
2009/01/12(月) 13:37:510074デフォルトの名無しさん
2009/01/12(月) 14:11:35Cを勉強しているんですが、ポインタと構造体が何を読んでも分からなくて
質問させてください。
http://codepad.org/rnSOFLEU
このようなソースで、とても皆さんにはお目汚しかも知れませんが
独学で色々とやっていて至らない点だらけなんですが、
実行してみると、main関数ではAA[0]とAA[1]に入って欲しい値が入っているのに
関数に飛ぶと、AA[0]にAA[1]がはいってしまうんです・・・
良ければどなたか教えていただけませんでしょうか・・・
0075デフォルトの名無しさん
2009/01/12(月) 14:15:09ソースはコンパイルできるように貼ってくれ。それだけ見ても、 head とか y とか data とか
わからんものが多すぎる。
0076デフォルトの名無しさん
2009/01/12(月) 14:18:21> ulint A[1]={0},B[1]={0};
...
> for(i=0;i<2;i++){
> A[i] = a & 0xffff;
> B[i] = b & 0xffff;
これだけで死亡確定だな。
0077デフォルトの名無しさん
2009/01/12(月) 14:25:4532bitを16bitにして別々に分けたかっただけなんですが・・・
一応printfでもちゃんと分けれたんですが・・・
なぜいけないんでしょうか・・・
0078デフォルトの名無しさん
2009/01/12(月) 14:29:58A は要素数 1 の配列だから A[0] まではアクセスできるけど A[1] はダメ。
0079デフォルトの名無しさん
2009/01/12(月) 14:38:03ありがとうございます!
A[2]だけどA[0]から始まるので、勘違いしてました。
後、ポインタと構造体なんですが、やはり色々試してみても
main関数でAA[0]の値としたの関数でのAA[0]の値が変わってしまうんですが・・・
こちらの原因は一体何なんでしょうか・・・
0080デフォルトの名無しさん
2009/01/12(月) 14:54:09char型(1byte)の配列にデータを格納して,その配列4つ分のデータを
int型(4byte)の変数に代入するにはどういうコードにすれば良いでしょうか.
よろしくご教授お願いします.
C言語についての私のレベルはなんとかポインタを理解している程度です.
0081デフォルトの名無しさん
2009/01/12(月) 14:55:48ポインタを使えばできることも分かるはずだ。
それが分からないなら、ポインタを理解できてはいない。
あまり見栄を貼るものではない。
char hoge[4] = { 0x12, 0x34, 0x56, 0x78 };
int n = *(int*)hoge;
0082デフォルトの名無しさん
2009/01/12(月) 14:59:040083デフォルトの名無しさん
2009/01/12(月) 15:00:170084デフォルトの名無しさん
2009/01/12(月) 15:03:18正直、あんたにそのプログラムは未だ早すぎる。もっと配列について勉強してくれ。
>>81
それはやってはいけないコードの一例。
hogeがint境界に置かれる保証はないぞ。
# 大抵は大丈夫だが。
0085デフォルトの名無しさん
2009/01/12(月) 15:08:35締め切りが明日なんです・・・
今日中にどうにかしないとやばいんです・・・
しかも、17時からバイトで帰ってこれるのが0時過ぎなんで・・・
0086デフォルトの名無しさん
2009/01/12(月) 15:11:28ありがとうございます.
"*"を一つだけ使用するポインタについては動作を理解できるのですが,
例示して頂いたような"*"を2回使うポインタについては,内容を
理解できないのが実情です.
明解C言語入門編を教科書に勉強しているのですが,"*"二つ使いのポインタ
について理解するのにお勧めの本,又はwebを教えていただけないでしょうか?
>82,83さん
想定しているのはビッグエンディアンです
>84さん
確実に動作補償されるコードをよろしければ教えていただけないでしょうか?
0087デフォルトの名無しさん
2009/01/12(月) 15:11:29宿題は宿題スレへ。他のスレにも同じようなコード貼ってる同じ穴の狢がいるようだから、
同病相哀れむなり何なり、好きにしてください。
0088デフォルトの名無しさん
2009/01/12(月) 15:12:10確実に動作「補償」されるようなコードはありません。
0089デフォルトの名無しさん
2009/01/12(月) 15:13:040090デフォルトの名無しさん
2009/01/12(月) 15:13:1546行目が嘘付いてる。kだけインクリメントしておいて、sはそのままだ。
0091デフォルトの名無しさん
2009/01/12(月) 15:16:11確かに!!
動作保証するコードのことでした^^;
0092デフォルトの名無しさん
2009/01/12(月) 15:16:28>char型(1byte)の配列にデータを格納して,その配列4つ分のデータを
>int型(4byte)の変数に代入するにはどういうコードにすれば良いでしょうか.
そのまま書けば宜しい。
char foo[] = {0x12, 0x34, 0x56, 0x78}; //char型の配列にデータを格納
int bar; // int型の変数を確保し、
char * pBar = (char *) & bar; // その場所をchar *としてpBarにポイントさせる。
for (unsigned ic = 0; ic < sizeof(bar); ++ic) pBar[ic] = foo[ic]; //その場所に、配列をコピー
0093デフォルトの名無しさん
2009/01/12(月) 15:21:42聞きながらでも自分でどうにかしたかったので・・・
>>90さん
*s=k;
で*sのk番目って事じゃないのでしょうか・・・
何をやっても関数のAA[0]番目にmainのAA[1]が着てしまいます・・・
0094デフォルトの名無しさん
2009/01/12(月) 15:25:06s=F.AA; で、sはAA[0]をさしている。
*s=k; はAA[0]にkを代入する。
0095デフォルトの名無しさん
2009/01/12(月) 15:31:20では下の関数でs -> AA[0]で上でAA[0]に入れたところを指しているわけでは無いのですか?
mainでいれたAA[0]の値と下の関数で出てくるAA[0]の値が同じにならない原因が分からないのですが・・・
0096デフォルトの名無しさん
2009/01/12(月) 15:33:43*sっていうのは常にAA[0]と同じところを指している。
たぶんs[k]と書きたいのだと思われる。
0097デフォルトの名無しさん
2009/01/12(月) 15:34:56いやでも解るようになるとおもうんだ
0098デフォルトの名無しさん
2009/01/12(月) 15:37:44> では下の関数でs -> AA[0]で上でAA[0]に入れたところを指しているわけでは無いのですか?
そうではない。
main内の*s = k;および2つの*s = c & 0xffff;は、すべてAA[0]に代入している。
sがAA[0]を指したままだからだ。
tas内でAA[0]を見たときは、2つ目の*s = c & 0xffff;で代入された値が入っている。
0099デフォルトの名無しさん
2009/01/12(月) 15:37:460100デフォルトの名無しさん
2009/01/12(月) 15:42:50>そのまま書けば宜しい。
>char foo[] = {0x12, 0x34, 0x56, 0x78}; //char型の配列にデータを格納
>int bar; // int型の変数を確保し、
>char * pBar = (char *) & bar; // その場所をchar *としてpBarにポイントさせる。
>for (unsigned ic = 0; ic < sizeof(bar); ++ic) pBar[ic] = foo[ic]; //その場所に、配列をコピー
詳しい解説ありがとうございます.
教えて頂いたコードで試してみました.
int barを出力してみたところ”2018915346”という値が入っていました.
ですが,intに入れたのは 0x12, 0x34, 0x56, 0x78なので,期待する値としては
”305419896”になると思います.
この違いは何故生じるのでしょうか?
0101デフォルトの名無しさん
2009/01/12(月) 15:44:280102デフォルトの名無しさん
2009/01/12(月) 15:48:05リトルエンディアンでした.
助言頂いた皆様ありがとうございました.
0103デフォルトの名無しさん
2009/01/12(月) 15:51:58305419896=0x12345678
0104デフォルトの名無しさん
2009/01/12(月) 15:55:58宿題なら宿題板行けといわれ・・・
世知辛いです・・・
>>96さん
理解力無くてすみません・・・
ということは、どこででもs[k]と書けば、そのアドレスの数値を取り出せるって事ですか?
>>98さん
なるほど!*sで指定したアドレスの順番に従ってk=0ならs=0番目のところ
k=1ならs=1になると思ってました。
分かりやすく説明してくださって有難うございます!
後、色々な板で詳しく丁寧に教えてくださった皆様有難うございます。
それぞれの板でお礼したかったですけど、マルチになっちゃうみたいなんで
ここでお礼させてもらいます。
有難うございました。
0105デフォルトの名無しさん
2009/01/12(月) 17:16:59それともstdafx.hで統一して問題ないんですか?
0106デフォルトの名無しさん
2009/01/12(月) 17:18:160107デフォルトの名無しさん
2009/01/12(月) 17:33:03関数 "public: virtual void * __thiscall CMyClass::`scalar deleting destructor'(unsigned int)" (??_GCMyClass@@UAEPAXI@Z) で
参照されました。
このエラーはなにがいけないんでしょうか?
0108デフォルトの名無しさん
2009/01/12(月) 17:44:20ソース内に構文としては正しそうに見える、勘違いによる間違いがある。
それ以上はソースを見ないとはっきりしないと思う。
# エスパーならどんな間違いかを推定できそうだけれど。
0109デフォルトの名無しさん
2009/01/12(月) 17:46:19virtualみたいだから、仮想デストラクタで=0でもつけただけだとか。
0110デフォルトの名無しさん
2009/01/12(月) 18:05:17ありがとう!
0111デフォルトの名無しさん
2009/01/12(月) 19:39:55エスパーワラタw
0112デフォルトの名無しさん
2009/01/12(月) 19:42:550113デフォルトの名無しさん
2009/01/12(月) 19:44:27リンカが「シンボルが見つからない」って言ってて
アンマングリングされた名前(デストラクタ)も示してくれてるんだから。
コンパイル通ってリンクエラーなら、宣言だけで実装がないとしか考えられない。
あと外部ライブラリでlibを指定してないとかもあるけどね。
0114113
2009/01/12(月) 20:04:19>>113は108や111宛てだ。
質問者(おそらく初心者)はともかく、108がこの程度でエスパーとか言い出すのが不思議過ぎるよ。
0115111
2009/01/12(月) 20:20:170116デフォルトの名無しさん
2009/01/13(火) 04:43:57俺スコープ使うのばっかで、全くnewとかしてないんだけど、これからアプリがどんどんでかくなると思うと不安になってきた
0117デフォルトの名無しさん
2009/01/13(火) 07:53:24環境によるけど、コンパイラやリンカのマニュアルに何か書いてあることが多い。
0118デフォルトの名無しさん
2009/01/13(火) 17:02:230119デフォルトの名無しさん
2009/01/13(火) 19:01:410120デフォルトの名無しさん
2009/01/13(火) 19:30:11> MB単位で指定可能
おいおい。
0121デフォルトの名無しさん
2009/01/13(火) 19:32:040122デフォルトの名無しさん
2009/01/13(火) 22:38:12実行時に動的に増えたりしないの?
0123122
2009/01/13(火) 22:43:240124デフォルトの名無しさん
2009/01/13(火) 22:53:19WindowsやLinuxなどのOSの場合、初期サイズはうんと小さくて、
そこから増えていく(必要に応じて確保される)。その上限が>>119。
0125デフォルトの名無しさん
2009/01/13(火) 22:57:32int宣言100万個も保持するソフトなんて作ろうと思ってそうそうできるもんじゃない
0126デフォルトの名無しさん
2009/01/13(火) 23:04:541MBなんだから、4バイトint換算で高高25万個だ。
うっかりヒープに取らずにスタックに取れば簡単に溢れるサイズでしかないよ。
0127デフォルトの名無しさん
2009/01/13(火) 23:22:05if (エラーチェック) {
MessageBox(エラーメッセージ);
func(); // 自分自身呼び出し
return;
}
このまえ↑みたいなコードを見た。
エラーだったらメッセージ出して、再度処理させるみたいな。
まあ、ひらすたOKボタン押し続けるやつはいないだろうけど、これでいいのかって感じ。
0128デフォルトの名無しさん
2009/01/14(水) 00:03:59末尾再帰なら最適化で単純なループになる可能性は高い。
0129デフォルトの名無しさん
2009/01/14(水) 00:11:340130デフォルトの名無しさん
2009/01/14(水) 12:30:35typedef std::vector localvector;
localvector<int> v;
というような書き方がしたいのですが。
0131デフォルトの名無しさん
2009/01/14(水) 13:06:50できません。
貼ってあるコードを見た感じだと意味無いんだけど、なんでそんなことがしたいの?
目的によっては代替方法があるかもしれない。
0132デフォルトの名無しさん
2009/01/14(水) 14:05:52自己クラス含め特定のクラスからのみの変更を受け入れるような場合、
アクセス関数を定義するしかないですか?
自己クラス以外から変更したいときは、アクセス関数をprivateにしておいてfriendを使うみたいな。
0133デフォルトの名無しさん
2009/01/14(水) 16:41:19引数にテンプレートクラスを受け取るテンプレートクラス
(例えばコンテナラップなテンプレートクラス)を書くときに
template<template<class> class T>な記述だと引数の個数などで
統一しにくい場合が多いので、何かもっと汎用性のある方法無いかと思いまして。
0134デフォルトの名無しさん
2009/01/14(水) 17:29:43みたいな感じで何とかするしかねぇんじゃねえの
0135デフォルトの名無しさん
2009/01/14(水) 17:38:36IDirectMusicSegment8 *m_Segment[50];
質問�@
これをクラス内のデフォルトコンストラクタで初期化する場合は
for(DWORD i = 0; i < 50; i++) {
m_Segment[i] = NULL;
}
以外にどんな方法がありますか?
-------------------------------------
質問�A
クラスのprivate部分で
IDirectMusicSegment *m_Segment;
で宣言して
デフォルトコンストラクタ部分ではNULLで初期化
初期化する関数で
m_Segment = new ???[50]
メモリを確保できると思ったのですが???の部分をIDirectMusicSegmentにしても
できませんでした。
newでメモリを確保する場合はどうやればいいですか?
----------------------------------------------
先輩方レスよろしくお願いします
0136デフォルトの名無しさん
2009/01/14(水) 17:50:57つ[std::fill]
あと、ただ「できない」じゃなく、エラーが出たならエラーメッセージを貼れ。
0137デフォルトの名無しさん
2009/01/14(水) 17:55:28IDirectMusicSegment(というよりIUnknownとその派生すべて)は、
実装を持っていないインタフェース(C++的には抽象クラス)なのでnewできない。
どこかにIDirectMusicSegmentへのポインタを得る方法があるはずだから、それ使え。
0138デフォルトの名無しさん
2009/01/14(水) 18:33:40ありがとうございます
>どこかにIDirectMusicSegmentへのポインタを得る方法があるはずだから、それ使え。
探してみます〜
0139デフォルトの名無しさん
2009/01/14(水) 20:59:51---------------------------------------------
class BaseActor {
};
class MeshActor : virtual public BaseActor {
};
class SpriteActor : virtual public BaseActor {
};
class MainActor : public SpriteActor, public MeshActor {
};
int main() {
MainActor* pActor = new MainActor();
BaseActor* pBase = (BaseActor*)pActor;
MainActor* p = (MainActor*)pBase; //エラー!!
delete pActor;
}
-------------------------------------------------------------
で、コンパイルエラーメッセージは
..\src\cppTest.cpp:23: error: cannot convert from base 'BaseActor' to derived type 'MainActor' via virtual base 'BaseActor'
と出てしまいます。ですが、やりたいことは 「//エラー」の行のようなことなのです。
質問は、ひし形の基本クラスのポインタ(上記の例では pBase)のみがわかっている状況で、
そのポインタから、ひし形以降の派生クラスの型にダウンキャストできないのでしょうか、
上記の例では pBase から最初の pActor のようなポインタ変数がほしいのだが無理なのか。ということです。
いろいろ検索してみましたが、「どうやっても無理!」か否かが明確にわかりません。
どなたかご教授お願いいたいます。
0140デフォルトの名無しさん
2009/01/14(水) 21:31:300141デフォルトの名無しさん
2009/01/14(水) 21:39:27dynamic_cast しる。
ただし、仮想関数が最低でも1つは必要。
0142デフォルトの名無しさん
2009/01/14(水) 21:40:20大して気にする必要はないがね。
0143デフォルトの名無しさん
2009/01/14(水) 21:41:22○ データ型 (void (*)(char*)) の観点からは (*p)() と p() とではどちらが自然な書き方ですか?
○ if 文以下で定数式を使って関数を呼び出すことはできませんか?可能ならば,関数の処理内容を16進でダンプしたいのです
#include <stdio.h>
void func(char* str) { printf("%s\n",str); }
int main(void)
{
void (*p)(char*) = func;
func("call func()"); // call func()
(*p)("call (*p)()"); // call (*p)()
p("call p()"); // call p()
printf("%x\n",func); // 実行するといつも 80483d4
printf("%x\n",p); // 上と同じ
if (func == (void (*)(char*))0x80483d4) {
0x80483d4("call 0x80483d4()"); // test.c:21: error: called object '134513620' is not a function
(*0x80483d4)("call 0x80483d4()"); // test.c:22: error: invalid type argument of 'unary *' (have 'int')
(void (*)(char*))0x80483d4("call 0x80483d4()"); // test.c:23: error: called object '134513620' is not a function
*(void (*)(char*))0x80483d4("call 0x80483d4()"); // test.c:24: error: called object '134513620' is not a function
}
}
0144143
2009/01/14(水) 21:46:54今やってみたら,後ろの方は↓であっさりコンパイルできました.すみませんOTL
(*(void (*)(char*))0x80483d4)("call (*(void (*)(char*))0x80483d4)()")
0145デフォルトの名無しさん
2009/01/14(水) 21:47:32C の規格では、関数呼び出し演算子は以下の2通りの使い方が可能であると規定されている。
関数(引数)
関数ポインタ(引数)
つまり、どちらでも構わない。
個人的には (*p)(); とか冗長で読み辛いので p(); の方が好きだが、
関数ポインタであることを強調した方が良いという考え方の人なら (*p)(); の方が好きだろうな。
0146143
2009/01/14(水) 21:51:27また,いまやってみると,↓もコンパイル通りました.
((void (*)(char*))0x80483d4)("call ((void (*)(char*))0x80483d4)()");
(*p)() と p() までは C の約束で同義として捉えていたのですが
((void (*)(char*))0x80483d4)() と (*(void (*)(char*))0x80483d4)() までもが同じというのは..どうもとっつけません...
0147デフォルトの名無しさん
2009/01/14(水) 21:56:29関数(引数) → (*(void (*)(char*))0x80483d4)()
関数ポインタ(引数) → ((void (*)(char*))0x80483d4)()
何か問題でもあるか?
0148デフォルトの名無しさん
2009/01/14(水) 22:08:19データ型が *(void (*)(char*)) → 関数(引数)
データ型が void (*)(char*) → 関数ポインタ(引数)
ということですか?
だとすると func は関数なので,そのデータ型は *(void (*)(char*)) でいいんですか?
あと,
int* p = malloc((size_t) sizeof(int)); // 仮に 0xff が返ったとする
*p = 10;
のときに
*p(=10) と p(=0xff) は違うというのは,全く無関係な世界の話し..ということでいいのですか?
0149デフォルトの名無しさん
2009/01/14(水) 22:11:110150デフォルトの名無しさん
2009/01/14(水) 22:13:000151デフォルトの名無しさん
2009/01/14(水) 22:16:36typedef すると分かるが、
typedef void foo(char*); とした時、
foo* は関数ポインタになる。
だから、foo は関数を表す型である。
もし foo が関数ポインタ型なら、
foo* は関数ポインタへのポインタ型となるからね。
>全く無関係な世界の話
まあそうだな。
関数型の値を関数ポインタ型の変数に代入しようとすると、
自動的に関数ポインタ型へと変換される。
このあたりは、配列とポインタの関係に似ている。
0152デフォルトの名無しさん
2009/01/14(水) 22:30:08処理系が関数呼び出し演算子 () を見つける
↓
() の前にある式のデータ型を確認する
↓
そのデータ型が「関数」かまたは「関数ポインタ」であれば,それに対応する関数を呼び出す
「関数」のデータ型 → void (char*) // キャスト不可
「関数ポインタ」のデータ型 → void (*)(char*)
ということですね
> 関数型の値を関数ポインタ型の変数に代入しようとすると、
> 自動的に関数ポインタ型へと変換される。
納得です.すっきりしました.どうもありがとうございます
0153デフォルトの名無しさん
2009/01/14(水) 22:38:50自分用のチラシの裏.スレ汚しスマソ
(*p)() // *p は関数型 void (char*)
p() // p は関数ポインタ型 void (*)(char*)
(*(void (*)(char*))0x80483d4)() は関数型へのキャスト?
((void (*)(char*))0x80483d4)() は関数ポインタ型へのキャスト
0154デフォルトの名無しさん
2009/01/14(水) 22:39:430155デフォルトの名無しさん
2009/01/14(水) 22:41:44#include <iostream>
#include <typeinfo>
void foo() { }
void (*p)();
int main() {
std::cout << typeid(foo).name() << std::endl;
std::cout << typeid(p).name() << std::endl;
std::cout << typeid(*p).name() << std::endl;
}
出力
FvvE
PFvvE
FvvE
*p はやっぱり関数型じゃねえか。
0156デフォルトの名無しさん
2009/01/14(水) 22:42:30を試したらわかるんでないか
0157デフォルトの名無しさん
2009/01/14(水) 22:43:27一旦関数ポインタ型に変換されてから
また * が作用して関数型に戻るんでないかい?
0158デフォルトの名無しさん
2009/01/14(水) 23:11:45printf("%p\n", func);
printf("%p\n", &func);
printf("%p\n", p);
printf("%p\n", *******p);
うろ覚えだけど、
関数型は値を評価すると自動的にアドレス(関数ポインタ型)に変換されるので、
関数ポインタ型を間接参照で関数型にしてもまた自動的にアドレスに変換される
(関数ポインタ型の間接参照は実質的に意味をなさない)
だったかな
0159デフォルトの名無しさん
2009/01/14(水) 23:13:50右辺値に変換すると関数ポインタ型の値になる。
0160デフォルトの名無しさん
2009/01/14(水) 23:28:38C/C++の式の世界には「関数」は存在できない
生の関数が出現すると即座にその関数ポインタに変換される
だがsizeofとtypeidの中は関数が関数として存在できる数少ない例外的な場所になってる
だからtypeidすると「関数型」を見ることは出来るが、外でそれを使うことは出来ない
(ちなみにもう一つは「単項&演算子のオペランドになる時」=結局行き着く先はポインタ)
0161デフォルトの名無しさん
2009/01/14(水) 23:32:37いい加減な事を言うなよ。
関数は左辺値であるから、
左辺値を要求する所に使えば関数は関数のまま存在できるし、
typedef void hoge();
hoge& r = foo;
そもそも関数の使い方で最も代表的な関数呼び出しでは
関数が関数のまま扱われているだろう。規格的に考えて。
0162デフォルトの名無しさん
2009/01/14(水) 23:39:40そりゃ関数の参照だからだな。関数の参照は存在できるよ
hoge f = foo;みたいに関数そのものを作ろうとするとfは関数ポインタになるよ
あと関数呼び出し演算子のオペランドは関数ポインタだから
r()と呼び出せるのは関数の参照から関数のポインタに暗黙変換されるから
0163デフォルトの名無しさん
2009/01/14(水) 23:41:07規格読め。
関数呼び出し演算子のオペランドは関数あるいは関数ポインタと規定されている。
0164デフォルトの名無しさん
2009/01/14(水) 23:41:480165デフォルトの名無しさん
2009/01/14(水) 23:43:46() のオペランドが関数ポインタだけとすると不都合がある。
0166デフォルトの名無しさん
2009/01/15(木) 00:01:34どこにそんなこと書いてあるんだ?
6.5.2.2 Function calls
The expression that denotes the called function shall have type pointer to function
returning void or returning an object type other than an array type.
で、注にはこう書いてる
Most often, this is the result of converting an identifier that is a function designator.
関数呼び出し演算子がさも「関数」に適用できてるかのように見えてるのは、
実際には関数から暗黙変換された関数ポインタに適用されてるんだ
0167デフォルトの名無しさん
2009/01/15(木) 00:18:58ごめん
0168デフォルトの名無しさん
2009/01/15(木) 00:36:23それって「a.foo()」で一つの構文じゃないの?
「a.foo」に関数呼び出し演算子を適用すると解釈するなら「a.foo」って何になるの
0169デフォルトの名無しさん
2009/01/15(木) 07:14:410170デフォルトの名無しさん
2009/01/15(木) 18:14:35char *p; /* ポインタ変数宣言 */
char wk;
p = &abc[0];
と
p = abc;
は同じですか?
0171デフォルトの名無しさん
2009/01/15(木) 18:45:010172デフォルトの名無しさん
2009/01/15(木) 19:10:19分かりやすいサイトなどご存じないでしょうか?
スレ違いでしたら申し訳ないです
(それと2月18日にC言語検定2級を受けるのですが
特に抑えておいたほうがいいポイントはありますか?)
0173デフォルトの名無しさん
2009/01/15(木) 19:47:25十六進数から二進数への変換はわかるよな?
その逆もわかるよな?
ANDとORとNOTの意味はわかるよな?
右シフト、左シフトもわかるよな?
全部わかってるならビット演算を全部わかってることになるから大丈夫
0174デフォルトの名無しさん
2009/01/15(木) 20:14:08それだけ
0175デフォルトの名無しさん
2009/01/15(木) 20:14:32ならず者にはポインタを、聖なるものには列挙体を
アラベスクに幸あれ
0176デフォルトの名無しさん
2009/01/15(木) 20:54:12お手軽な方法ってないでしょうか?
.NetのXmlSerializerみたいな感じで。(別にXMLじゃなくても良いです)
環境はVC++2008 Expressです。
よろしくお願いいたします。
0177デフォルトの名無しさん
2009/01/15(木) 20:58:18参照だとかポインタだとか、他のオブジェクトの依存関係がどうなってるかは設計者しかしらんことだ。
一律に単純にやる方法は無いと思う。
0178デフォルトの名無しさん
2009/01/15(木) 21:01:020179デフォルトの名無しさん
2009/01/15(木) 21:19:23やっぱそうですか。自分でがりがり書くことにします。
>>178
serializationあたりでしょうか?
状況によって役に立つようでしたら使ってみます。
ともかくありがとうございます。
0180デフォルトの名無しさん
2009/01/15(木) 21:44:510xf003 だったら 0x0ffc ですけど
0 → f
f → 0
c → 3
3 → c
って感じでいいんですか?
0181デフォルトの名無しさん
2009/01/15(木) 21:54:130x0 = 0000b → 1111b = 0xF
0xC = 1100b → 0011b = 0x3
あってるけど、分からなきゃ一度2進数に変えた方がいい
0182デフォルトの名無しさん
2009/01/15(木) 21:58:37都合よくCで説明されているので
http://ja.wikipedia.org/wiki/%E3%83%93%E3%83%83%E3%83%88%E6%BC%94%E7%AE%97
0183デフォルトの名無しさん
2009/01/15(木) 22:00:00ありおがとうございます
0184デフォルトの名無しさん
2009/01/15(木) 22:03:11> ありおがとうございます
ありおwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
0185デフォルトの名無しさん
2009/01/15(木) 22:29:370186デフォルトの名無しさん
2009/01/15(木) 22:48:320187デフォルトの名無しさん
2009/01/15(木) 22:51:11だがしかし・・・ ++ の仕様が期待通りではないかもしれない。( >> で読み出しているので)
もし期待通りのものでなかったなら、
簡単に作れるので自分で作ってみてもいいかと。
0188デフォルトの名無しさん
2009/01/15(木) 22:53:540189デフォルトの名無しさん
2009/01/15(木) 22:55:09<boost/spirit/iterator/file_iterator.hpp>が読み取り専用でランダムアクセスできるという触れ込み。
http://www.boost.org/doc/libs/1_37_0/libs/spirit/classic/doc/file_iterator.html
0190デフォルトの名無しさん
2009/01/15(木) 22:58:05char *pt1, *pt2;
pt1 = *st;
pt2 = *(st + 7);
printf("%c\n", (*pt1) + 1);
出力される文字がoなのですが30分考えてもなんでか分かりません・・・
教えていただけませんか (*pt1) で nをさして + 1 で次のe だと思ったのですが・・
0191デフォルトの名無しさん
2009/01/15(木) 22:59:38つistreambuf_iterator
0192デフォルトの名無しさん
2009/01/15(木) 23:01:01*pt1の段階で、*を剥がしまくってもはやnという文字そのものと化している。
0193デフォルトの名無しさん
2009/01/15(木) 23:01:45そういうことだったのか!!!
ありがとうございました
かなりスッキリしましたw
0194デフォルトの名無しさん
2009/01/15(木) 23:03:49なるほど。いいものがあるんだな。
0195デフォルトの名無しさん
2009/01/15(木) 23:09:46普通は読み取った部分が欲しいはずなんだけど、これってどうなってるの?
0196デフォルトの名無しさん
2009/01/15(木) 23:10:340197デフォルトの名無しさん
2009/01/15(木) 23:14:50*pt1は'n'なので、'n'+1で'o'
0198デフォルトの名無しさん
2009/01/15(木) 23:29:28copyとかtransformとかfor_eachとか読み取ったのが捨てられて構わないアルゴリズムに活路を見出すんだ。
0199デフォルトの名無しさん
2009/01/16(金) 05:01:52戻ってこられるように元の場所を保持し続けたらいつかは限界がくると思うんですが
0200デフォルトの名無しさん
2009/01/16(金) 05:20:280201デフォルトの名無しさん
2009/01/16(金) 05:23:020202デフォルトの名無しさん
2009/01/16(金) 06:01:04全体が無効になるんですか?それとも使用している関数内で無効になるんですか?
0203デフォルトの名無しさん
2009/01/16(金) 06:05:20保持するのに使うメモリ容量がわかりませんが、32bit使うとしたら、1Mまで再帰中に変数を使わなかったとして
250k階層まで深くできるってことですか?
0204デフォルトの名無しさん
2009/01/16(金) 06:06:080205デフォルトの名無しさん
2009/01/16(金) 06:09:31例外が発生しそうな部分を囲むってあるんですが、場所がわかるなら1行をtryで囲めばいいですよね?
mainの次のネストで囲って全プログラムに適応した方が2か所以上例外が出る場合は面倒がないし、1回で書ける
とかいう理由で使えばいいんでしょうか?
0206デフォルトの名無しさん
2009/01/16(金) 07:20:37typedef std::vector<T *> pointers<T>;
pointers<int> int_ptrs;
ということはできませんか?
0207デフォルトの名無しさん
2009/01/16(金) 07:27:071行を囲むような try は、たぶん適切な使い方じゃない。
一般的なコンソールアプリケーションだと main() にひとつ try を
置くだけで十分なことがほとんど。
C++ FAQ "[17.13] I have too many try blocks; what can I do about it?"
http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.13
こっちも参考になるかもしれない。
C++ FAQ "[17.12] Exception handling seems to make my life more difficult; clearly I'm not the problem, am I??"
http://www.parashift.com/c++-faq-lite/exceptions.html#faq-17.12
0208デフォルトの名無しさん
2009/01/16(金) 07:33:43無理
0209デフォルトの名無しさん
2009/01/16(金) 07:34:52>>133
↓こんなのが使えるかもしれない。テンプレートメタ関数ってやつね。
template<typename T>
struct vector_of { typedef std::vector<T> type; };
vector_of<int>::type int_ptrs;
0210デフォルトの名無しさん
2009/01/16(金) 08:31:07×適応
○適用
0211デフォルトの名無しさん
2009/01/16(金) 11:41:14>>134
0212デフォルトの名無しさん
2009/01/16(金) 14:32:59class X {
public:
void show() { std::cout << "X" << std::endl; }
};
class Y : public X {
public:
void show(int) { std::cout << "Y" << std::endl; }
};
int main()
{
Y y;
y.show();
}
ってしたらこんぱいるできないんですがなんでですか?
0213デフォルトの名無しさん
2009/01/16(金) 14:48:290214デフォルトの名無しさん
2009/01/16(金) 15:04:49オーバーライドされたから。
y.X::show();
0215デフォルトの名無しさん
2009/01/16(金) 15:05:06Y::show によって X::show が隠されるから。
両者は別物で、両方をまたがってオーバーロード解決はできない
0216デフォルトの名無しさん
2009/01/16(金) 15:08:56class Y : public X {
public: using X::show;
(略)
};
というように書けば、Yの中でshowがX::showを隠蔽していても、X::showが選択肢に追加される。
return 0;
0217デフォルトの名無しさん
2009/01/16(金) 15:32:101.ファイルの有無を確認する方法はありますか?
Cでは読み込み専用のファイルオープンでファイルの存在確認した後上書き確認の表示してましたが、C++も同様(ifstreamで確認)ですか?
2.int型を16進バイナリで出力したい
std::ofstream ofs_out( filename, std::ios::out | std::ios::binary );
oofs_output << std::setw(4) << std::setfill('0') << std::hex << 0xFFFF;
このコードでは出力先にFFFF(0x46464646)がそのまま表示されますが、どうすればファイルにバイナリで0xFFFFを出力できますか?
3.string->int でエラーを検出したい
std::istringstream iss(str);
int i;
iss >> std::hex >> i;
(または、i = boost::lexical_cast< int >( str ); )
このコードで、str="123w"の場合、i=0x123となりそのまま実行されますが、エラーとして処理したいです。
strtol関数の他に何か方法はありますか?
お願いします。
0218デフォルトの名無しさん
2009/01/16(金) 16:25:141. それでもいいでしょう。
2. oofs_output << 0xFFFF;
3. if (!(iss >> std::hex >> i).eof()) { /* error handling */ }
0219デフォルトの名無しさん
2009/01/16(金) 19:58:35関数コールするたびに、引数の合計分と、関数を出たときに戻るアドレス分スタックが消費される。
0220デフォルトの名無しさん
2009/01/16(金) 19:59:190221デフォルトの名無しさん
2009/01/16(金) 20:09:48ありがとうございます。
1は実装してませんが後でやってみます。3はできました。
2は10進のテキスト(ASCII)で表示され、0xFFFFは出力されませんでした。
書き忘れてしまって申し訳ないのですが、欲しい出力形式はint型変数の下位2バイト、16進数4桁(0x0000〜0xFFFF)です。
int var[10] = {0,1,2,3,4,5,(.....)}; //ここに出力したいデータが入っている
std::ofstream oofs_output( "out.txt", std::ios::out | std::ios::binary );
for(int i=0; i<5; ++i)
oofs_output << std::setw(4) << std::setfill('0') << std::hex << var[i];
としたとき、
> od out.txt -x
0000000 0000 0001 0002 0003 0004 0005
という出力を得たいです。実際はASCIIコードでこうなってしまいます
> od out.txt -x
0000000 3030 3030 3030 3031 3030 3032 ...
下のように共用体で実装したら意図した結果が得られましたが、
代入のし直しは無駄な気がしてあまりやりたくないです。
int var[10] = {0,1,2,3,4,5,(.....)};
union test{
char c[4];
int i;
}ut;
for(int i=0; i<10; ++i){
ut.i = var[i];
oofs_output << ut.c[0] << ut.c[1];
}
0222デフォルトの名無しさん
2009/01/16(金) 20:24:380223デフォルトの名無しさん
2009/01/16(金) 20:34:35isgraphでsjisの2バイト文字も判定させるにはどうすればいいでしょうか。
他に有用なライブラリがあれば教えてください。
0224デフォルトの名無しさん
2009/01/16(金) 20:48:17char型にする必要はありますか、、
0225デフォルトの名無しさん
2009/01/16(金) 20:55:40_ismbb系
0226デフォルトの名無しさん
2009/01/16(金) 20:56:43C言語のライタとコンパイラの機能をもつGCC Developer Liteというソフトがインストールできません。
ファイルを開く、実行、言語選択まで進めるのですがその後エラーを知らせるメッセージが表示されインストールができません。
8.3filenameというフォーマットに私のPCが対応していないらしいのです。調べたところ、8.3filenameはMicrosoft の初期の
OSのフォーマットで、Windows XPも対応しているようなのです。
原因のわかる方、何か思いついた方、何かアドバイスをいただけたら非常に助かります。
・表示されたメッセージ
Your PC dose not support 8.3filename format.
Cannot continue installation of this program.
・インストールしようとしたファイル
GCC Developer Lite Ver.2.1.0.20r2 GDLFull2.1.0.20r2.exe (81Mb)
サイト
http://www.besttechnology.co.jp/download/
・私のPC環境
購入元
マウスコンピュータ
OS
Microsoft Windows XP Home Edition Version 2002 Service Pack 3
CPU
Intel(R) Core(TM)2 CPU T7200 2.00GHz
メモリ
2GB
0227217
2009/01/16(金) 21:00:43こうですね、スマートにできました、ありがとうございました。
oofs_output.write( (char*)&var[i], sizeof(int)/2);
0228デフォルトの名無しさん
2009/01/16(金) 21:05:43%3.1fだとすると
3ケタで小数点は1ケタまで表示ですが
1.255とかだったら
1.2ですけど.も桁数にカウントするんですか?
0229デフォルトの名無しさん
2009/01/16(金) 21:10:570230デフォルトの名無しさん
2009/01/16(金) 21:12:170231デフォルトの名無しさん
2009/01/16(金) 21:52:120232デフォルトの名無しさん
2009/01/16(金) 23:16:19なんの話をしてるんですか?
>>215-216
ありがとうございました
0233デフォルトの名無しさん
2009/01/16(金) 23:26:25よく関数のオーバーヘッドと言うものを聞くのですが、これは
class A
{
void funcA();
void funcB();
void funcC();
}
とあった場合に、funcA〜funcCの中から呼ばれた関数を探し当てるのにかかる時間のことという理解でいいでしょうか?
つまりメンバ関数の数が増えるほどかかる時間は多くなる、、ということかと思っているのですが。
そしてそれを避けるためにinlineが存在すると。
0234デフォルトの名無しさん
2009/01/16(金) 23:38:48実行時にそんなことしない。
関数呼び出し時には
・ リターンアドレスをスタックに積む
・ 命令の実行位置を関数のあるところに移動する
という処理が必須。
関数から戻ってくる際には
・ リターンアドレスを読み出す
・ 命令の実行位置をリターンアドレスに移動する
という処理が必須。
メモリアクセスとジャンプは両方とも遅い処理。
0235デフォルトの名無しさん
2009/01/16(金) 23:39:38探し当てる時間というのはまぁある意味あってるが、少し理解よくない感じに間違ってる
関数の呼び出し元には、どこに関数があるかが書いてあって、それを元に関数に飛ぶ感じに近い
つまりメンバ関数増えても探すのに時間がかかるようになることはない
0236デフォルトの名無しさん
2009/01/16(金) 23:40:05オーバーヘッドとされるのは、実際の実行位置の変更や引数・戻り値の受け渡し。
0237233
2009/01/17(土) 00:11:49こんなに早くわかりやすい返信が来ると思いませんでした。。
つまり関数を呼ぶときには、戻ってこないと駄目なので自分の位置を記憶してから
別の関数に飛ぶということですね。
それがinline関数だと直にその関数が呼ばれた場所におかれるので記憶も飛ぶ必要も
無くなるということがわかりました。
両方とも遅い処理なのでしたら、かなり実行速度を気にするプログラムを書く場合は
要所要所でinlineを使ったほうがいいということですか。。
0238デフォルトの名無しさん
2009/01/17(土) 00:18:510239デフォルトの名無しさん
2009/01/17(土) 00:20:08命令を実行するのもメモリアクセスが必要だから、
キャッシュに載るくらいコンパクトな方が
キャッシュ効率は良くなる。
大きな処理を inline 化して、それが inline 展開されまくると、
逆に遅くなるなんてこともある。
あるいは、速くはなったけど、ファイルサイズが妙に肥大化したり。
まあ、実際には inline にしても inline 展開されるとは限らないけどね。
どんな処理を inline 関数にするのがベストなのかは難しいところだけど、
inline 関数の中身は短い1文かそこら程度で終わるもののみにするのが一般的。
0240デフォルトの名無しさん
2009/01/17(土) 00:20:44関数呼び出し時にリターンアドレスをスタックに積むとは限らない
リンクレジスタを持つCPUだったり
末尾の最適化で消されたり
0241デフォルトの名無しさん
2009/01/17(土) 00:21:400242デフォルトの名無しさん
2009/01/17(土) 00:22:51アナクロな発想は身を滅ぼす典型ですね。
0243デフォルトの名無しさん
2009/01/17(土) 00:26:54再コンパイル範囲が広くなってしまう。
だから複雑な処理を書いたら、
修正が必要になった時に場合によっては面倒臭いことになる。
そういった意味でも複雑な処理を書かないのは普通だ。
0244デフォルトの名無しさん
2009/01/17(土) 00:32:46>238
0245デフォルトの名無しさん
2009/01/17(土) 00:34:20趣味プロかよ。
0246デフォルトの名無しさん
2009/01/17(土) 00:35:05早くなりそうなら普通の関数を展開してもいいよっていうオプションがあるぐらいだし、
コンパイラがうまいこと判断してくれそうな気がなんとなくするんですが
0247デフォルトの名無しさん
2009/01/17(土) 00:35:080248デフォルトの名無しさん
2009/01/17(土) 00:35:470249デフォルトの名無しさん
2009/01/17(土) 00:37:17gccの例だけど、インライン展開によってオブジェクトモジュールが大幅に大きくなってしまうケースで且つ、
インライン展開されたコードが殆ど実行されない場合に、ロード時間を含めて計測すると遅くなったことはある。
逆に言えば、余程の事がない限り遅くなるようなケースはないと考えていいと思う。
0250デフォルトの名無しさん
2009/01/17(土) 00:41:12面倒臭いからクラス宣言内で関数実装しちゃうから
全関数がinlineになっちゃう。
0251デフォルトの名無しさん
2009/01/17(土) 01:55:06関数がある程度の大きさを持っていて、
しかもその関数がありとあらゆるところで使われまくってると
出力コードが肥大化して、キャッシュヒット率が下がって遅くなるかも。
0252デフォルトの名無しさん
2009/01/17(土) 01:56:10あらゆるところで呼ばれる関数ならキャッシュに居つくんじゃねーの
0253デフォルトの名無しさん
2009/01/17(土) 02:00:00インライン化されたらコードが実行部分に分散する。
0254デフォルトの名無しさん
2009/01/17(土) 02:00:16inline展開されたら?
0255デフォルトの名無しさん
2009/01/17(土) 02:12:510256デフォルトの名無しさん
2009/01/17(土) 07:33:41>>249
なるほど、そういうことがあるんですか
でもやっぱ基本コンパイラが判断してくれるんですね
>>251
関数大きかったら展開しないんじゃないの?
0257デフォルトの名無しさん
2009/01/17(土) 08:33:51但し、コードキャッシュが問題になる程度のプログラムでは殆ど影響が出ない。
0258デフォルトの名無しさん
2009/01/17(土) 10:34:56という配列があったとするとarray[1]は0x34になりますが
array[1]を無理矢理u_intとして読み込むことは可能でしょうか?
つまり&array[1]のアドレスにあたかもu_intが格納されているように見なして
0x9A785634という値(リトルエンディアン)を取り出したいのです。
array[4]<<24 + array[3]<<16 + array[2]<<8 + array[1]
を計算すれば同じ値が得られますが
もう少し低レベルにメモリを直読みするような文法は
無いのかなということで質問させていただきました。
0259デフォルトの名無しさん
2009/01/17(土) 10:35:08勘違いしていた。
あらゆるところで呼ばれる関数コールがなぜコスト増になるんだ?って思っちまった。
インライン展開したら、か。
そりゃ無駄だな。
0260デフォルトの名無しさん
2009/01/17(土) 10:36:53*reinterpret_cast<u_int*>(&array[1])
0261デフォルトの名無しさん
2009/01/17(土) 10:39:39即レスどうもです!
0262デフォルトの名無しさん
2009/01/17(土) 10:57:10BOOLなどの場合fをつけることが多いですが
これは初期化する際にfalseということですか?
0263デフォルトの名無しさん
2009/01/17(土) 11:04:410264デフォルトの名無しさん
2009/01/17(土) 11:14:26>260では環境によっては破綻するよ。
そうでない環境ならコンパイラが>258でも最適化で>260と同じコードにしてくれるかもしれないからお勧め。
厳密には環境依存になるけど、これもあり。
union {
u_char c[sizeof(u_int)];
u_int i;
} foo;
for (unsigned ic = 0; ic < sizeof(foo); ++ic) foo.c[ic] = array[1 + ic];
>>262
単にフラグ(flag)の意味じゃね?
0265デフォルトの名無しさん
2009/01/17(土) 11:46:38FileA.cpp ,FileA.h
FileB.cpp ,FileB.h
という
二つのファイルとヘッダがあったとして、
FileA.cpp内部のClassAでは、FileB.cpp内部のClassBを持っていて、ClassAからは頻繁にClassBの
メンバ関数が呼ばれるとします。
そこで速度が気になりだしてClassBのメンバ関数をinline化したいとなったときはどうすればいいのでしょう?
単純にinlineをつけただけでは別のcppファイルのinline関数を予防とするとエラーになるのですが
0266デフォルトの名無しさん
2009/01/17(土) 11:47:530267262
2009/01/17(土) 11:50:10フラグという意味ですかw
0268デフォルトの名無しさん
2009/01/17(土) 11:51:27Win32APIスレにみせてやりたいわっ
0269デフォルトの名無しさん
2009/01/17(土) 11:57:00なるほど、、staticと同じという感じですね。
つまり別のcppファイルのinline関数を呼ぶためには
ヘッダーの宣言部ですでにinline関数だけでも実装しておかなくてはならないということか
0270デフォルトの名無しさん
2009/01/17(土) 12:56:41FILE *fp = fopen(”yome.conf”, “r+”);
ファイル:や、開かないで、開いちゃいや ///
プロセス:ほら、よーく見せてごらん
while( !feof(fp) ) printf( “%c”, (char)fgetc(fp) );
ファイル:見ないで、恥ずかしいよ ///
fseek( fp, 0L, SEEK_SET );
プロセス:君の設定を最後の1バイトまで書き換えてあげるよ
fprintf( fp, “[あなた好みの設定でおk]” );
ファイル:らめぇぇぇ ////
プロセス:ずっと一緒にいようね
ファイル:///
fclose( fp );
0271デフォルトの名無しさん
2009/01/17(土) 13:04:41規格的にはどうなんだろう。
%c は char -> int で変換された(可変個引数の仕様により変換された)値しか受け付けないのか、
それとも fgetc の返す EOF 以外の値(つまり符号無しの値)をそのまま渡して良いのか。
0272デフォルトの名無しさん
2009/01/17(土) 13:06:530273デフォルトの名無しさん
2009/01/17(土) 13:13:17だぁな。
しかし、fopen の ( ) の中だけは空白入れてないのに何かポリシーあんのか?
0274デフォルトの名無しさん
2009/01/17(土) 13:49:46暗黙の型変換が行なわれるので、厳密に解釈するとfgetc()の戻り値を一旦charにしてから再びintにすることになる。
その影響を受けるのは、最後の1回だけではあるが。
>>270
つーか、先頭に戻すだけならrewind()を使えばいいのに。
0275デフォルトの名無しさん
2009/01/17(土) 13:56:39(char)を入れると、符号拡張で値が変わる可能性あるな。
0276デフォルトの名無しさん
2009/01/17(土) 14:28:060277デフォルトの名無しさん
2009/01/17(土) 14:35:070278デフォルトの名無しさん
2009/01/17(土) 14:37:32大丈夫、最下位1バイトを送出するだけだ。
0279デフォルトの名無しさん
2009/01/17(土) 15:07:07iをXのメンバ変数にして、コンストラクタで初期化すればいいんですが、iを使うのはtest関数の中だけなので・・。
class X{
public:
void test(void){
static int i=0;
if(i==1) std::cout<< "i=1" << std::endl;
i=1;
}
};
int main(void){
X objx; objx.test;
X objx2; objx2.test; //i=0になってほしい
}
//結果
i=1
0280デフォルトの名無しさん
2009/01/17(土) 15:10:47インスタンスごとにiのインスタンスを別にしたいならstaticは使えない
そもそもiは何だ?
0281デフォルトの名無しさん
2009/01/17(土) 15:22:02インスタンス生成時に0にしたいけれどtest関数でしか使わないからtestのメンバで・・って考えてました。
>インスタンスごとにiのインスタンスを別にしたい
確かにこの通りです。メンバ変数にするべきですね。
ややこしく考えすぎでした、ありがとうございました。
0282デフォルトの名無しさん
2009/01/17(土) 15:22:12規格でそうなってんの?
知りたいのはそこなんだが。
0283デフォルトの名無しさん
2009/01/17(土) 16:08:10文盲なの?
0284デフォルトの名無しさん
2009/01/17(土) 16:08:460285デフォルトの名無しさん
2009/01/17(土) 16:11:56memset
完璧に同じ動作する
0286デフォルトの名無しさん
2009/01/17(土) 16:13:06std::fill を使っても良いが、
int なら memset で十分だとは思う。
0287デフォルトの名無しさん
2009/01/17(土) 16:17:34cstring (string.h)のインクルードですか?
ありがとうございます。
0288デフォルトの名無しさん
2009/01/17(土) 16:30:000289デフォルトの名無しさん
2009/01/17(土) 16:34:390290デフォルトの名無しさん
2009/01/17(土) 16:39:53以前gcc(C言語)でそれをやったとき怒られたのでそれはあまり気が進まなかったです
コンストラクタで初期化したいので、その書き方はできるんですかね、、
>>289
そうですね。ただ今回は静的にはできないですが・・。
0291デフォルトの名無しさん
2009/01/17(土) 17:23:49参照渡し、int型変数の値渡し、ポインタ渡し
それぞれのオーバーヘッドって同じですか?
0292デフォルトの名無しさん
2009/01/17(土) 17:29:47ふつうのx86などであれば、
値渡しが最速、参照とポインタは同じ
だと思われる。後者は実際の値を取るためにメモリアクセスが余計に必
要なので。
0293デフォルトの名無しさん
2009/01/17(土) 17:36:14なるほど、ありがとうございます
0294デフォルトの名無しさん
2009/01/17(土) 17:43:10あー、コンストラクタでは出来ないな
C++0xではm_a{0}って書けるようになるけど今は無理
0295デフォルトの名無しさん
2009/01/17(土) 17:53:59逆だろ。
memset を使っても int なら問題ないが、 std::fill のほうが見た目も安全で望ましい。
0296デフォルトの名無しさん
2009/01/17(土) 17:54:440297デフォルトの名無しさん
2009/01/17(土) 17:59:22例えばDWORDの変数を宣言するとき DWORD dwPoint; DWORD dwStack;
などdwをつけて分かりやすくするなどは入りますか?
0298デフォルトの名無しさん
2009/01/17(土) 18:00:08そうなんですが、理論上ではどうかと思いまして
0299デフォルトの名無しさん
2009/01/17(土) 18:01:29ハンガリアンでぐぐったらその辺の議論はでてくるかと
あまり意味がないとされることが多いと思うよ
0300デフォルトの名無しさん
2009/01/17(土) 18:15:53std::fill ってどこまで最適化されるのん?
0301デフォルトの名無しさん
2009/01/17(土) 18:17:47実装依存だから何とも言えんな。
気になるなら試せば?
0302デフォルトの名無しさん
2009/01/17(土) 18:52:02理論上は、コンパイラの実装や最適化の影響によってどうなるかわからないから同じとも違うとも言えない。
0303デフォルトの名無しさん
2009/01/17(土) 18:52:290304デフォルトの名無しさん
2009/01/17(土) 18:52:52気にしないのが一番だ
0305デフォルトの名無しさん
2009/01/17(土) 19:02:38void main(void);
void main(void)
{
char c='c';
printf("c='%c'\n",c);
if(c>='a' && c<='z'){
printf("cは小文字です\n");
}
else{
printf("cは小文字ではありません\n");
}
if(c>='0'&&c<='9'){
printf("cは数字です\n");
}
else{
printf("cは数字ではありません\n");
}
if(c=='+'||c=='-');{
printf("cは符号です");
}
else{
printf("cは符号ではないです\n");
}
}
をBCCでコンパイルしようとしたら
「elseの位置が誤っています」とエラーが出ます。
間違えをご指摘お願いします。
0306デフォルトの名無しさん
2009/01/17(土) 19:08:400307デフォルトの名無しさん
2009/01/17(土) 19:12:48gettimeofday()関数で扱ってる
double型の数値に変換したいのですが
どうすればいいのでしょうか
0308デフォルトの名無しさん
2009/01/17(土) 19:17:49プログラムを書くといいよ。
0309デフォルトの名無しさん
2009/01/17(土) 19:19:260311デフォルトの名無しさん
2009/01/17(土) 19:29:56これを使うと戻り値はコピーか参照かどっちでしょうか
0312デフォルトの名無しさん
2009/01/17(土) 19:30:450313デフォルトの名無しさん
2009/01/17(土) 19:30:49参照でなければ値だ。
0314デフォルトの名無しさん
2009/01/17(土) 19:32:36とか無理なんだっけ
0316デフォルトの名無しさん
2009/01/17(土) 19:38:06gettimeofday()はdoubleなぞ扱わない。
年月日から1970/1/1 00:00:00からの経過秒を作りたいならmktime()
0317デフォルトの名無しさん
2009/01/17(土) 19:42:26型をプリフィックスにするシステムハンガリアンには意味がない。役に立たない情報である上に、コードを修正するときの障害になる。型情報はコンパイラがチェックする方が正確。
意味をプリフィックスにするアプリケーションハンガリアンなら意味がある。カウンタだとか安全な値であるとか記憶クラスであるとかコンパイラがチェックできない情報を持たせると良い。
間違ったコードは間違って見えるようにする でググレ
0318デフォルトの名無しさん
2009/01/17(土) 19:43:560319デフォルトの名無しさん
2009/01/17(土) 21:32:13HRESULT FInit(HWND hWnd, LPTSTR filename);
FILE *fp = fopen(filename, "rb");
解決方法教えていただけませんか
0320デフォルトの名無しさん
2009/01/17(土) 21:33:31fopen じゃ共有モードも指定できないし。
0321デフォルトの名無しさん
2009/01/17(土) 21:35:27たぶん_tfopenみたいなマクロ関数があるはずだが、そっちを使うべきだろう
0322デフォルトの名無しさん
2009/01/17(土) 21:37:17なるほど 調べてみます
>>321
ありがとうございます!
0323デフォルトの名無しさん
2009/01/17(土) 22:10:32今までやっていた
fseek()がCreateFileではどうやるのかが
アドバイスいただけませんか
0324デフォルトの名無しさん
2009/01/17(土) 22:12:46ttp://msdn.microsoft.com/en-us/library/aa364232.aspx
なんでMSDNを見ないの?
バカなの?
0325デフォルトの名無しさん
2009/01/17(土) 22:14:020326デフォルトの名無しさん
2009/01/17(土) 22:14:44http://msdn.microsoft.com/ja-jp/library/cc429126.aspx
0327デフォルトの名無しさん
2009/01/17(土) 22:33:40fseek(fp, 0, SEEK_SET); 相当のものの戻り値で取得しないといけないとか
fprintf 相当のものが無くて
sprintf してから書き込まないといけないなど面倒臭いことも多い。
しかし、_tfopen だと別アプリから編集中のファイルを操作され放題。
_tfopen_s が使えるならそっちのがいい。
0328デフォルトの名無しさん
2009/01/17(土) 22:45:09細かいオープンモードを指定したいがためにCreateFileW()を使いたいが、
その後の読み書きはstdioで行いたいという場合は、
1. _open_osfhandle()でHANDLEからCRTのファイルディスクリプタを取得
2. _fdopen()でファイルディスクリプタからFILE*を取得
すればよいぞ
VC++の場合はね
0329323
2009/01/17(土) 23:16:36これからはMSDNで調べてから質問します
0330デフォルトの名無しさん
2009/01/17(土) 23:22:15アプリケーションハンガリアン記法の一覧みたいなものは無いのでしょうか?
0331デフォルトの名無しさん
2009/01/17(土) 23:25:04そんなものはあるわけがない
アプリ独自のモデルに応じて設定するから「アプリケーション」ハンガリアンと
言ってるんだからさ
んでも、静的型の言語、特に型の別名をつけられるタイプの言語での
アプリケーションハンガリアンの重要性は、相対的に低いと思うよ
LispだのPerlだのPythonだの使ってるんなら、変数の名前で何者かを示すことが
ものすごく重要なことが多いと思うけどね
0332デフォルトの名無しさん
2009/01/17(土) 23:36:050333デフォルトの名無しさん
2009/01/17(土) 23:37:03明示的にキャスト汁。
C++ではポインタの暗黙の型変換はvoid*にだけじゃなかったっけ。
0334デフォルトの名無しさん
2009/01/17(土) 23:37:329x系なんて既にMSがサポート切ってるんだし
MSLUもある
0335デフォルトの名無しさん
2009/01/17(土) 23:37:390336デフォルトの名無しさん
2009/01/17(土) 23:39:18めちゃくちゃなんですけど
0337デフォルトの名無しさん
2009/01/17(土) 23:41:01名前はWindowsに採用されたシステムハンガリアンに対して、Officeに採用されたアプリケーションハンガリアンと呼ばれているんだと思うぞw
命名規則を設計で決めるのはその通りだけどさ
批判も多いけど、場合によってはシステムハンガリアンがいい場合もあるな
0338デフォルトの名無しさん
2009/01/17(土) 23:42:02これは酷い・・・
お前、地雷プログラマだろ
0339デフォルトの名無しさん
2009/01/17(土) 23:45:01http://www.kouno.jp/home/c_faq/c16.html
0340デフォルトの名無しさん
2009/01/17(土) 23:51:47ObjectA の中に ObjectBがある場合
delete ObjectA
とする前に
delete ObjectB; delete ObjectA;
と中のものから消さなくてはいけないのでしょうか?
もうひとつ質問させていただきたいのですが
vecter<ObjectA> obje
とあった場合に
obje.clear()
ではObjectAのデストラクタは呼ばれますか?
0341デフォルトの名無しさん
2009/01/17(土) 23:53:24新人君がコンパイルエラーを無くすためになんでもかんでも
とりあえずキャストしてうまく動かないって言ってきたのを思い出したw
0342デフォルトの名無しさん
2009/01/17(土) 23:54:300343デフォルトの名無しさん
2009/01/17(土) 23:57:34普段はやらないけど、グループでプログラム作るっていう課題があって
変数の命名方法決めようぜ!ってことで
あぁ
0344デフォルトの名無しさん
2009/01/18(日) 00:02:220345デフォルトの名無しさん
2009/01/18(日) 00:06:54規約を変えたりするのって非常に面倒なんだよね
0346デフォルトの名無しさん
2009/01/18(日) 00:07:280347デフォルトの名無しさん
2009/01/18(日) 00:10:16{125} normal block at 0x003E7080, 352 bytes long.
Data: < ? > 00 00 80 3F 00 00 00 00 00 00 00 00 00 00 00 00
ここから、どこが原因かわかるの?
at 0x3E7080
とかいわれてもわからん・・
0348デフォルトの名無しさん
2009/01/18(日) 00:11:500349デフォルトの名無しさん
2009/01/18(日) 00:13:550350デフォルトの名無しさん
2009/01/18(日) 00:15:01352バイトと、1.0f(00 00 80 3f)もヒントになるかもしれない。
0351デフォルトの名無しさん
2009/01/18(日) 00:33:01全部小文字(または大文字)に変換しながら(またはしてから)比較する。
0352351
2009/01/18(日) 00:34:100353349
2009/01/18(日) 00:38:23すみません、ASCII英数字のみです。
stricmp関数など、char型にする必要があるということですか?
==演算子か、compare関数など簡単にできないかなと・・
0354デフォルトの名無しさん
2009/01/18(日) 00:40:250355デフォルトの名無しさん
2009/01/18(日) 00:42:07Ctrl+Cを検出してcatch節に処理を移したいのですが、下記のような操作は可能でしょうか?
try{
char *buffer = new char[1024]();
hFile = CreateFile(ほげほげ);
// ほにゃらら
}catch(なんちゃら){
delete []buffer;
CloseHandle(hFile);
// 後処理
}
Ctrl+Cが押されたら、いきなりプログラムを終了するのではなく、それまでに動的に確保したバッファを解放したりしたいのですが・・・
0356デフォルトの名無しさん
2009/01/18(日) 00:43:03stricmp() 使えるのか。
1文字の比較なら string の [0] 取ればいいし、文字定数が文字列定数のことなら
string の c_str() を stricmp() に突っ込めばいいだろ。
関数で簡単にしたいなら自分で定義すればいい。
0357デフォルトの名無しさん
2009/01/18(日) 00:44:53コンパイルできないコード貼って可能かどうか聞く意味がわからん。
例外使うなら動的配列には std::vector 使え。
ファイルについても RAII に沿ったラッパーにする必要がある。
0358デフォルトの名無しさん
2009/01/18(日) 00:47:18正常動作系を例外としてプログラムするのはちょっと
0359349
2009/01/18(日) 00:57:02すみません、文字列定数です。
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200507/05070065.txt
こちらのサイトを参考にしたところ、やはりstricmpにしようと思います。
ありがとうございました。
0360デフォルトの名無しさん
2009/01/18(日) 01:05:54ただ、メモリ以外のリソースは知らないがな!!
Ctrl+C を検出するにはシグナルを使うことになるのかね。
0361デフォルトの名無しさん
2009/01/18(日) 01:06:13ctrl+CはC++の機能じゃない。例外というよりも割り込み処理になる。トラップしたいならOSの機能を調べた方が良い。
0362デフォルトの名無しさん
2009/01/18(日) 01:47:530363デフォルトの名無しさん
2009/01/18(日) 01:53:51ご名答
http://local.joelonsoftware.com/mediawiki/index.php/%E9%96%93%E9%81%95%E3%81%A3%E3%81%9F%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%E9%96%93%E9%81%95%E3%81%A3%E3%81%A6%E8%A6%8B%E3%81%88%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%99%E3%82%8B
> シモニイのハンガリアン記法のオリジナルのアイデアは、Microsoft内部ではアプリケーションハンガリアンと呼ばれ、それはアプリケーション部門で、すなわちWordとExcelで使われていたためだ。
0364デフォルトの名無しさん
2009/01/18(日) 18:06:26参考書に例題どおりの文字列(芭蕉の俳句)をメモ帳に
ソースコードを書きコンパイルしたら
error: syntax error before "printf"
というエラーメッセージが出ました。
ソースコードは参考書通り打ち込んだんですが・・・
0365364
2009/01/18(日) 18:07:42#include <stdio.h>
int main(void)
{
printf(" 夏\n")
printf(" 兵草\n")
printf("夢どや\n")
printf("のも\n")
printf("あが\n")
printf("と")
return 0;
}
0366デフォルトの名無しさん
2009/01/18(日) 18:13:390367デフォルトの名無しさん
2009/01/18(日) 18:22:500369364
2009/01/18(日) 18:56:37>>365のソースコードからint、voidそしてreturn 0を
消してもMINGW上では正常にコンパイラされ実行もされます。
intやvoidを消しても大丈夫なのは理解できるのですが
return 0はソースコードの締めとして絶対必要なものではないのですか?
0370デフォルトの名無しさん
2009/01/18(日) 19:11:14C99 : 無ければ return 0; が補填される。
0372デフォルトの名無しさん
2009/01/18(日) 20:42:28大元の流出報告スレ
仁義なきキンタマ ウイルス情報 Part80
http://changi.2ch.net/test/read.cgi/download/1229742858/546
546 :[名無し]さん(bin+cue).rar :sage :2009/01/04(日) 00:24:59
報告する時は、詳しく的確に、一部だけ報告しないでお願いね
[殺人] Administrator(20081230-101522)のキンタマ.zip 2,263,376,860 09ed98f10653c3fc2555621ceeed6bc33e8f6228
[殺人] Administrator(20081230-101522)のメール.zip 59,426,579 4da9459b30eec31f58b86530dbb48d1cf86ef4be
[写真集][IV] Administrator(20081230-101522)のアルバム.zip 2,205,946,474 9d87cc0e08dc0e3afd959fcead6c48d569787cee
膨大な量のファイル数キンタマ ファイル数 13508 フォルダ数2381
以前勤めてた会社の資料など多数 独立行政法人情報処理推進機構などの資料など無いと思うが
有るかも知れない、あまりにも数が有り過ぎる、メールなどは、古いものばかりメルマガなど膨大な量
個人情報などは、披露宴主席者などの住所、名前、電話、メール 数十人分しかしエロばっかり落としてるな
ちなみに ハメ撮りscr 踏んだみたいね
早稲田実業学校中等部卒業
早稲田実業学校高等部卒業
早稲田大学政治経済学部政治学科卒業
卒論「知的財産権とインターネット技術」
当時の同大学理工学大学院の大川功 賞佳作を受賞
コンピュータ関連会社に入社ソフトウェア開発の仕事を経て
2005年に独立行政法人情報処理推進機構に入社
ソフトウェア・エンジニアリング・センター企画グループに配属
同グループ主任 岡○さん33歳
0373デフォルトの名無しさん
2009/01/18(日) 20:43:06Winnyの情報流出を管理・指導する国のIPA職員 岡○主任が違法ファイルDLしまくり感染して流出したドキュメント類。
嫁以外の女とのエッチ写真や違法ファイル所持証拠なども大量に流出。
★郵政省(今の総務省)、日立製作所、博報堂、味の素・・・と凄い流出規模!
http://mj.dip.jp/jlab-beer/s/test1232027394625.jpg
★本人は著作権無視で違法ファイルダウンしまくりのくせに、著作権を勉強して知的所有権管理資格持ってるw
http://mj.dip.jp/jlab-beer/s/test1232027429157.jpg
★全契約先でこの契約書結んでいるが、秘密保持、情報返還・処分義務の立派な契約違反。
http://mj.dip.jp/jlab-beer/s/test1232027468338.jpg
★西武百貨店社員6155名分の個人情報を違法に自宅に持ち帰り流出。
http://mj.dip.jp/jlab-beer/s/test1232027491803.jpg
★楽天ショップから個人情報データを違法に自宅に持ち去り大量に個人情報流出!
http://mj.dip.jp/jlab-beer/s/test1232027516194.gif
★大量のソニーやマイクロソフト等の大手企業勤務者の流出個人情報! 自民党とか衆議院とかもある。
http://mj.dip.jp/jlab-beer/s/test1232027555824.gif
★国の情報処理推進機構 IPA専門職員として違法アプリばら蒔きの大問題流出証拠。
違法アプリやシリアルキーを周囲にわざとバラ蒔いている。(現在も違法ATOKを使用しており、長年違法アプリ等を日常的に使用していた可能性大)
西武百貨店、日立製作所、博報堂、等の各企業向けに作っていたソフト類も違法アプリで作られていた可能性あり。
※Micro Soft VisualC++の違法シリアルキーを知人に教えたメール
http://mj.dip.jp/jlab-beer/s/test1232027624598.jpg
※メールソフトRimArts社 Beckyの違法シリアルキー等、内容から見ても長年かなり広範囲にバラ蒔いていたようだ
http://mj.dip.jp/jlab-beer/s/test1232027671365.jpg
★IPAは自身の流出は画像しか無いと断言しているが大嘘で、IPA役員資料とかも流出している。(IPA資料を無断で自宅に持ち帰り)
http://mj.dip.jp/jlab-beer/s/test1232027591091.jpg
★吉祥寺リ○ウス(株)の入居者の口座番号や入金金額等のデータベースもIPA岡○主任が流出
http://mj.dip.jp/jlab-beer/s/test1232106166528.gif
0374デフォルトの名無しさん
2009/01/18(日) 20:43:43IPA職員の報道記事まとめ1
★NHK
http://s02.megalodon.jp/2009-0105-1642-01/www3.nhk.or.jp/news/t10013365941000.html
★IPA職員のPCから業務情報などが漏えい - yahooニュース
http://headlines.yahoo.co.jp/hl?a=20090105-00000007-zdn_ep-sci
★IPA職員が情報流出 ― 私物パソコンでファイル交換ソフトを使用(RBB TODAY) - Yahoo!ニュース
http://s03.megalodon.jp/2009-0105-1955-03/headlines.yahoo.co.jp/hl?a=20090105-00000007-zdn_ep-sci
★IPA職員Winnyでファイル流出&嫁のブログ祭り - 探偵ファイル
http://www.tanteifile.com/newswatch/2009/01/05_01/index.html
★また早大!mixi 不正&変態行為自慢、卒業生は情報漏洩 - 探偵ファイル
http://www.tanteifile.com/newswatch/2009/01/04_01/index.html
★IPA職員がファイル交換ソフトでウイルスに感染、写真など流出 - ネットwatch
http://internet.watch.impress.co.jp/cda/news/2009/01/04/21994.html
★情報流出対策職員“赤恥”…自身半裸写真など流出 - zakzak
http://www.zakzak.co.jp/top/200901/t2009010510_all.html
★IPA職員がまさかの情報流出 - 「Share」の可能性も「現在本人に確認中」 - マイコミュ
http://journal.mycom.co.jp/news/2009/01/05/004/
★J-CASTニュース(情報セキュリティ専門家のはずのIPA男性職員の失態)
http://www.j-cast.com/2009/01/05033141.html
★時事通信社ニュース(古いソフトを探すためと、本人の虚偽と分かるコメント有り!組織ぐるみで隠蔽工作開始か?)
http://www.jiji.com/jc/c?g=soc_30&k=2009010500683
★CNET JAPAN わいせつ画像や児童ポルノ動画、違法かな漢字ソフトをダウンロード--IPA職員
http://japan.cnet.com/news/sec/story/0,2000056024,20386070,00.htm
★INTERNET WATCH IPAが職員の情報流出で記者会見。
昨日の組織ぐるみ隠蔽工作から、2ちゃんねらーの追撃で違法ファイルの使用と児童ポルノ動画を一転して認める!。
http://internet.watch.impress.co.jp/cda/news/2009/01/06/22018.html
0375デフォルトの名無しさん
2009/01/18(日) 20:44:12IPA職員の報道記事まとめ2
★CNET JAPAN 「IPAとして慙愧に堪えない」--仲田理事が会見で職員の情報流出事件を説明
http://japan.cnet.com/news/sec/story/0,2000056024,20386085,00.htm
★毎日.jp わいせつ画像やかな漢字ソフトをダウンロード--IPA職員、ファイル交換ソフトで
http://mainichi.jp/life/electronics/cnet/archive/2009/01/06/20386070.html?link_id=RLD03
★@IT IPA職員の私物PCからの情報流出、事実関係を説明
http://www.atmarkit.co.jp/news/200901/06/ipa.html
★IT PRO IPA職員がファイル交換ソフト利用で、個人情報含む1万6000件を流出
http://itpro.nikkeibp.co.jp/article/NEWS/20090106/322322/
★マイコミジャーナル IPA職員の情報流出で緊急会見 - 前職時代の取引先企業情報など1万件超
http://journal.mycom.co.jp/news/2009/01/06/055/
★IPA プレス発表 当機構職員の私物パソコンによる情報流出について
http://www.ipa.go.jp/about/press/20090106.html
★探偵ファイル IPA流出騒動職員の妻、不正転売と薬事法違反疑惑
http://www.tanteifile.com/newswatch/2009/01/06_01/index.html
★live doorニュース 「指導する側」のIPA職員がWinnyでウイルス感染、個人情報が流出。
http://news.livedoor.com/topics/detail/3962545/
★秒間SUNDAY IPA職員がファイル交換ソフトでウイルス感染!エッチ後画像など大流出
http://www.yukawanet.com/sunday/2009/01/ipawinny.html
★西武百貨店 IPA職員の自宅私物パソコンによる当社の情報の流出について(IPAに怒り爆発w)
http://www2.seibu.co.jp/common/images/pdf/20090107.pdf
★つこうたIPA職員 チャイルドポルノコレクターだった
http://www.technorati.jp/post/1S_jIJkf5a8hD3fMmxghB%2BYuGJfDPiYu%2BYizu8vv1oY%3D
0376デフォルトの名無しさん
2009/01/18(日) 20:44:36IPA職員の報道記事まとめ3 \(^o^)/ ついにアサヒ芸能 週刊誌に岡ちゃんと純子と仲良く堂々掲載 \(^o^)/
★ZAKZAK 流出事件のIPA職員ばかりか妻は薬事法に違反
http://www.zakzak.co.jp/top/200901/t2009010701_all.html
★探偵ファイル ポエムに企画書…IPA職員の情報流出事件続報!
http://www.tanteifile.com/newswatch/2009/01/07_01/index.html
★探偵ファイル IPA騒動に急展開、驚愕の流出情報の数々
http://www.tanteifile.com/newswatch/2009/01/08_01/index.html
★探偵ファイル IPA流出事件職員の妻の転売業者、薬事法違反が確定
http://www.tanteifile.com/diary/2009/01/08_02/index.html
★livedoorニュース(岡ちゃん用) Winny利用の果て――家族崩壊した銀行マンの悲劇
http://news.livedoor.com/article/detail/3972416/
★アサヒ芸能 週刊誌 ネット情報セキュリティ相談窓口職員の裸画像が流出 恥写真!&島○純子も
http://mj.dip.jp/jlab-beer/s/test1232028437020.jpg
★楽天(ショップ) IPA職員のパソコンによる情報の流出について
http://www.rakuten.co.jp/stellina/946713/
0377デフォルトの名無しさん
2009/01/18(日) 20:46:210378デフォルトの名無しさん
2009/01/18(日) 21:54:31*lst[0] みたいにアクセスしたいのですが上手くいきません。
こういう場合はどういう使い方をすればよいのでしょうか。
0379デフォルトの名無しさん
2009/01/18(日) 21:55:320380デフォルトの名無しさん
2009/01/18(日) 22:02:51vector<int> vct(2);
vct[0] = 1, vct[1] = 2;
lst.push_back(vct);
lst.push_back(vct);
vector<vector<int> >::iterator it, itEnd;
it = spMv.begin(), itEnd = spMv.end();
while(it!=itEnd) cout<<*it[0]<<","<<*ti[1]<<endl;
>>379
こんな感じな事がしたいのです。
0381デフォルトの名無しさん
2009/01/18(日) 22:04:37vector<vector<int> > lst;
vector<int> vct(2);
vct[0] = 1, vct[1] = 2;
lst.push_back(vct);
lst.push_back(vct);
vector<vector<int> >::iterator it, itEnd;
it = lst.begin(), itEnd = lst.end();
while(it!=itEnd) cout<<*it[0]<<","<<*it[1]<<endl;
0382デフォルトの名無しさん
2009/01/18(日) 22:05:020383デフォルトの名無しさん
2009/01/18(日) 22:05:060384デフォルトの名無しさん
2009/01/18(日) 22:08:02出来ました! 教えて下さりありがとうございました。
0385デフォルトの名無しさん
2009/01/18(日) 22:08:16演算子の優先順位の問題だ。
0386デフォルトの名無しさん
2009/01/19(月) 00:07:45--itr; (&*itr) + 1;
とやるしか無いのでしょうか?
0387デフォルトの名無しさん
2009/01/19(月) 00:14:50(vector 以外で得たとして、まともに使えるのか?)
vector のイテレータからなら、そうするしかないんじゃね。
イテレータからでなければ &v[0] + v.size() でいいと思うが。
0388デフォルトの名無しさん
2009/01/19(月) 00:33:48やっぱそうなりますか。
>vecotr 以外で
boost::array::iteraterとか。
boost::circular_buffer::iteraterなどでも制限があるけどまぁ意味あるかな。
0389デフォルトの名無しさん
2009/01/19(月) 07:27:43保証はされてないんだろうな。
0390デフォルトの名無しさん
2009/01/19(月) 07:36:570391デフォルトの名無しさん
2009/01/19(月) 10:11:28ちくしょう>>214は無視かよ
0392デフォルトの名無しさん
2009/01/19(月) 10:37:240393デフォルトの名無しさん
2009/01/19(月) 11:51:59ネタだと思ってた。
0394デフォルトの名無しさん
2009/01/19(月) 16:23:04はじめてアクセスが起こるという考え方になっていなかったっけ?
もしそうだったら、operator *がreturn *p;で参照型を返すというような
単純な実装になっていれば平気だと言えるはず。
その保証がないだろうから、結局やめておくべきだろうけど。
0395デフォルトの名無しさん
2009/01/19(月) 20:31:45iterator::operator*が何をやってるかわからない以上しないのが無難
0396デフォルトの名無しさん
2009/01/19(月) 20:32:04#include <stdio.h>
main()
{
int k;
for (k=0;k<1000;k++);
printf("sunrise\n");
}
このソースコードをmingwで実行するとmingw上で”sunrise”が1000回
でると思ったんですが、そういうわけではないのですね
0397デフォルトの名無しさん
2009/01/19(月) 20:38:340398デフォルトの名無しさん
2009/01/19(月) 20:40:500399デフォルトの名無しさん
2009/01/19(月) 20:42:35#include <stdio.h>
main()
{
int k;
for (k=0;k<1000;k++);
{
printf("sunrise\n");
}
}
こうですね、わかります
0401デフォルトの名無しさん
2009/01/19(月) 21:29:39main()
{
int k;
for (k=0;k<1000;k++)
{
printf("sunrise\n");
}
}
おまえらあんまりおちょくってやるなよ
0402デフォルトの名無しさん
2009/01/19(月) 21:36:280403デフォルトの名無しさん
2009/01/19(月) 21:38:38>>399
ワロッシュw
0404デフォルトの名無しさん
2009/01/19(月) 21:48:040405396
2009/01/19(月) 21:54:160406デフォルトの名無しさん
2009/01/19(月) 22:12:58forの後ろにセミコロンとか、滅多に見ねーw
0407デフォルトの名無しさん
2009/01/21(水) 00:13:43本当に初歩的な質問で申し訳ないのですが
struct kouzoutai{
int menbahensuu;
};
int kouzoutaihensuunokosuu=3;
struct kouzoutai kouzoutaihensuu[kouzoutaihensuunokosuu];
こうすると「定数式が必要」と出てエラーが出ます0。
構造体変数の個数を変数で管理したいのですが、無理なのでしょうか?
0408デフォルトの名無しさん
2009/01/21(水) 00:16:17それはC99から使えます
それ以前では使えません
0409デフォルトの名無しさん
2009/01/21(水) 00:16:51変数じゃだめだな。
C++なら、
const int kouzoutaihensuunokosuu = 3;
Cなら
#define kouzoutaihensuunokosuu 3
で。
0410デフォルトの名無しさん
2009/01/21(水) 00:20:23買った本の発行日が2006年なのでそんな古い規格では無い・・・と信じたい
>>409
前者です。動きました!
これで構造体変数の個数を変える時にそれに関わるfor文まで一々直さなくて済みます。
本当にありがとうございました!
0411デフォルトの名無しさん
2009/01/21(水) 00:21:23当然deleteが必要になるがw
0412デフォルトの名無しさん
2009/01/21(水) 00:26:340413デフォルトの名無しさん
2009/01/21(水) 00:40:09> 買った本の発行日が2006年なのでそんな古い規格では無い・・・と信じたい
最新のgccだって、オプション付けなきゃ通らないだろ
0414デフォルトの名無しさん
2009/01/21(水) 00:44:070415デフォルトの名無しさん
2009/01/21(水) 00:48:53そうなんですか
HSPから移ったばかりでそこら辺がどうにもよくわからず・・・
ありがとうございました
0416デフォルトの名無しさん
2009/01/21(水) 00:53:55C99を積極的に使ってる話はほとんど聞いたことがない
それでも標準化委員会は懲りずにC1Xというのの策定を進めてるようだが
0417デフォルトの名無しさん
2009/01/21(水) 00:55:320418デフォルトの名無しさん
2009/01/21(水) 00:56:440419デフォルトの名無しさん
2009/01/21(水) 01:00:47最初の「標準規格」には皆こぞって準拠させようとするけど
それ以降の新規格にはベンダーの姿勢がまちまちな場合が多いよね。
書かれるコードも「最初の規格に準拠したものなら動かせる」ように努力するから
「動かすには最新規格に準拠した処理系が必要」なコードはなかなか生産されないし。
0420デフォルトの名無しさん
2009/01/21(水) 01:05:51FORTRANみたいに、おじいちゃん先生が教えてる言語は基準にならないだろ・・・
0421デフォルトの名無しさん
2009/01/21(水) 01:13:560422デフォルトの名無しさん
2009/01/21(水) 03:13:09動的配列は new より先に std::vector を薦めるべきだ。
0423デフォルトの名無しさん
2009/01/21(水) 14:48:37つまり、速度はCキャストの方が上ですか?
0424デフォルトの名無しさん
2009/01/21(水) 15:14:02お前の心配は無駄なことだといえる
0425デフォルトの名無しさん
2009/01/21(水) 15:22:02CSVのデータを1行づつ持ってきます。その後カンマで分割し、それぞれを全てバイナリでテーブル形式にします
とあるのですが、テーブル形式とはなんでしょう?バイナリとは?
教えてくださると助かります。
0426423
2009/01/21(水) 15:27:010427デフォルトの名無しさん
2009/01/21(水) 15:52:29テーブルは表のこと。配列を使うことが多い。
バイナリは内部表現形式のこと。"abc"のバイナリは(普通は)0x61, 0x62, 0x63, 0x00。
って説明しちゃうと混乱するかなぁ。
プログラムで扱うデータは全部バイナリなんで、その文章中の「バイナリで」はあまり意味がないよ。
それとも、数と解釈できる文字列は整数型か浮動小数点型にするって意味なのかな?
CSVデータとして扱ってる間はそんなことしない方がいいと思うけど。
0428デフォルトの名無しさん
2009/01/21(水) 16:00:00ありがとうございます。
とすると、バイナリというのは16進数ということですか?
それと、テーブルの指定で
31 0
|データ1|データ2|
|データ3|データ4|
というのが在ったのですが、この場合どう配列を作ればいいでしょうか?
ちなみに全て数値で、データ1のみ16進数です
0429デフォルトの名無しさん
2009/01/21(水) 16:35:40>とすると、バイナリというのは16進数ということですか?
16進を使うのは、バイト単位で区切られているものの列を人間が見易いようにするため。
コンピュータの内部は2進。だからバイナリという。binaryは本来は2進数という意味。
(以上わかってたならいいんだけど念の為説明。わかってたら無視して。)
> 31 0
> |データ1|データ2|
> |データ3|データ4|
うーん、うまく解釈できない。
あなたに要求を出した人に、あなたが要求の仕様を理解できるように説明してもらうべきです。
0430デフォルトの名無しさん
2009/01/21(水) 16:48:31すみません、ありがとうございます。
多分、short型にするということかな・・・?と思ったのですが、あまり詳しくないので聞いてみました。
そうですよね。忙しそうなので聞きづらかったのですが聞いてみます
0431デフォルトの名無しさん
2009/01/21(水) 18:18:36まさか2chで聞くとは思ってもいないだろうよ。
0432デフォルトの名無しさん
2009/01/21(水) 19:47:40atoiとか使ってさあ。どんなデータか知らないけど。
0433デフォルトの名無しさん
2009/01/21(水) 19:49:43そのままダンプするともとれる
0434デフォルトの名無しさん
2009/01/21(水) 20:01:37よくchar型配列に文字列の終端として0を入れてるソース見るけど
ありえないだろうけどヌル文字が値0じゃない環境の為に常に'\0'でかくべき
っていうスタンスは要らぬ気遣い?
0435デフォルトの名無しさん
2009/01/21(水) 20:11:09\141 は何を表す?
\x61 は何を表す?
では \0 は?
0436デフォルトの名無しさん
2009/01/21(水) 20:24:548進数の0ってこと?
それは説得力ないなぁ
0437デフォルトの名無しさん
2009/01/21(水) 20:28:14ヌル文字の文字コードは0であると規格で規定されている。
ただ、0 と書くより '\0' と書いた方が文字である事が分かりやすくはある。
>>436
本当に8進数の0です。
0438デフォルトの名無しさん
2009/01/21(水) 20:35:39その一部に
// 利用可能なゲームコントローラーの列挙関数を実行
if(FAILED(m_pDInput->EnumDevices(DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback, NULL, DIEDFL_ATTACHEDONLY))) {
return E_FAIL;
}
という部分があるのですがビルドすると
error C3867: 'CDXInput::EnumJoysticksCallback': 関数呼び出しには引数リストがありません。メンバへのポインタを作成するために '&CDXInput::EnumJoysticksCallback' を使用してください
とエラーが出るので指示通り引数の一部を&CDXInput::EnumJoysticksCallbackと変えたら
error C2664: 'IDirectInput8W::EnumDevices' : 2 番目の引数を 'BOOL (__stdcall CDXInput::* )(const DIDEVICEINSTANCE *,void *)' から 'LPDIENUMDEVICESCALLBACKW' に変換できません。
とエラーが出ます。 解決方法教えていただけませんか
ちなみにEnumJoysticksCallbackは同じクラス内のpublicにBOOL CALLBACK CDXInput::EnumJoysticksCallback(const DIDEVICEINSTANCE *pdidInstance, void *pContext)
としてあります
0439デフォルトの名無しさん
2009/01/21(水) 20:47:16EnumJoysticksCallbackにstatic付けておけ。
おそらく、EnumDevicesでNULLを渡しているところにthis渡せばいい。
すると、EnumJoysticksCallbackのpContextから渡したthisが取り出せるという仕組みのはずだ。
0440デフォルトの名無しさん
2009/01/21(水) 20:51:460441デフォルトの名無しさん
2009/01/21(水) 20:54:200442デフォルトの名無しさん
2009/01/21(水) 21:06:250443デフォルトの名無しさん
2009/01/21(水) 21:53:520444デフォルトの名無しさん
2009/01/21(水) 21:54:270445デフォルトの名無しさん
2009/01/21(水) 21:54:58消えろカス
0446デフォルトの名無しさん
2009/01/21(水) 22:45:010447デフォルトの名無しさん
2009/01/21(水) 22:48:34回線切っ(ry
0448439
2009/01/21(水) 22:55:37その代りに
'->SetProperty' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
'->CreateDevice' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。
静的でないメンバ 'CDXInput::m_pJoyDevice' への参照が正しくありません。
=======================================================================================
if(FAILED(m_pDInput->CreateDevice(pdidInstance->guidInstance, &m_pJoyDevice, NULL))) {
return DIENUM_CONTINUE;
}
=======================================================================================
と新たに3つエラーが出てきたので
クラスのprivateで宣言されている
LPDIRECTINPUT8 m_pDInput;
LPDIRECTINPUTDEVICE8 m_pJoyDevice;
にstaticをつけたらエラーはなくなりましたが
外部シンボル ""private: static struct IDirectInputDevice8W * CDXInput::m_pJoyDevice" (?m_pJoyDevice@CDXInput@@0PAUIDirectInputDevice8W@@A)" は未解決です。
外部シンボル ""private: static struct IDirectInput8W * CDXInput::m_pDInput" (?m_pDInput@CDXInput@@0PAUIDirectInput8W@@A)" は未解決です。
というエラーが発生しました
解決方法ご教授ください、宜しくお願いします
ちなみにスレ違いだったら申し訳ないです・・・
長文失礼しました
0449デフォルトの名無しさん
2009/01/21(水) 22:56:24>>439 レスありがとうです
0450デフォルトの名無しさん
2009/01/21(水) 23:01:120451448
2009/01/21(水) 23:31:31静的メンバ関数とメンバ関数の違いを理解しました
実体を宣言していなかったので
LPDIRECTINPUT8 CDXInput::m_pDInput = m_pDInput;
LPDIRECTINPUTDEVICE8 CDXInput::m_pJoyDevice = m_pJoyDevice;
と宣言したら無事ビルドできました。
ありがとうございました
0452デフォルトの名無しさん
2009/01/21(水) 23:40:19int main()
{
int x = 0;
while( x < 10000 )
{
printf("ループ%d回目です\n", x );
x++;
}
printf("ループ終了");
return 0;
}
キー入力でこのループを止められるようにしたいんだが
これからどうすればいいのかわからん
助けてくれ
0453デフォルトの名無しさん
2009/01/21(水) 23:42:40ctrl+c
0454デフォルトの名無しさん
2009/01/21(水) 23:42:53環境依存になるから、環境書かないと。
0455デフォルトの名無しさん
2009/01/22(木) 00:00:56windowsXPでVisual Windows for BC++ってソフト使ってます
0456デフォルトの名無しさん
2009/01/22(木) 00:07:17その2つにstaticつけちゃ意味ないだろ。
0457デフォルトの名無しさん
2009/01/22(木) 00:12:14>>452は俺ですよ
0459デフォルトの名無しさん
2009/01/22(木) 00:57:38BOOL CALLBACK CDXInput::EnumJoysticksCallback(const DIDEVICEINSTANCE *pdidInstance, void *pContext)
{
return static_cast<CDXInput*>(pContext)->(pdidInstance);
}
んで、非staticなBOOL CDXInput::EnumJoysticksCallback(const DIDEVICEINSTANCE *pdidInstance)を作る。
当然、この中では非staticなメンバにもアクセスし放題というわけだ。
そして、EnumDevicesの3番目の引数に必ずCDXInputのthisを渡すこと。
0460デフォルトの名無しさん
2009/01/22(木) 02:00:16free(*hoge)でいいの?
0461デフォルトの名無しさん
2009/01/22(木) 02:13:000462デフォルトの名無しさん
2009/01/22(木) 07:23:01{
return static_cast<CDXInput*>(pContext)->pdidInstance;
}
としたのですが
error C2039: 'pdidInstance' : 'CDXInput' のメンバではありません。gamelib.h(787) : 'CDXInput' の宣言を確認してください。
と出ます。
pContex->はCDXInputクラスの関数とメンバ変数が出るので詰まってしまいました
static_castなどでググっても解決しなかったので教えていただけませんか
宜しくお願いします
ちなみに
return static_cast<CDXInput*>(pContext)->(pdidInstance);
とするとエラーで出まくります
error C2059: 構文エラー : '('
error C2143: 構文エラー : ';' が '__stdcall' の前にありません。
error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
こういう感じのが30個くらい
0463デフォルトの名無しさん
2009/01/22(木) 07:27:450464デフォルトの名無しさん
2009/01/22(木) 07:54:54何がしたいのかよく判らんが、CDXInputのメンバを参照したいのでなければそのキャストはおかしい。
逆に言うと、そのキャストはCDXInputのメンバを参照する目的に適っている。
pdidInstanceとやらがCDXInputのメンバでないのなら、そりゃぁエラーにもなるさ。
0465デフォルトの名無しさん
2009/01/22(木) 08:11:45staticなEnumJoysticksCallbackはこう。
BOOL CALLBACK CDXInput::EnumJoysticksCallback(const DIDEVICEINSTANCE *pdidInstance, void *pContext)
{
return static_cast<CDXInput*>(pContext)->EnumJoysticksCallbackNonStatic(pdidInstance);
}
そして、非staticなEnumJoysticksCallbackNonStaticを作る。
BOOL CDXInput::EnumJoysticksCallbackNonStatic(const DIDEVICEINSTANCE *pdidInstance)
{
//メンバにアクセスし放題
}
0466デフォルトの名無しさん
2009/01/22(木) 08:32:120467デフォルトの名無しさん
2009/01/22(木) 15:58:14if(i) fwrite(buf, 1024, 1, fp);
こういう風にするとデータが1024byte未満の場合、iが0になって書き込みがスルーされてしまいます。
1byteずつ読み書きするようにしてやれば意図通り動くのですが、遅くて使い物になりません。
C/C++で大きな容量を一度に読み書きするにはどうすればいいのでしょうか?
0468デフォルトの名無しさん
2009/01/22(木) 16:00:17if(i) fwrite(buf, 1024, 1, fp);
↑
0469デフォルトの名無しさん
2009/01/22(木) 16:03:35if(i) fwrite(buf, 1, i, fp);
0470デフォルトの名無しさん
2009/01/22(木) 16:12:18ありがとうございます
fread(buf, 1, 1024, fp)
fread(buf, 1, 1, fp) //*1024
この二つは同じことだと思い敬遠していましたが、全然違いますね
0471デフォルトの名無しさん
2009/01/22(木) 17:02:13前者は1回しか関数が呼び出されないが後者は1024回の関数呼び出しが行われるからな
0473デフォルトの名無しさん
2009/01/22(木) 20:19:15ある一定の数以上渡すと(プログラム本体にD&D)アクセス権がないと表示されます。
なにか文字数等の制限でもあるんですか?
OSはWinXPです
0474デフォルトの名無しさん
2009/01/22(木) 21:54:38>464はスルーかい。
0475デフォルトの名無しさん
2009/01/23(金) 01:25:3532,768文字が限界だったと思う。
多分CreateProcessの制限なんじゃねーの?
ttp://msdn.microsoft.com/en-us/library/ms682425.aspx
0476472
2009/01/23(金) 06:42:52やりたいこととは
DirectInputを初期化して使用可能にするクラスを作っていたのですが
使用可能なコントーラーを列挙するCallback関数を作るときに>>438
のエラーが出たので質問したらstaticをつければいいってことなのでその方向で
やってました
0477デフォルトの名無しさん
2009/01/23(金) 08:44:48ますそこを理解してから、どのようにすれば静的メンバ関数にクラスインスタンスの内容を渡せるのか考えてみてください。
何でも言われた通りにするだけではなく、きちんと意味を理解すべく自助勉強しましょう。
なお、このメッセージに対する返答は必要ありません。読み終えたら、ただちに自習を始めてください。
0478デフォルトの名無しさん
2009/01/23(金) 10:04:39いまだにemacs上でシコシコやるのが一般的なの?
eclipse + cdt とか邪道?
0479デフォルトの名無しさん
2009/01/23(金) 11:33:35そういえば C++ なフリーソフトのプロジェクトって設計資料どうしてんだろ。
0480デフォルトの名無しさん
2009/01/23(金) 12:04:49staticにする以外できないから。
0481デフォルトの名無しさん
2009/01/23(金) 14:05:1415 0
├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤
8 0 0 0
こんな感じで4バイト区切りで変数に格納したいのですがどうやるのでしょう?
格納後、1000|0000|0000|0000| となっていてほしいんです
0482デフォルトの名無しさん
2009/01/23(金) 14:06:590483デフォルトの名無しさん
2009/01/23(金) 14:07:010484デフォルトの名無しさん
2009/01/23(金) 14:07:42てかお前ら書き込みすぎだろwww
0485デフォルトの名無しさん
2009/01/23(金) 14:08:52プログラムを書くと良いよ。
0486デフォルトの名無しさん
2009/01/23(金) 14:09:47とりあえず自分で書いたコードを貼ってくれ。意味がわからん。
0487デフォルトの名無しさん
2009/01/23(金) 14:19:084「ビット」の間違いだよな?
BCDとかパック10進数とかでぐぐれ
0488デフォルトの名無しさん
2009/01/23(金) 14:25:214バイト区切りじゃなくて4ビット区切りだよね。Packed BCDという形式。
ある数Aを10で割った余りは、Aの10進表記での1の位の数なんだ。
ある数Aを10で割った商は、Aの10進表記での1の位を除いた数なんだ。
これを繰り返すことでAの 1の位の数, 10の位の数, 100の位の数, ・・・ を得ることができる。
それらを収めたい位置にシフトして足せば終わり。
このシフトして足すのも、普通は割るのと同じループ内でやってしまう。
0489デフォルトの名無しさん
2009/01/23(金) 14:32:23c言語によるgmres法のプログラムがあったら教えてもらいたい。
今日どうしても必要なんだ。
0490デフォルトの名無しさん
2009/01/23(金) 14:33:26急ぐならならマルチはやめるべきだね。
0491デフォルトの名無しさん
2009/01/23(金) 14:59:12何か方法はありませんか?
typedef struct
{
int a;
int b;
}
structure;
void hoge( structure::int* p, structure* p0, structure* p1 )
{
printf( "%d %d\n", p0->*p, p1->*p );
}
void hogehoge( void )
{
structure a, b;
a.a = 0;
a.b = 1;
b.a = 2;
b.b = 3;
hoge( &structure::a, &a, &b );
hoge( &structure::b, &a, &b );
}
0492デフォルトの名無しさん
2009/01/23(金) 14:59:56すみませんでした
反省します
0493デフォルトの名無しさん
2009/01/23(金) 15:19:50ぐぐったらそれっぽいコードが結構出てきたよ?
0494デフォルトの名無しさん
2009/01/23(金) 15:21:44配列にしてindexを指定するのはダメ?
0495491
2009/01/23(金) 15:31:47ポリゴンの座標や回転、拡縮などの値を
キーフレーム毎にグラフにしたいのですが、
既にクラスは使用されていてかつ、
intやfloatが入り混じっているため
templateで解決したいなぁ、と。
やっぱりunionあたりで解決すべきなのかなぁ・・・。
0496デフォルトの名無しさん
2009/01/23(金) 20:21:48メンバaを呼ぶ関数とメンバbを呼ぶ関数を作って、関数ポインタを使って切り替えるってのはどうかな
0497デフォルトの名無しさん
2009/01/23(金) 21:25:390498デフォルトの名無しさん
2009/01/23(金) 22:21:26C++を使う。
まさにそれ、メンバへのポインタと言う。
その中のstructure::int* pをint structure::* pにして
<stdio.h>をインクルードすればコンパイル通る。
0499デフォルトの名無しさん
2009/01/23(金) 22:56:41offsetofとかその手のマクロの利用で可能
0500デフォルトの名無しさん
2009/01/23(金) 23:03:19じゃぁ出番無いわごめんね
0501デフォルトの名無しさん
2009/01/24(土) 08:42:47そんな危険なものを使ってはらめー
0502デフォルトの名無しさん
2009/01/25(日) 12:30:400503デフォルトの名無しさん
2009/01/25(日) 12:57:46お前が必要とする方が重要。
0504デフォルトの名無しさん
2009/01/25(日) 23:28:33できるはずなのですが、いまいち書き方がわからないです。
0505デフォルトの名無しさん
2009/01/25(日) 23:30:250506デフォルトの名無しさん
2009/01/25(日) 23:30:270507デフォルトの名無しさん
2009/01/25(日) 23:31:01>>505-506
0508デフォルトの名無しさん
2009/01/25(日) 23:31:540509デフォルトの名無しさん
2009/01/25(日) 23:38:070510デフォルトの名無しさん
2009/01/25(日) 23:42:400511デフォルトの名無しさん
2009/01/25(日) 23:46:51昔数学で習ったような。
0512デフォルトの名無しさん
2009/01/25(日) 23:51:580513デフォルトの名無しさん
2009/01/26(月) 00:20:510514デフォルトの名無しさん
2009/01/26(月) 00:26:420515デフォルトの名無しさん
2009/01/26(月) 12:31:19char* s
が与えられてるとき,これを標準ライブラリのstringに
変換するにはどうすればいいでしょうか?
string str = new string(*s)
とすると
「'char' から 'const std::allocator<_Ty> &' に変換できません。」
というコンパイルエラーが出ました。@VisualStudio2008EE
0516デフォルトの名無しさん
2009/01/26(月) 12:36:42string *str = new string(s); // これはあんまりやんね
0517デフォルトの名無しさん
2009/01/26(月) 12:55:42ああポインタそのまま使えるんですね
どうもありがとうございました><
0518491
2009/01/26(月) 14:12:36お礼が遅くなり申し訳ありません。
>>496
ゲッターをインスタンス化するのは
私個人のイメージ的によくないのです・・・
>>497
ありがとうございます。
自分なりに考え、以下のように実装してみました。
structure* p(0);
hoge( (int)&p->a, &a, &b );
>>498
そんな書き方があるのですね。
試してみます。
ありがとうございます。
>>499,501
offsetofというのは継承などが考慮されるのでしょうか?
0519デフォルトの名無しさん
2009/01/26(月) 14:19:58> structure* p(0);
> hoge( (int)&p->a, &a, &b );
よりによって最悪な方法を選んだな。
0520491
2009/01/26(月) 14:29:47できました。
ありがとうございます。
>>519
やっぱりなにかまずいのでしょうか?
以下のように使っているのですが・・・
void hoge( int ofs, structure* a, structure* b )
{
int valuea ( *( (int*)( (char*)a + ofs ) ) );
int valueb ( *( (int*)( (char*)b + ofs ) ) );
/*略*/
}
0521デフォルトの名無しさん
2009/01/26(月) 14:33:01ヌルポインタ p に -> を適用した時点で未定義動作。
offsetof() の典型的な実装ではあるけど、実際にそれをやっていいのは
動作保証のできるコンパイラ実装者だけ。
0522491
2009/01/26(月) 14:38:03そうなのですか・・・
ただ、VC上でテストしてみたところ、
想定していた値(オフセット値)が出てきたため
VCでメイクしている限りは大丈夫と
思っているのですがどうなのでしょうか?
VCのデバッガ上でもNULLポインタのメンバアクセス時は
オフセット値がthisポインタだったりしますし・・・
0523デフォルトの名無しさん
2009/01/26(月) 17:48:11}
と
if()
{
}
はどっちがいいと思いますか?
3年間自分の中で決着が付きません
0524デフォルトの名無しさん
2009/01/26(月) 18:05:510525デフォルトの名無しさん
2009/01/26(月) 18:31:46この場合は例えば
CMobA
CMobB
CMobC
というクラスを3つ作るのと
CMobというクラスを作り配列で一度にやるのはどちらがいいですか?
0526デフォルトの名無しさん
2009/01/26(月) 18:46:05そんなの考えるまでもないだろ
0527デフォルトの名無しさん
2009/01/26(月) 18:53:23CMobという抽象クラスを作って、それを継承したCSlimeとCGoblineとCTorolというのを作れ
AやBやCは、クラス名というより変数名だ
CMobがnameというメンバを持っているなら、そっちに保持してもいいけどな
0528デフォルトの名無しさん
2009/01/26(月) 18:53:32他にどう書くんだよw
0529デフォルトの名無しさん
2009/01/26(月) 19:08:56つい最近だがelseは下のように書くようにした
// 1つ目のifの中に入る条件のコメント
if () {
// ifの中で行う処理のコメント
}
// 2つ目のifの中に入る条件のコメント
else if() {
// ifの中で行う処理のコメント
}
仮に間違ってelseより前に処理を記述しても、コンパイルエラーが起きてくれるからという理由
まぁ、所詮この辺は好みだよな・・・昔は違ったし
0530デフォルトの名無しさん
2009/01/26(月) 19:15:08{
}
VC使うようになってこうなった。
理由は、エディタの行間を広くできなくて、{で一行分あけたいから。
0531デフォルトの名無しさん
2009/01/26(月) 20:34:01理由は、目視でブロックを把握しやすいから
0532デフォルトの名無しさん
2009/01/26(月) 20:39:420533デフォルトの名無しさん
2009/01/26(月) 21:16:50stack overrun を検出するツールなどはありますでしょうか?
現在のテスト環境はlinux(kernel 2.6系), gcc(g++)です。
デバッグは主に、valgrindを使ってますが、coreをバックトレースすると、
スタックが壊れてるような感じになっています。
0534デフォルトの名無しさん
2009/01/26(月) 21:21:57まして、移動先でも何にも触れてないし。
で、valgrindで何が不満なの?
0535デフォルトの名無しさん
2009/01/26(月) 21:22:520536デフォルトの名無しさん
2009/01/26(月) 21:29:43スタックオーバランはスタックが暴走してスタック外のエリアを壊すイメージなんだが。
0537デフォルトの名無しさん
2009/01/26(月) 21:36:240538デフォルトの名無しさん
2009/01/26(月) 21:37:040539デフォルトの名無しさん
2009/01/26(月) 21:52:03スタックがあふれるも何か変だが、スタックが暴走するって意味不明すぎ
0540デフォルトの名無しさん
2009/01/26(月) 21:52:04valgrindもstackを一応チェックしてるっぽいのですが、
検出されない場合もあるので、困っております。
例えば、以下のような場合です。
(スタックでこのようなエラーを検出するのは無理そうな気もしますが。)
int main(void) {
int arr[10];
int arr2[10];
arr[12] = 20;
return 0;
}
0541デフォルトの名無しさん
2009/01/26(月) 21:56:21{
static UINT __cdecl thread(LPVOID pParam);
BOOL flag = 0;
AfxBeginThread(CClass::thread, this, THREAD_PRIORITY_NORMAL);
}
UINT CClass::thread(LPVOID pParam)
{
While( flag == 0 ){
;
}
}
flagが静的じゃないとコンパイルエラーが出ます。
While( ((CMainFrame*)AfxGetMainWnd())->m_Class.flag == 0 )
とするとコンパイルはできるんですが、電源切らないと何も操作できなくなるんです。
動的な変数を別スレッドの中で使うにはどうすればいいんですか?
0542デフォルトの名無しさん
2009/01/26(月) 21:57:27出来ないって書いてあるよ(FAQにも)
http://ja.wikipedia.org/wiki/Valgrind#.E5.88.B6.E7.B4.84
0543デフォルトの名無しさん
2009/01/26(月) 21:59:00なんで標準で用意されたoffsetofマクロ使わずに自分で再発明しようとするの?
話はそこからだ
0544デフォルトの名無しさん
2009/01/26(月) 22:07:38{
static UINT __cdecl proxy(LPVOID pParam);
UINT thread();
BOOL flag = 0;
AfxBeginThread(CClass::thread, this, THREAD_PRIORITY_NORMAL);
}
UINT CClass::proxy(LPVOID pParam)
{
CClass *const this_ptr = (CClass *)pParam;
return this_ptr->thread();
}
UINT CClass::thread()
{
While( flag == 0 ){
;
}
}
0545デフォルトの名無しさん
2009/01/27(火) 00:11:44http://pc11.2ch.net/test/read.cgi/tech/1231564903/
埋まった。
正直ここに合流でもいい気がするが。
0546デフォルトの名無しさん
2009/01/27(火) 00:13:370547デフォルトの名無しさん
2009/01/27(火) 00:24:02いや、なのでvalgrindでなく、他にstack overrunを検出できるようなツールはないかなーという質問でした。
0548デフォルトの名無しさん
2009/01/27(火) 01:16:06BoundsChecker
0549デフォルトの名無しさん
2009/01/27(火) 01:59:53しかしlinux上のシステムなので、linux上で動くツールに関してはいかがでしょうか?
0550デフォルトの名無しさん
2009/01/27(火) 08:02:00ありがとうございました。2段階にしてできました!
0551デフォルトの名無しさん
2009/01/27(火) 08:48:44constはどういうことですか?はずしても動きますが、constを使ったことがないので教えてください
0552デフォルトの名無しさん
2009/01/27(火) 09:22:380553デフォルトの名無しさん
2009/01/27(火) 09:27:13ここで訊くことこそ調べることです。
回答したくてしたくて仕方がない回答者に回答する機会を与えているのに
何がそんなに不満なんですか?
目の前のありとあらゆることに苛立ちを感じる青春真っ只中のボクちゃんですか?
0554デフォルトの名無しさん
2009/01/27(火) 10:33:31gcc4 の -fstack-protector
0555デフォルトの名無しさん
2009/01/27(火) 10:46:41いいえ。
0556デフォルトの名無しさん
2009/01/27(火) 11:02:50やめてくれ
俺はここでconstを使う理由を知りたいだけなんだ
教えてくれた本人にスルーされたらお前のせいだぞ
0557デフォルトの名無しさん
2009/01/27(火) 11:08:49少なくとも、あんたが>551なのだとしたら「理由を教えてください」と書かないから混乱する。
それはさて、書き換えることが判っているオブジェクトじゃなければ、constをつけておくのはいい習慣だと思うが。
0558デフォルトの名無しさん
2009/01/27(火) 11:18:28はずしても動くから心配だった。thx
0559デフォルトの名無しさん
2009/01/27(火) 11:35:37なんでメモリリークの追跡とかいう基本的な機能がVSにはないの?
0560デフォルトの名無しさん
2009/01/27(火) 11:49:23あるよ。
BoundsCheckerはそれだけに留まらず、例えば関数単体試験なら入力条件を自動生成したり、
パフォーマンス分析をしたりといった機能がある。
激しく重いし、決して使い易いとは言えないけどね。
0561デフォルトの名無しさん
2009/01/27(火) 11:58:41STLのメモリリークとかClose忘れとかはどうしようもなくない?
0562デフォルトの名無しさん
2009/01/27(火) 12:00:510563デフォルトの名無しさん
2009/01/27(火) 12:02:450564デフォルトの名無しさん
2009/01/27(火) 12:06:24なるべく短い方が見やすい
0565デフォルトの名無しさん
2009/01/27(火) 12:12:080566デフォルトの名無しさん
2009/01/27(火) 12:15:46変数名も基本は一文字だよな?
0567デフォルトの名無しさん
2009/01/27(火) 12:29:52constが正しく設定されてないソースを組み込むと、プロジェクト全体に波及してぐちゃぐちゃになるからしっかり書いてくれ。
0568デフォルトの名無しさん
2009/01/27(火) 13:11:13constが必要にならないプロジェクトは十中八九才能の無いヤツが関わっている。
0569デフォルトの名無しさん
2009/01/27(火) 13:25:300570デフォルトの名無しさん
2009/01/27(火) 16:20:180571デフォルトの名無しさん
2009/01/27(火) 16:23:35> constが正しく設定されてないソースを組み込むと、プロジェクト全体に波及してぐちゃぐちゃになる
ソースレビューでしょんべんちびるくらい厳しく突っ込むといいよ。
それで直らないならリーダに文句言って変えてもらえ。
0572デフォルトの名無しさん
2009/01/27(火) 16:42:36ローカル変数へのconstはそれほどがんばらなくてもよいと思うぞ。
0573デフォルトの名無しさん
2009/01/27(火) 17:10:21C++の話だけど、引数だけでなくメンバ関数のconstもちゃんと使うべき。
0574デフォルトの名無しさん
2009/01/27(火) 17:20:17後はなんとかなりそうな気がする
0575デフォルトの名無しさん
2009/01/27(火) 17:30:100576デフォルトの名無しさん
2009/01/27(火) 17:56:130577デフォルトの名無しさん
2009/01/27(火) 20:25:19「メンバ関数にconstが付いてないからconstポインタから呼べないんですけど」
と言ったら、「constにしなきゃいいじゃん」と言われて唖然とした。
その課長のソースは>>562のように恐ろしいほど汚かったw
0578デフォルトの名無しさん
2009/01/27(火) 20:36:15使ってたのは昔だから、今だとどうなんだろう
0579デフォルトの名無しさん
2009/01/27(火) 21:53:570580デフォルトの名無しさん
2009/01/27(火) 22:05:43malloc関数を呼び出すといきなりクラッシュします。
引数も間違ってはいません。
どうしてなのか教えてください。
0581デフォルトの名無しさん
2009/01/27(火) 22:07:32どっか、よそでヒープを壊してるんじゃね?
0582デフォルトの名無しさん
2009/01/27(火) 22:26:27http://www.kouno.jp/home/c_faq/c7.html#19
まあ>581の言う通りだが
0584デフォルトの名無しさん
2009/01/27(火) 22:52:46くわしくって、>>582に書いてあるじゃん。
0586デフォルトの名無しさん
2009/01/27(火) 23:04:35しかしその間接的な原因は様々。
0587デフォルトの名無しさん
2009/01/27(火) 23:05:50そんな保障はできないけど
とりあえず単体でそのコードを動かして動くかどうかやってみるとか
ソースを全部コメントにしてみてそのコードを入れて動くのを確認してから
徐々にコメントをはずしていってエラー箇所を見つけるとか
エラートラップみたいなのがないなら地道な努力しかないな
そうやって考えうる原因を1つ1つ潰していくしかない
0588デフォルトの名無しさん
2009/01/27(火) 23:07:110589デフォルトの名無しさん
2009/01/27(火) 23:09:210590デフォルトの名無しさん
2009/01/27(火) 23:12:180591デフォルトの名無しさん
2009/01/27(火) 23:14:490592デフォルトの名無しさん
2009/01/27(火) 23:16:30メンバ関数じゃないし
0593デフォルトの名無しさん
2009/01/27(火) 23:21:120594デフォルトの名無しさん
2009/01/27(火) 23:23:09親クラスの関数を任意に呼びだせるわけではないんだし
0595デフォルトの名無しさん
2009/01/27(火) 23:24:320596デフォルトの名無しさん
2009/01/27(火) 23:59:23みなさんありがとうございますm(_ _)m
勉強になりました。
0597デフォルトの名無しさん
2009/01/28(水) 01:24:28はユーザから見える割り当て領域より前に呼び出し元情
報を置いて、領域末尾にアドレスから計算されるチェッ
クコード入れて適当なタイミングでチェックしてたな。
0598デフォルトの名無しさん
2009/01/28(水) 14:05:090599デフォルトの名無しさん
2009/01/28(水) 14:17:270600デフォルトの名無しさん
2009/01/28(水) 14:51:590601デフォルトの名無しさん
2009/01/28(水) 15:23:100602デフォルトの名無しさん
2009/01/28(水) 16:10:140603デフォルトの名無しさん
2009/01/28(水) 18:02:15{
public :
double test[1] = {12};
}
これなんでコンパイルできないんですか?
0604デフォルトの名無しさん
2009/01/28(水) 18:05:490605デフォルトの名無しさん
2009/01/28(水) 18:07:010606デフォルトの名無しさん
2009/01/28(水) 18:14:00コンストラクタで一括で初期化する場合はどうかけばいいんですか?
test = {12};
とか
test[] = {12};
とかやってもコンパイルできません
0607デフォルトの名無しさん
2009/01/28(水) 18:20:190608デフォルトの名無しさん
2009/01/28(水) 18:23:560609デフォルトの名無しさん
2009/01/28(水) 18:24:11CTestStatic() { test[] = { 12 }; }
みたく。そういえば、配列って初期化子使えたっけ?
0610デフォルトの名無しさん
2009/01/28(水) 18:36:00ふざけてるのかマジな分かりかねるんだが
0611デフォルトの名無しさん
2009/01/28(水) 18:39:550612デフォルトの名無しさん
2009/01/28(水) 18:42:14「配列って初期化子使えたっけ?」じゃなくて
「配列って初期化子リスト使えたっけ?」の間違いであります。
つまり
CTestStatic() : test[] = { 0, 1, 2 } {}
みたいにかけたっけ?
0613デフォルトの名無しさん
2009/01/28(水) 18:43:110614デフォルトの名無しさん
2009/01/28(水) 18:45:29コンストラクタでまとめて配列初期化するにはどうすればいいんですか?
0615デフォルトの名無しさん
2009/01/28(水) 18:46:26double *test か double test[0] にしろってこと?
っていうか、素直にコンパイラに聞いてみるか…むふん。
0616デフォルトの名無しさん
2009/01/28(水) 18:48:28>>608
コンストラクタ本体の中で代入を並べるしかない。
0617デフォルトの名無しさん
2009/01/28(水) 18:54:12コンストラクタ作っちゃダメだけど
CTestStatic a = {12};
あとC++0xではこう書けるようになる予定
CTestStatic() : test{ 0, 1, 2 } {}
0618デフォルトの名無しさん
2009/01/28(水) 19:01:13コンストラクタでそれをコピーすればいい。
0619デフォルトの名無しさん
2009/01/28(水) 19:04:53#include <iostream>
#include <algorithm>
#include <iterator>
using namespace std;
class hoge{
public:
hoge() { for ( int i = 0; i != 5; ++i ){ d[ i ] = i; }; }
void get() { copy( &d[ 0 ], &d[ 5 ], ostream_iterator< double >( cout, " " ) ); cout << endl; }
private:
double d[ 5 ];
};
class huga{
public:
huga() { d = new double[ 5 ] (); for ( int i = 0; i != 5; ++i ){ d[ i ] = i; }; }
void get() { copy( &d[ 0 ], &d[ 5 ], ostream_iterator< double >( cout, " " ) ); cout << endl; }
~huga() { delete [] d; }
private:
double * d;
};
int main(){
hoge h1; h1.get();
huga h2; h2.get();
return 0;
}
0620デフォルトの名無しさん
2009/01/28(水) 19:09:320621デフォルトの名無しさん
2009/01/28(水) 19:10:340622デフォルトの名無しさん
2009/01/28(水) 19:15:33class Hoge {
public:
Hoge() : d0(12), d1(4), d2(40), d(&d0) { }
int get(int i) { return d[i]; }
private:
int d0, d1, d2;
int *d;
};
int main()
{
Hoge hoge;
for (int i = 0; i < 3; ++i) {
std::cout << hoge.get(i) << std::endl;
}
}
0623デフォルトの名無しさん
2009/01/28(水) 19:21:240624デフォルトの名無しさん
2009/01/28(水) 19:22:420625デフォルトの名無しさん
2009/01/28(水) 19:24:190626デフォルトの名無しさん
2009/01/28(水) 19:24:55一時変数使ってもいいならもちろん出来るさ
0627デフォルトの名無しさん
2009/01/28(水) 19:45:49#include <iostream>
class Hoge {
public:
Hoge() {
static const int d[3] = { 12, 4, 40 };
memcpy(&m_d, d, sizeof m_d);
}
int get(int i) { return d[i]; }
private:
int m_d[3];
};
int main()
{
Hoge hoge;
for (int i = 0; i < 3; ++i) {
std::cout << hoge.get(i) << std::endl;
}
}
0628デフォルトの名無しさん
2009/01/28(水) 20:11:37正解
初心者大杉
0629デフォルトの名無しさん
2009/01/28(水) 20:13:050630デフォルトの名無しさん
2009/01/28(水) 20:13:54PODじゃなかったらしちゃだめだな
0631デフォルトの名無しさん
2009/01/28(水) 20:17:470632デフォルトの名無しさん
2009/01/28(水) 20:21:03非PODのPOD部分をmemcpyって規格で許されてたっけ
現実的には問題ないことが多いと思うけど
0633デフォルトの名無しさん
2009/01/28(水) 20:24:070634デフォルトの名無しさん
2009/01/28(水) 20:26:23全く問題ない
0635デフォルトの名無しさん
2009/01/28(水) 20:26:430636デフォルトの名無しさん
2009/01/28(水) 20:26:54セキュア関数を使えと文句を言われます!
0637デフォルトの名無しさん
2009/01/28(水) 20:30:23コンストラクタにこれを記述したらコンパイルできたのですが
使おうとするとdはないと言われますどうしてですか?
0638デフォルトの名無しさん
2009/01/28(水) 20:35:260639デフォルトの名無しさん
2009/01/28(水) 20:38:13>>627のように自分のメンバ変数へ複製している?
0640デフォルトの名無しさん
2009/01/28(水) 20:45:22寝言は寝て言え
0641デフォルトの名無しさん
2009/01/28(水) 21:04:12もういいや一個一個いれる
0642デフォルトの名無しさん
2009/01/28(水) 21:14:39> int get(int i) { return d[i]; }
m_d いらねーじゃん(w
0643デフォルトの名無しさん
2009/01/28(水) 21:15:55すまん。ミスだ。
return m_d[i]; が正しい。
0644デフォルトの名無しさん
2009/01/28(水) 21:17:19おぉー、{ }を使って初期化できたー★
memcpyの代わりにcopyを使うと>>636の言うとおり警告が出たけど、でもちゃんと動いた。
>warning C4996: 'std::copy': Function call with parameters that may be unsafe
0645デフォルトの名無しさん
2009/01/28(水) 21:21:440646デフォルトの名無しさん
2009/01/28(水) 21:50:500647デフォルトの名無しさん
2009/01/28(水) 21:52:23セキュア関数使った方がいいとは思うけどね
0648デフォルトの名無しさん
2009/01/29(木) 00:13:060649デフォルトの名無しさん
2009/01/29(木) 00:36:060650デフォルトの名無しさん
2009/01/29(木) 01:05:05CreateWindowでもう一度ウィンドウを作成して走らせるのはまずかったりするのでしょうか?
0651デフォルトの名無しさん
2009/01/29(木) 01:15:170652デフォルトの名無しさん
2009/01/29(木) 01:16:270653デフォルトの名無しさん
2009/01/29(木) 01:44:35char *dataというのもあったとして
(char *) hoge = data
ってこんな変換おけなの?
0654デフォルトの名無しさん
2009/01/29(木) 01:46:34無理。
0655デフォルトの名無しさん
2009/01/29(木) 02:06:200656650
2009/01/29(木) 02:15:08なるほど、安心しました。
ありがとうございます。
0657デフォルトの名無しさん
2009/01/29(木) 02:20:34memcpy() はスルーで std::copy() に警告出すの?ザルすぎる。
0658デフォルトの名無しさん
2009/01/29(木) 03:43:33A;
C;
}
else if(){
B;
C;
}
この場合Cのコードがダブってしまうけど,
関数にするほどの処理ではなくて,フラグ設定するのも返って読みづらくなる・・
という場合のうまい書き方って無いですか?
Cの処理はA,Bの結果を受け取るので処理の順番を変えることはできません。
0659デフォルトの名無しさん
2009/01/29(木) 03:56:12hoge x;
if() {
x = A;
}
else if() {
x = B;
}
C; //xを使う
0660デフォルトの名無しさん
2009/01/29(木) 03:57:39それだと両方の条件が偽になったときにダメだろ。
0661デフォルトの名無しさん
2009/01/29(木) 04:19:39レスどうもです。
xをあり得ない値で初期化しておいて
Cを実行する前にxの値をチェックするようにすればうまくいきますね。
がしかし,あり得ない値というのが将来あり得る値になるかもしれず
バグの元になりそうで怖い気がします。。
考え方はフラグと同じなのでおとなしくフラグ設定しておくのが無難なのでしょうか。
0662デフォルトの名無しさん
2009/01/29(木) 04:27:380663デフォルトの名無しさん
2009/01/29(木) 08:19:46最初のifの条件をaa、2番目をbbとしたとき、
if ((aa && A) || (bb && B)) { C; }
ただし、AとBは常に真のときに限る。
または、
if (aa) { A; }
else if (bb) { B; }
else { return; }
C;
ただし、問題の処理後にreturnするだけのときに限る。
まあどっちもアレなので、>>658のままでいいと思うが。
0664デフォルトの名無しさん
2009/01/29(木) 08:53:04if (aa || bb) {
if (aa) { A; }
else { B; }
C;
}
ただし、aaが副作用を伴わない場合に限る。
0665デフォルトの名無しさん
2009/01/29(木) 10:54:56そもそもそんなこと出来ない?
0666デフォルトの名無しさん
2009/01/29(木) 12:35:59std::mem_fun と std::mem_fun_t みたいな関係にすればよかろう
0667デフォルトの名無しさん
2009/01/29(木) 12:38:19テンプレートクラスにすればいいんじゃないか?
0668665
2009/01/29(木) 12:42:30クラステンプレートにしちゃうとそのクラスを引数で渡す関数なんかも
テンプレートにしなくちゃいけないからめんどいんですよね^^;
親クラスをテンプレートクラスにして基底クラスを渡せば出来そうですが・・・
コンストラクタ自体にテンプレート指定はできなそうですね^^;
mem_fun_tちょっと調べてみます
0669デフォルトの名無しさん
2009/01/29(木) 16:17:21同じ構造体をそれぞれ別の関数で参照したいのですが、
その時、同じ名前の変数で宣言しても出来ませんでした。おそらくローカル変数になる(?)
ので同じ名前でも同じ物を参照できないということだと思うのですが、どうやればいいでしょうか?
0670デフォルトの名無しさん
2009/01/29(木) 16:24:09書いたコードをアップ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0671デフォルトの名無しさん
2009/01/29(木) 16:27:15グローバル変数にすればいい
0672デフォルトの名無しさん
2009/01/29(木) 16:28:47グローバル変数にするか
それぞれの関数の引数に構造体のポインタを渡せばいい
0673デフォルトの名無しさん
2009/01/29(木) 16:31:56うpしました
No.8779です。
他にも動的変数が〜と指摘されたのですがいまいち・・・
0674デフォルトの名無しさん
2009/01/29(木) 16:34:12やはりそうですか。ありがとうございます
0675デフォルトの名無しさん
2009/01/29(木) 16:40:1946行目で引数が無いってエラーはでるけど、変数名がどうのってのは出てないぞ。
0676デフォルトの名無しさん
2009/01/29(木) 16:44:40自分なりに考えたのですが解らなかったので聞いてみたのですが大丈夫でしょうか?
ついでですが、引数無しで別関数に移動ということは出来ないのでしょうか?
0677デフォルトの名無しさん
2009/01/29(木) 16:49:43Cはオーバーロード無いんじゃね?
C++ならオーバーロードが使える。
0678デフォルトの名無しさん
2009/01/29(木) 16:49:47関数の引数が無しならグローバルにする。
引数有りでいいならポインタ渡しする。
グローバル変数使うのがダメで引数使うのもダメならどうしようもない。
0679デフォルトの名無しさん
2009/01/29(木) 17:04:22write_tbにあるローカルなWRbuffの宣言は要らなくて
グローバルなWRbuffの方に書き込みたいんじゃないのか?
0680デフォルトの名無しさん
2009/01/29(木) 17:08:16すいません、write_tbにあるWRbuffは消し忘れです。お手数おかけしました。
0681デフォルトの名無しさん
2009/01/29(木) 21:41:02cast as lvalue とも呼ばれるもので古い gcc では可能だった。
0682デフォルトの名無しさん
2009/01/29(木) 21:45:540683デフォルトの名無しさん
2009/01/29(木) 22:16:28*(char **)&hoge = data
で大抵の環境では動くだろ。
動かないのは
sizeof(char *) != sizeof(hoge *) な環境だけだと思う。
バスエラーがどうの、なんてのは、
同サイズならどっちのポインタでも一緒だし。
0684デフォルトの名無しさん
2009/01/29(木) 23:44:44char* states_[] = {"fine", "nomal", "sick"};
見たいな感じで、文字列のリストを定義したいんだけど、
そのまま書くとコンパイルエラーになります。
定石みたいのがあれば教えてください。
0685デフォルトの名無しさん
2009/01/29(木) 23:48:24staticにしたら、できなかったっけ?
0686デフォルトの名無しさん
2009/01/30(金) 00:01:18無理、あきらめてコンストラクタでやるしかない
近いのだと、コンストラクタで
static const char* tmp[] = {"fine", "nomal", "sick"};
を宣言してコピーするという手もある
0688デフォルトの名無しさん
2009/01/30(金) 00:15:03クラス宣言内で初期化する事はできないけど、
実体定義時に初期化できるよ
0689デフォルトの名無しさん
2009/01/30(金) 00:21:20class Hoge
{
public:
static char* states_[];
};
char* Hoge::states_[] = {"fine", "nomal", "sick"};
これでコンパイルできたけど、これじゃいかんの?
0691デフォルトの名無しさん
2009/01/30(金) 00:30:25という定義のLってなんですか?このLが無くても別に問題ないと思うんですけど。。
0692デフォルトの名無しさん
2009/01/30(金) 00:31:49L付きの文字列はワイド文字列だ。
const wchar_t *str = L"hahaha"; が正しい。
0693デフォルトの名無しさん
2009/01/30(金) 00:38:51L'A'みたいに文字に付く事もあるぜ
0694デフォルトの名無しさん
2009/01/30(金) 00:45:31wchar_tにしたらコンパイルできました。しかも出力するには
std::wcoutとかを使わないといけないなんて、
こんな変なの用途があるんですか?
0695デフォルトの名無しさん
2009/01/30(金) 00:46:120696デフォルトの名無しさん
2009/01/30(金) 00:47:120697デフォルトの名無しさん
2009/01/30(金) 00:51:53そのためのcharのでっかい版がwchar_t
まあwchar_tに日本語が入れられるとは限らないんだけどな
0698デフォルトの名無しさん
2009/01/30(金) 00:52:08Windowsみたいにそうでならない可能性が高いやつもあるけど。
0699デフォルトの名無しさん
2009/01/30(金) 01:06:030700デフォルトの名無しさん
2009/01/30(金) 02:16:070701デフォルトの名無しさん
2009/01/30(金) 03:09:531 aaa.txt
2 bbb.txt
3 ccc.txt
上で2を選択して削除→3を自動的に選択にしたいんだが、
2を削除するとどのアイテムも選択してない状態になる…。
リストボックスのSetCurSelみたいなのがあればいいんだけど。
0702デフォルトの名無しさん
2009/01/30(金) 07:03:23環境を書かないってことはどうせドザなんだろうけど、APIスレかMFCスレにでも隔離されててくれと思ってしまうな。
0703デフォルトの名無しさん
2009/01/30(金) 18:10:59freeなメモリは結構あるのに、allocationに失敗する(Out of Memory)現象に遭遇しています。
プロセスのメモリの使用状況を確認できるようなツール・コマンドはlinuxにありますでしょうか?
今は、googleperftoolsなどを使ってますが、フラグメンテーションしてるかどうかはわからない(?)
ので困っております。
どなたかわかりますでしょうか?
0704デフォルトの名無しさん
2009/01/30(金) 19:34:45本当に「freeなメモリは結構ある」の?どうやって調べたの?
・本当にアロケーションに失敗してるの?mallocの引数がでかすぎになってないか
ちゃんと確認したの?
・どのタイミングで失敗してるの?プログラムの起動直後?時間がたってから?
起動直後に多めに確保して使い回すとかを考える方が先じゃないの?
・フラグメンテーションの発生を確認したとして、それからどうすんの?カーネル改造するの?
・なんでUNIXスレやLinux板じゃなくてここで聞くの?ばかなの?死ぬの?
0705デフォルトの名無しさん
2009/01/30(金) 20:18:59つっこみありがとうございます。
・フラグメンテーションが原因であることは確定してるの?
確定はしてないですが、たぶんそうです。valgrindをとおしてもリークはないですし、
top上のvirtualもrssも実メモリサイズに対してかなり余裕があります。(実メモリ4G、top上の表示は1Gぐらい)
・本当にアロケーションに失敗してるの?mallocの引数がでかすぎになってないか
ちゃんと確認したの?
確認しました。
・どのタイミングで失敗してるの?プログラムの起動直後?時間がたってから?
起動直後に多めに確保して使い回すとかを考える方が先じゃないの?
大きめのバッチで、起動後3時間ぐらいした後です。
mmap時にENOMEMが返ってきます。
・フラグメンテーションの発生を確認したとして、それからどうすんの?カーネル改造するの?
C++のSTLをかなり使っているためメモリ管理が不透明(自分があまりわかってないだけ)な部分がありますが、
メモリをpoolするallocatorを自作するなりして、フラグメンテーションが起きにくくなるように調整します。
・なんでUNIXスレやLinux板じゃなくてここで聞くの?ばかなの?死ぬの?
Linux板も見ましたがあまりいいのが見つからなかったので、ここで質問させてもらいました。
まあ、あとlinux上の話ですが、プログラムに関係するので。
いい板があったら教えてください。
0706デフォルトの名無しさん
2009/01/30(金) 20:33:10あのー、これって要はアドレス空間が足りないってことだよね。
確かにフラグメントでもアドレス空間不足は起きるけどさ
munmapをちゃんとやってるか確認するほうがずっと先決だと思うんだけど。
0707デフォルトの名無しさん
2009/01/30(金) 21:05:09普通にSTL(vector, set)で大量(512Mぐらい)のメモリを確保してはclearして、
というのを繰り返してます。
mmapは領域拡大の時にmunmapして、領域拡大して、mmapするという動作をします。
munmapした後に拡大した領域をmmapする際に出ます。
(大きな連続領域がなくなっていると予測)
フラグメントを見るコマンドとかってないんですかね?
pmapで見れるメモリマップっていまいち見方がわからないのですが、
pmapでもわかりますか?
0708デフォルトの名無しさん
2009/01/30(金) 21:13:330709デフォルトの名無しさん
2009/01/30(金) 21:17:25いや、フラグメントを減らす方法もいくつかわかりますが、
それを確認する方法がないので困っています。
0710デフォルトの名無しさん
2009/01/30(金) 21:19:350711デフォルトの名無しさん
2009/01/30(金) 21:27:31メモリを効率的に使う技術を持っていないなら、64bitOSに助けてもらうこと
0712デフォルトの名無しさん
2009/01/30(金) 21:28:160713デフォルトの名無しさん
2009/01/30(金) 21:29:42512Mの領域って普通の設定だと6枚しか取れないぞ
0714デフォルトの名無しさん
2009/01/30(金) 22:26:58取ってそのまま再利用すればアドレスが足りなくなることはない。
複数確保なら知らんが。
0715デフォルトの名無しさん
2009/01/31(土) 00:23:040716デフォルトの名無しさん
2009/01/31(土) 02:59:023時間で何回取り直してるのか知らないけど、最悪グラフ化すれば判るっしょ。
更にlifegame風に表示させたら面白そうだね。というよりdeflagツール風か。
0717デフォルトの名無しさん
2009/01/31(土) 05:26:35> munmapした後に拡大した領域をmmapする際に出ます。
vector の話だとすると、拡大した領域の mmap を先にしないと要素のコピーができないよ。
このとき瞬間的にメモリ使用量は倍近くになるよ。 top で見えるサイズが 1 G あるなら、
この瞬間に 2 G 近くになってアドレススペースが不足する可能性が十分考えられるよ。
0718デフォルトの名無しさん
2009/01/31(土) 17:03:25なんでノーマルスーツの色が青いんだ?
0719デフォルトの名無しさん
2009/01/31(土) 17:42:35白い字幕が見難くなるから。
0720デフォルトの名無しさん
2009/01/31(土) 17:43:520721デフォルトの名無しさん
2009/01/31(土) 17:45:320722デフォルトの名無しさん
2009/01/31(土) 18:56:37CDXDevice* device;
この2つはどう違うのですか?
0723デフォルトの名無しさん
2009/01/31(土) 19:08:380724デフォルトの名無しさん
2009/01/31(土) 19:39:26C言語独習参考書と無料の統合開発環境を教えてください。
0725デフォルトの名無しさん
2009/01/31(土) 19:40:43CDXDevice* device1, device2;
この2つはどう違うのですか? ><
0726デフォルトの名無しさん
2009/01/31(土) 19:42:130727デフォルトの名無しさん
2009/01/31(土) 19:59:47おー
thx
0728デフォルトの名無しさん
2009/01/31(土) 20:54:00参考書=K&R
IDE
windows=VS EE、QtCreator、Code::Blocks、DialogBlocks、DevC++
Linux=Code::Blocks、emacs、…monoとかも?
macは知らん
勧めてないけど、borlandが初心者にはやさしいかもな
0729デフォルトの名無しさん
2009/01/31(土) 21:12:15*の回りにはいくら空白があってもいいんだってさ。
だから
CDXDevice * device1, device2;
こんな風に書いても一緒。見た目、掛け算と混同しちゃうけど。
0730デフォルトの名無しさん
2009/01/31(土) 21:17:34K&Rなんか初心者に薦めんなボケ
0731デフォルトの名無しさん
2009/01/31(土) 23:00:380732デフォルトの名無しさん
2009/01/31(土) 23:15:36そんなに答えが欲しいならスレ総力を挙げて本を作るのだ
0733デフォルトの名無しさん
2009/01/31(土) 23:25:08あくまでも初心者対象としてだが
0734デフォルトの名無しさん
2009/01/31(土) 23:33:36いかにも有能そうに、自分以上の存在を小馬鹿にする技術が
発達してるだけだよ、2chねらーなんてw
0735724
2009/01/31(土) 23:33:520736デフォルトの名無しさん
2009/01/31(土) 23:36:49C++の本読めばCの内容も内包してるようなもんだから
C++の本読めばいいと思うのは俺だけ?
0737デフォルトの名無しさん
2009/01/31(土) 23:38:53初心者向けの本って掴みから、読者が学習する路線やら基本知識まで掌握しないといけないから、
多人数の意見が混じり合うと、頭がおかしくなって死にそうだ
0738デフォルトの名無しさん
2009/01/31(土) 23:41:36C++の勉強がしたいのならC++の本を読めばよいし
Cの勉強がしたいのならCの本を読めばいい
と俺は思います
「C++/CLIはC++を内包しているようなもんだから、全てのC++の学習者は
C++/CLIを学ぶべきだ」と考えますか?
考えないでしょう
0739デフォルトの名無しさん
2009/01/31(土) 23:41:42それほど大きな差はないと思うけど、
C不便って思われる点は大量にあるな。
0740デフォルトの名無しさん
2009/01/31(土) 23:43:31C++/CLIは標準化を蹴られた実質窓依存の言語だし
比較として適当ではない気が・・・
C++は覚えておいて損はないと思うよ
0741デフォルトの名無しさん
2009/01/31(土) 23:44:34ええと、「Cを学びたい」という学習者の意向や前提は無視するわけですか?
そうですね、Haskellは覚えて損は無いでしょう
0742デフォルトの名無しさん
2009/01/31(土) 23:45:290743デフォルトの名無しさん
2009/01/31(土) 23:46:00特にC99は
0744デフォルトの名無しさん
2009/01/31(土) 23:46:520745デフォルトの名無しさん
2009/01/31(土) 23:47:19先にGoFあたりをガッツリ理解していた方が、クラスを変な解釈したりしないから良いと感じたことはある
まぁ、実際にコード書いて動いた方が楽しいし、独習ならそっちの方がモチベーションは確実に上になるだろうな
0746デフォルトの名無しさん
2009/01/31(土) 23:48:070747デフォルトの名無しさん
2009/01/31(土) 23:49:19C使いづれえええええええ!!!!となる可能性はあるけど
大は小を兼ねるを期待するのも1つの道だ。
別にCの入門書を買ってもいいけどさ。
0748デフォルトの名無しさん
2009/01/31(土) 23:49:220749デフォルトの名無しさん
2009/01/31(土) 23:49:23Cではmalloc()の戻り値をキャストする必要は無いし
main()はただの関数で再帰可能だし
C++とCは結局のところ違う言語ですが、
Cを学びたいと言っている人間に、
「似たようなもんだからこっちにしとけ」とC++を無理やり教え込むのですか
0750デフォルトの名無しさん
2009/01/31(土) 23:51:13強要なんてした覚えないしw
0751デフォルトの名無しさん
2009/01/31(土) 23:53:28いやごめん
ちょっとヒステリックなおばさnごっこを
してみたくなったんだ
0752デフォルトの名無しさん
2009/01/31(土) 23:55:570753デフォルトの名無しさん
2009/02/01(日) 00:11:19自意識ばっか膨れ上がった能無しのオタ男丸出しで、
ちっともおばさnごっこになってないよ。ただ誤読しただけでしょ。
0754デフォルトの名無しさん
2009/02/01(日) 00:18:35あらら、おこっちゃったの?
ごめんなさいねぇププ
0755デフォルトの名無しさん
2009/02/01(日) 00:20:340756デフォルトの名無しさん
2009/02/01(日) 00:22:50さっきまでは楽しかったけど、不出来を指摘されてムカついちゃったらしい。
0757デフォルトの名無しさん
2009/02/01(日) 00:22:51君もやってごらん
0758デフォルトの名無しさん
2009/02/01(日) 00:25:32完全に名前のせいだが
そうじゃないことだけ理解してれば勉強する順番は自由
0759デフォルトの名無しさん
2009/02/01(日) 00:39:250760デフォルトの名無しさん
2009/02/01(日) 00:42:38VC6くらいのchmが軽くて良い
ANSI C言語辞典は持ってるけど、こいつをchmファイル化して持っておきたいとはよく思う
0761デフォルトの名無しさん
2009/02/01(日) 00:56:37むしろANSI C言語辞典のノリで現代版ANSI C++辞典がほしい。
英数編と五十音編の2冊くらいでそこそこの厚さに収まってくれないかな。
0762デフォルトの名無しさん
2009/02/01(日) 01:03:48ANSI C++辞典だとどのくらいのページ数になるんだろうか
流石に2冊には納まるか?
0763デフォルトの名無しさん
2009/02/01(日) 01:27:34http://item.rakuten.co.jp/book/5882803/
0764デフォルトの名無しさん
2009/02/01(日) 01:29:52ガラスの仮面(43巻)
チャンネルはそのまま!(1)
黒執事(6)
オバマ大統領就任演説
ジェネラル・ルージュの凱旋(上)
やだ・・・なにこれ・・・('Д')
0765デフォルトの名無しさん
2009/02/01(日) 01:34:450766デフォルトの名無しさん
2009/02/01(日) 01:37:010767デフォルトの名無しさん
2009/02/01(日) 01:39:360768デフォルトの名無しさん
2009/02/01(日) 01:42:210769デフォルトの名無しさん
2009/02/01(日) 01:45:100770デフォルトの名無しさん
2009/02/01(日) 01:45:44Visual C++のプロジェクト。
どのファイルをどうコンパイルするかなどと言ったことが書かれている。
0771デフォルトの名無しさん
2009/02/01(日) 01:56:220772デフォルトの名無しさん
2009/02/01(日) 01:59:500773デフォルトの名無しさん
2009/02/01(日) 02:06:23Visual C++をインストールすれば、ダブルクリックして開けるようになる。
0774デフォルトの名無しさん
2009/02/01(日) 02:09:21調べてもよくわからなくて・・・無知ですいません
>>773
分かりました!ありがとうございます!
0775デフォルトの名無しさん
2009/02/01(日) 02:12:51現状だと事典ではなく辞典レベルだ。
それ以前にスカスカだけど。
0776デフォルトの名無しさん
2009/02/01(日) 02:13:410777デフォルトの名無しさん
2009/02/01(日) 02:14:25文句あるなら自分で補完しろ
0778デフォルトの名無しさん
2009/02/01(日) 02:14:43でも、たまに日本語の方が詳しい事もあるんだよな。これとか。
ttp://ja.wikipedia.org/wiki/DDR3_SDRAM
0779デフォルトの名無しさん
2009/02/01(日) 02:21:490780デフォルトの名無しさん
2009/02/01(日) 02:36:18あらゆる言語を満遍なく知ってる人しか書けないから敷居が高い
0781デフォルトの名無しさん
2009/02/01(日) 02:40:470782デフォルトの名無しさん
2009/02/01(日) 02:45:24やっているよ。でも今のペースじゃ英語版に追いつけるわけがない。
Java関係は日本語版でも記事の数は多くて羨ましい(中身の量はともかく)。
>>780
過疎すぎて消す人すら来ないように自分は思っているんだけどな。
0783デフォルトの名無しさん
2009/02/01(日) 02:50:02でもC/C++以外にも一応あるからそれも織り交ぜないと行けないのが面倒で面倒で諦めた
Dのinvariantとの違いとか調べたくねえよ
0784デフォルトの名無しさん
2009/02/01(日) 02:58:50==D言語==
{{節stub}}
0785デフォルトの名無しさん
2009/02/01(日) 03:01:480786デフォルトの名無しさん
2009/02/01(日) 03:03:31Cに偏ったことであればCと書いておけばいい。
Javaではそうならない!という人がJavaについて追加すればいい。
それだけのことなのにね。
0787デフォルトの名無しさん
2009/02/01(日) 03:05:18英語編集に参加して後で翻訳すればいい。
0788デフォルトの名無しさん
2009/02/01(日) 03:18:440789デフォルトの名無しさん
2009/02/01(日) 03:42:27要約欄に記載するという条件が無くなったので、前より少し楽になった。
0790デフォルトの名無しさん
2009/02/01(日) 07:25:53どの本もCまたはC++を知っていること前提に書かれていて
当時せいぜいVBしか使えなかった自分は面食らった記憶が…。
0791デフォルトの名無しさん
2009/02/01(日) 09:39:47このファイルの構築方法わかりません・・・・誰かお願いできますか?
0792デフォルトの名無しさん
2009/02/01(日) 09:40:17PASSは kari です
0793デフォルトの名無しさん
2009/02/01(日) 10:33:02ここじゃ鼬害だからMMOsaloonで聞けば?
0794デフォルトの名無しさん
2009/02/01(日) 10:44:10>>791
何をお願いしたいのか分からん。
VC2008入れてビルドしたら良いんじゃない?
0795デフォルトの名無しさん
2009/02/01(日) 14:08:12それでは私がmmosaloonの該当スレで質問してきましょうw
0796デフォルトの名無しさん
2009/02/02(月) 00:48:11違うクラスで使う同じ関数がダブらないから効率がよくなるって解釈でいいんでしょうか?
0797デフォルトの名無しさん
2009/02/02(月) 01:01:50コードの形だけでは実行速度はわからない。
0798デフォルトの名無しさん
2009/02/02(月) 01:04:030799デフォルトの名無しさん
2009/02/02(月) 01:09:06どのクラスのなかで宣言してようがstaticをつければグローバルになってどこからでも宣言なしで使えるようになるの?
0800デフォルトの名無しさん
2009/02/02(月) 01:11:38public staticであれば、クラスのインスタンスを作らなくても関数にアクセス出来るというだけ
0801デフォルトの名無しさん
2009/02/02(月) 01:15:02アクセスできるかはアクセス修飾子によって決まる。
クラス内部で使うとかグローバルとか関係ない。
0802デフォルトの名無しさん
2009/02/02(月) 01:23:38クラスのインスタンスを作っても、たとえばstatic関数だと、その部分の関数だけインスタンスが作られなくなるというだけですね。
0803デフォルトの名無しさん
2009/02/02(月) 09:39:54ここの付録のプログラムを使いたいのですが、
gccでエラーが出てしまいました。
このエラーを解決したいのですが、みなさんにお答え頂くには、何を晒したらよいでしょうか。
ちなみに環境はXP sp3のcygwin 1.72です。
0804デフォルトの名無しさん
2009/02/02(月) 10:07:02C++でコンパイルする
ppm.h および関連ライブラリを探す
0805デフォルトの名無しさん
2009/02/02(月) 13:38:24エラーが出たならエラーメッセージを晒すのは基本。
今回の場合はソースをアップローダに上げるのは必須ではないが、
もし資料をそのままコピーしていないのなら上げた方が話が早い。
まぁ、今回は恐らく>804だろうな。
0806デフォルトの名無しさん
2009/02/02(月) 23:59:46プログラムの中で
class Object
があった場合(メンバ関数に void func() を持つとします)
Objectクラスを使うときに
Object obj;
obj.func();
とするのと
Object* obj;
obj = new Object();
obj->func();
とするのとの違いは何でしょうか?
Object* で定義した場合はポインタなのでまだ実体が作られていないから
obj = new Object();
が必要なのがわかりますが、違いが今ひとつわからず質問させていただきました。
0807デフォルトの名無しさん
2009/02/03(火) 00:01:120808デフォルトの名無しさん
2009/02/03(火) 00:02:25newしたのはfreeするまで残る。
0809デフォルトの名無しさん
2009/02/03(火) 00:08:45返信ありがとうございます。
つまり特定のスコープの中だけで使う場合には new する必要はないということですね。
ありがとうございました。
0810デフォルトの名無しさん
2009/02/03(火) 00:08:49一時オブジェクトじゃなくて自動変数な
0811デフォルトの名無しさん
2009/02/03(火) 01:40:53free じゃなくて delete な
0812デフォルトの名無しさん
2009/02/03(火) 10:13:15-8589....
といったようなでたらめな数値になります。
何か値を代入しないと変数の領域が取られないのでしょうか?
環境はVC++6.0です。
#include <stdio.h>
int main() {
int i;
int *p;
i = 0; /* この行を取ると結果が100にならない */
p = &i;
__asm {
mov ebx, p
mov [ebx], 100
}
printf("%d\n", i);
return 0;
}
0813デフォルトの名無しさん
2009/02/03(火) 10:18:03アセンブリ出力を読め。納得したら、最適化オプションを変更しろ。
0814デフォルトの名無しさん
2009/02/03(火) 10:18:44コンパイラの生成したアセンブリリストを比べるんだ。
「リストファイルの生成」とかそんなコンパイルオプションでいけるはず。
0815デフォルトの名無しさん
2009/02/03(火) 10:21:580816デフォルトの名無しさん
2009/02/03(火) 10:26:070817デフォルトの名無しさん
2009/02/03(火) 10:27:13されちゃうんでしょうか?
0818デフォルトの名無しさん
2009/02/03(火) 10:31:140819デフォルトの名無しさん
2009/02/03(火) 10:47:07; Line 8
mov DWORD PTR _i$[ebp], 0
しか違わないです。なぜだー
0820デフォルトの名無しさん
2009/02/03(火) 10:51:100821デフォルトの名無しさん
2009/02/03(火) 11:10:51下記のようにしたら100が出ました。
__asm {
mov ebx, p
mov DWORD PTR [ebx], 100
}
0822デフォルトの名無しさん
2009/02/03(火) 20:31:59int *a;
どっちのほうが見やすいですか?
0823デフォルトの名無しさん
2009/02/03(火) 20:34:35http://pc11.2ch.net/test/read.cgi/tech/1193554741/
こちらで聞いてみては?
0824デフォルトの名無しさん
2009/02/03(火) 20:34:42int *a; の方が好き
0825デフォルトの名無しさん
2009/02/03(火) 20:37:020826デフォルトの名無しさん
2009/02/03(火) 20:53:28その違いで ポインタの複数宣言を分けるべきかどうか悩んだことがある。
0827デフォルトの名無しさん
2009/02/03(火) 21:01:02int *aにします
0828デフォルトの名無しさん
2009/02/03(火) 22:20:24参照は int& a = b; な俺
0829デフォルトの名無しさん
2009/02/03(火) 22:22:500830デフォルトの名無しさん
2009/02/03(火) 23:01:270831デフォルトの名無しさん
2009/02/03(火) 23:07:57キャストも(int *)pって1マス開けちゃう。
もう癖だな。
0832デフォルトの名無しさん
2009/02/03(火) 23:14:34int* a, b;でaもbもポインタになる言語出身なので。
とはいっても普段は複数行に分けて書いてるんだけどね。
0833デフォルトの名無しさん
2009/02/03(火) 23:16:36static char *p =NULL;
static const char *pp = "ok";
if( num == 0 ){
p = "ng";
}
else{
p = pp;
}
return p;
}
怪しいコードなのですが、
"ng"と"ok"のアドレスはいつ無効になるのでしょうか?
両方とも関数を出ると無効になるのでしょうか。
0834デフォルトの名無しさん
2009/02/03(火) 23:16:46そのこころは?
0835デフォルトの名無しさん
2009/02/03(火) 23:19:41関数を出てもずっと有効
0836デフォルトの名無しさん
2009/02/03(火) 23:21:09なのでpを返しても大丈夫。
0837デフォルトの名無しさん
2009/02/03(火) 23:28:40どっちの言語でも問題が起きないからじゃないかな
0838デフォルトの名無しさん
2009/02/04(水) 00:06:28ポインタへの参照は int *&a; とかって書いてるのかな。
0839デフォルトの名無しさん
2009/02/04(水) 00:07:570840833
2009/02/04(水) 00:13:06ありがとうございます。
下記の場合
char *test2( )
{
//static char *p = "a....."; //←aを*1024*1024*50
char *p = "a....."; //←aを*1024*1024*50//変数pはなくなるが、参照していた所はのこるのでOK
return p;
}
ってやったらアプリを消すまで、そのメモリは残るということですね。
char *test3( char *temp )
{
char a[256];
strcpy( a , temp )
return a;//ちなみにこれはだめ
}
0841デフォルトの名無しさん
2009/02/04(水) 00:15:060842デフォルトの名無しさん
2009/02/04(水) 00:25:39あるよ
0843デフォルトの名無しさん
2009/02/04(水) 00:47:21ただの参照をint &r;のように書く人も周りにいる。
0844デフォルトの名無しさん
2009/02/04(水) 00:49:24int **a; は分かる
int &a; もまあ分かる
int *&a; は少し分かり辛い
int **&a; は少し分かり辛い
0845デフォルトの名無しさん
2009/02/04(水) 00:59:03これは間違いなくバカの仕業だ。
0846デフォルトの名無しさん
2009/02/04(水) 00:59:400847デフォルトの名無しさん
2009/02/04(水) 01:15:590848デフォルトの名無しさん
2009/02/04(水) 01:30:510849デフォルトの名無しさん
2009/02/04(水) 01:33:50それでも int *& i; なんて変数を使う回数より複数宣言する回数のほうがずっと多いな。
0850デフォルトの名無しさん
2009/02/04(水) 01:34:55ただ、メンバに *& なんて、一度も使ったことないけどね。
0851デフォルトの名無しさん
2009/02/04(水) 01:39:08for (XXX::iterator it = x.begin(), end = x.end(); it != end; ++it)
なんてのは最近結構使ってるな。
この手のはfor_eachとかにするのが読み手にも実行効率的にも良いのかもしれないが
現状、ローカルで宣言した関数オブジェクトが使えないのがすごく嫌なんだよな。
0852デフォルトの名無しさん
2009/02/04(水) 01:44:25double x, y, z; (座標)みたいなのならなくはないが。
0853デフォルトの名無しさん
2009/02/04(水) 01:51:09初期化も必ずするしなぁ
0854デフォルトの名無しさん
2009/02/04(水) 01:53:53>851だって、複数だけど両方初期化してるでしょ。
0855デフォルトの名無しさん
2009/02/04(水) 02:13:52ああ、そう書けるんだ。
気づかなかった。
0856デフォルトの名無しさん
2009/02/04(水) 02:15:31君他の言語やってる?
0857デフォルトの名無しさん
2009/02/04(水) 02:36:48話混ぜたらダメだろ
0858デフォルトの名無しさん
2009/02/04(水) 02:37:09みたいなのは欲しい
fooで組全体として参照、foo::xとスコープ付きでアクセスできて
さらに多重代入、初期化も可能でさらに最適化で単品と同じになる
でこれをforeach内で使うの
0859デフォルトの名無しさん
2009/02/04(水) 02:41:470860デフォルトの名無しさん
2009/02/04(水) 02:52:510861デフォルトの名無しさん
2009/02/04(水) 02:53:350862デフォルトの名無しさん
2009/02/04(水) 03:09:13バカかおまえ
話混ぜてんのはその前の奴だろ
0863デフォルトの名無しさん
2009/02/04(水) 07:16:200864デフォルトの名無しさん
2009/02/04(水) 07:59:31LL言語じゃ普通に使われてるし、多値って概念で関数型言語では割と古くからあるもの
RAIIとかの方が遥かに複雑
0865デフォルトの名無しさん
2009/02/04(水) 09:21:24おこちゃま
0866デフォルトの名無しさん
2009/02/04(水) 11:34:42と書くくらいなら、
int* a;
int* b;
と書く。
0867デフォルトの名無しさん
2009/02/04(水) 11:40:03まぁ、少なくともこうは書かないw
int* a, *b;
0868デフォルトの名無しさん
2009/02/04(水) 14:44:080869デフォルトの名無しさん
2009/02/04(水) 14:46:430870デフォルトの名無しさん
2009/02/04(水) 15:45:47printf("%s", hako + 1);が`i`になるけど、&hako[0]と&hako[1]のアドレスを見ると
4bit?ずつ増えていますが、+1というのは自動的に宣言した型のサイズになるのでしょうか?
0871デフォルトの名無しさん
2009/02/04(水) 15:50:16そうです
0872デフォルトの名無しさん
2009/02/04(水) 15:57:37ありがとうございます
決まりごとのアドレスが連続している意味がわかりました
0873デフォルトの名無しさん
2009/02/04(水) 16:03:560874デフォルトの名無しさん
2009/02/04(水) 16:08:150875デフォルトの名無しさん
2009/02/04(水) 16:08:17sではなくcですね
0876デフォルトの名無しさん
2009/02/04(水) 16:36:21自動的に、ポイントしている型の分アドレスは増えるはずです。つまり、あなたは何か勘違いをしています。
hako + 1は、aの次のiを指している筈ですね。
0877デフォルトの名無しさん
2009/02/04(水) 21:00:06このエラーを治す方法が分かりません;;
アドバイスください
1//==========================================
2// CGameMain・各種クラスの定義
// 定義されているクラス
// CModel, CCollision
//==========================================
#ifndef _GameMain_h_
#define _GameMain_h_
//==========================================
// キーボード入力を受け取る変数
//==========================================
enum DIRECTION
14{
FOR, // 前に移動
BACK, // 後ろに移動
RIGHT, // 右に移動
LEFT, // 左に移動
STOP
};
0878デフォルトの名無しさん
2009/02/04(水) 21:09:070879877
2009/02/04(水) 21:10:320880デフォルトの名無しさん
2009/02/04(水) 21:11:5514行目じゃなくて、1行目と二行目も?
0881デフォルトの名無しさん
2009/02/04(水) 21:12:56そうです 元のソースです ↓
//==========================================
// CGameMain・各種クラスの定義
// 定義されているクラス
// CModel, CCollision
//==========================================
#ifndef _GameMain_h_
#define _GameMain_h_
//==========================================
// キーボード入力を受け取る変数
//==========================================
enum DIRECTION
{
FOR, // 前に移動
BACK, // 後ろに移動
RIGHT, // 右に移動
LEFT, // 左に移動
STOP
};
0882デフォルトの名無しさん
2009/02/04(水) 21:14:500883デフォルトの名無しさん
2009/02/04(水) 21:21:05の一番最後の行です
0884デフォルトの名無しさん
2009/02/04(水) 21:25:170885デフォルトの名無しさん
2009/02/04(水) 21:27:46問題とは全然関係ないけどFOR→FOREの方がいいと思う
0886デフォルトの名無しさん
2009/02/04(水) 21:28:41BACK
RGHT
LEFT
STOP
0887デフォルトの名無しさん
2009/02/04(水) 21:28:49ありがとうございます
見直してみます
0888デフォルトの名無しさん
2009/02/04(水) 21:32:18gamemain.hの直前にincludeしているヘッダの一番最後のセミコロンが無いのでは?
0889デフォルトの名無しさん
2009/02/04(水) 21:34:13単体だけじゃ分からないかも
0890デフォルトの名無しさん
2009/02/04(水) 21:44:42そのようでした・・・・
#ifndef _Frame_cpp_
extern CFrame *_Frame;
extern HINSTANCE _hInstance;
extern CGameMain *_gamemain;
extern CGameTitle *_gametitle
#endif
#endif
セミコロンがなかったです。
ありがとうございました!
0891デフォルトの名無しさん
2009/02/04(水) 23:01:49{
this->~Foo();
new (const_cast<Foo*>(this)) Foo();
}
これは偶然動いているだけですか?
0892デフォルトの名無しさん
2009/02/04(水) 23:03:38case TITLE :
if(_gametitle) {
hr = _gametitle->Idle(m_device);
m_sequence = _gametitle->GetSeq();
}
break;
case GAME :
if(_gamemain) {
hr = _gamemain->Idle(m_device);
m_sequence = _gamemain->GetSeq();
}
default:
break;
}
キーを押してタイトルをゲームを切り替えるプログラムを作りました
m_sequence = _gametitle->GetSeq();
これでタイトルかゲームかの変数を取得して切り替えています
切り替えに成功するのですが一度切り替えるとボタンを押さないでずっと切り替えが続いてしまいます
対処方法教えていただけませんか;;
GetSeq()はgametitleクラスの入力処理で特定のボタンが押された瞬間にGAMEを返します
ボタンが押されなければTITLEを返します
0893デフォルトの名無しさん
2009/02/04(水) 23:05:40完全に合法
でも危ないからオススメしない
0894デフォルトの名無しさん
2009/02/04(水) 23:08:11(継承クラス)基本クラス
継承クラスを基本クラスにキャストするにはどうすればいいんですか?
(基本クラス)継承クラス
インテリセンスが機能しないんです
0895デフォルトの名無しさん
2009/02/04(水) 23:11:21dynamic_cast
0896デフォルトの名無しさん
2009/02/04(水) 23:11:37インスタンスなら、子クラスレベルにはキャスト無理
0897デフォルトの名無しさん
2009/02/04(水) 23:20:08ありがとうございます
まさか>>891が合法だとは思いませんでした
0898892
2009/02/04(水) 23:21:07http://www7.uploader.jp/dl/inoguma/inoguma_uljp00003.zip.html
Frame.cpp Idel関数 (入れ替え処理)
Titlle Main に入力処理が書いてあります
宜しくお願いします
0899デフォルトの名無しさん
2009/02/04(水) 23:37:08GetAsyncKeyStateの使い方じゃない?
ttp://homepage2.nifty.com/rleez/program_old/winapi/keystate.html
0900デフォルトの名無しさん
2009/02/04(水) 23:48:10恐らく、ソースが汚いせいもあるかと思うのですが、どうすれば高速に動作するようになるのでしょうか?
VC++2008EXPRESS EDITIONを使ってます。
↓ソース
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8818.cpp
ファイルを高速に扱える関数とかライブラリとか用意されてないのでしょうか?
0901デフォルトの名無しさん
2009/02/05(木) 00:18:13どれだけのサイズを何分割して何秒かかったのか示そう。
もしかしたらそれは遅くないかもしれない。
0902デフォルトの名無しさん
2009/02/05(木) 00:19:55長いんでよく見てないけど。
ReadFile/WriteFileじかに使ってるが読み書きの単位はどのくらい?
IOバッファが小さいとか無いかな?
0903デフォルトの名無しさん
2009/02/05(木) 00:42:21977008640バイトのファイルを250MBづつ4つのファイルに分割するのに約2分半かかります。
一度に確保するメモリー領域は50MB程度でループ内部で確保→解放を繰り返してます。
非同期IOにしてみたこともありますが、処理速度は同じぐらいか、かえって遅くなったように思います。
正直、手詰まり感が否めません orz
0904デフォルトの名無しさん
2009/02/05(木) 00:50:23プログラム的に改善点はあるものの、ネックはHDDのアクセス速度だろう。
約900MBをreadしてwriteするのに150秒なので、転送速度は平均で約12MB/秒。
同一ドライブ間での転送なら、こんなものかもしれない。
別ドライブにwriteしたり、HDDがIDEならSATAにしたりすれば早くなるだろう。
もしメモリが少ない環境なら、バッファサイズを減らしたほうがいいだろう。
0905デフォルトの名無しさん
2009/02/05(木) 01:14:11これを動かすとどの程度時間がかかりますか?
動作としてはコマンドライン引数で与えられたファイルを 256MB 毎に hoge%04d.dat の名前で分割します
#include<stdio.h>
#include<stdlib.h>
#define BUFSIZE (1<<20) // 1MB
#define FILESIZE (1<<28) // 256MB
int main(int argc, char *argv[]){
FILE *fp_in, *fp_out;
char *filename_in="noname", filename_out[MAX_PATH], *buf;
long i, filesize, filesize_max=FILESIZE, readsize, writesize;
if(argc==2) filename_in=argv[1];
buf=malloc(BUFSIZE);
fp_in=fopen(filename_in, "rb");
if(fp_in==NULL) fprintf(stderr, "\nError : %s cannot open.\n", filename_in), exit(1);
for(i=1;;i++){
sprintf(filename_out, "hoge%04ld.dat", i);
fp_out=fopen(filename_out, "wb");
if(fp_out==NULL) fprintf(stderr, "\nError : %s cannot open.\n", filename_out), exit(2);
for(filesize=0,readsize=BUFSIZE;filesize<filesize_max;filesize+=readsize){
if(readsize>filesize_max-filesize) readsize=filesize_max-filesize;
writesize=fread(buf, 1, readsize, fp_in);
if(writesize<=0) break;
fwrite(buf, 1, writesize, fp_out);
}
fclose(fp_out);
if(writesize<=0) break;
}
fclose(fp_in);
return 0;
}
0907デフォルトの名無しさん
2009/02/05(木) 01:17:03色々調べてみましたが、CFileクラスを用いた読み書きとかメモリーマップドファイルとか意味がわかりません。
ファイル破談+とかいうソフトを使ってみましたが、同程度の速度でした。
こんなもんかもしれませんねぇ。
>>904さんがおっしゃるように最終的にはHDDのアクセス速度がボトルネックになるのでしょうね。
初心者なりにですがもう少し頑張ってみます。レスくださった方々、ありがとうございました。
0908デフォルトの名無しさん
2009/02/05(木) 01:21:102倍程度の時間で収まってれば合格なんじゃないの。
0909デフォルトの名無しさん
2009/02/05(木) 01:30:33非同期IOって何使った。
IO完了ポートは使った?
0910デフォルトの名無しさん
2009/02/05(木) 01:31:102分50秒程かかりました。
これって何をテストするプログラムなんでしょうか?
0911デフォルトの名無しさん
2009/02/05(木) 01:34:13PATA 2.5" HDD で 700MB のファイルが一分程度だったので
ディスクIOが本当にネックになってるのかな?と確認して欲しかった次第です
0912デフォルトの名無しさん
2009/02/05(木) 02:03:54900MBのファイルで40秒弱だったよ。
HDDは今話題のSeagate1T(ST31000333AS)
0913デフォルトの名無しさん
2009/02/05(木) 02:11:30いまプログラムをコンパイル&実行し直したら、30秒程早くなった。
ソースは手直ししてないのに。
その時のHDDの使用状況にもよるんだろうけど、こんなに差がでるもんか?
ますます訳がわからん。
0914912
2009/02/05(木) 02:47:48ちなみに同じファイルの2回目は15秒強で終わったよ
0915デフォルトの名無しさん
2009/02/05(木) 07:30:200916デフォルトの名無しさん
2009/02/06(金) 02:54:07これに””の空を設定するにはどう書けばいいんですか?
a = _T("");
とかだめなんですが
0917デフォルトの名無しさん
2009/02/06(金) 03:07:26とか
_tcscpy_s(a,256,_T(""));
で。
0918デフォルトの名無しさん
2009/02/06(金) 03:21:00どうもです。
0919デフォルトの名無しさん
2009/02/06(金) 03:25:45そんな徹底するようなものじゃないですか?
なんか自分しかわからないコードというか、一人一人が独自路線でいくのって空しくないですか?
0920デフォルトの名無しさん
2009/02/06(金) 04:41:11なるべく直さなくて済むように書くのがスタンダードなんじゃないの。
何れにしろ、初心者が心配することではないのでは?
0921デフォルトの名無しさん
2009/02/06(金) 06:44:21>一度書いたプログラムは二度と書かない
その方針は正しいから、それを目指すのはいいことだ。
空しいならオープンソースにすればいいんじゃないか。だけど、誰でも使えるライブラリを作るのは想像以上に難しい
だから自分の用途に応じた自分用のライブラリを作って二度書きを防ぐようにする。そしてそのライブラリは君の財産になる。
0922デフォルトの名無しさん
2009/02/06(金) 07:17:46とりあえずコピペで作って後から共通化した方がいいこともある
0923デフォルトの名無しさん
2009/02/06(金) 07:52:110924デフォルトの名無しさん
2009/02/06(金) 08:53:410925デフォルトの名無しさん
2009/02/06(金) 20:59:52あと、自分の手から離れたソースが見れないことがあるし
0926デフォルトの名無しさん
2009/02/07(土) 15:13:05UINT code = (UINT)*string;
DWORD size = GetGlyphOutline(m_hdc, code, GGO_GRAY4_BITMAP, &GM, 0, NULL, &Mat);
このキャストは問題ないですか?
0927デフォルトの名無しさん
2009/02/07(土) 15:15:150928デフォルトの名無しさん
2009/02/07(土) 15:18:35多分 LPTSTR string = "abcdefg";
とかやるとわけのわからないことになりそう。
0929デフォルトの名無しさん
2009/02/07(土) 15:22:25レスありがとうございます。
スレ違いでしたか、申し訳りません
0930デフォルトの名無しさん
2009/02/07(土) 16:39:45ここは環境依存OKなスレだよ。Win32APIと言いさえすれば、だけどね。
どちらかというと、(UINT)*stringよりは、(TBYTE)*stringまたは(UINT)(TBYTE)*stringのほうがお勧め。
というのは、LPTSTRがchar*で、かつcharが符号付きのとき、\x80から\xFFな文字が符号拡張されてしまうのを防ぐため。
それには、一旦unsigned charでキャストすればいいんだけど、TCHARがwchar_tの場合を考慮しないといけない。
ゆえに、wchar_t/unsigned charで切り替わるTBYTE型でキャストするのがいいということになる。
0931デフォルトの名無しさん
2009/02/07(土) 17:15:59暗黙的に予約語だから
0932デフォルトの名無しさん
2009/02/07(土) 22:52:59そのクラスは表示したい文字を数えてその分だけメモリを確保します
例えばメンバ関数で宣言したクラスをほしい分だけnewで取得したいのですが
privateで
CModel *m_model; と宣言して
コンストラクタで
m_model = NULL;
初期化する関数で
m_model = new CModel();
と言う感じにすることはできたのですが
ほしい分だけ確保する場合は
CModel *m_model[100];
と多めに宣言しておいて
コンストラクタで
forループで全部初期化
初期化する関数で表示したい文字分だけ数えてnewするやり方でいいのでしょうか?
他にいいやり方があったら教えてください
長文失礼しました 読みにくいと思いますがすいません
0933デフォルトの名無しさん
2009/02/07(土) 23:03:20CMyClass() : m_model(NULL) {}
~CMyClass() {
if (m_model!=null) {
delete m_model;
m_model = NULL;
}
}
void initialize() {
m_model = new CModel();
}
これだけなら有りがちなクラスだと思うけど、配列にするのは微妙かな
固定長でいいならそれもあるけど、どういう風な用途かも知らないから、何とも言えないが
0934デフォルトの名無しさん
2009/02/07(土) 23:26:47質問が分かりにくくてすいません
最初から100個の配列を確保するのはメモリに負担がかかると思うので
初期化する前に何個確保すればいいか計算します
7個確保すればいい場合は
for(int i = 0; i < 7; i++) {
m_model[i] = new CModel();
}
でいいと思うのですが
宣言するときはどうすればベストですか?
用途は表示したい文字の数だけプリミティブとテクスチャを作り表示するクラスです
0935デフォルトの名無しさん
2009/02/07(土) 23:42:520936デフォルトの名無しさん
2009/02/07(土) 23:52:18CModel* m_model[100];とかではだめか?
あるいは、std::vectorの利用も検討するといいと思う。
0937デフォルトの名無しさん
2009/02/07(土) 23:57:50レスありがとうございます
とりあえずは100個領域確保してやってみます
処理に支障が出たらstd::vectorやmap?に変更してみます
0938デフォルトの名無しさん
2009/02/07(土) 23:58:45でいいんじゃね?
>>935-936の通りSTLのコンテナの方がいいと思うけど
std::vector< CModel > v;
for( int i = 0; i < 7; ++i )
{
CModel * temp = new CModel();
temp->init();
v.push_back( *temp );
}
vの宣言のスコープを抜けたら自動的にデストラクタが呼ばれる
0939デフォルトの名無しさん
2009/02/07(土) 23:58:48std::vectorを使う。
boost::ptr_vectorを使う。
0940デフォルトの名無しさん
2009/02/08(日) 00:03:25DBみたいなクラスでも作るのか?
0941デフォルトの名無しさん
2009/02/08(日) 00:19:12>>940 クラス名は適当につけただけです
ゲームに使おうと思っているクラスで
指定した文字列を1文字づつテクスチャに書き込んで板ポリで表示するクラスです
0942デフォルトの名無しさん
2009/02/08(日) 00:27:46このコードメモリリークしない?
for文の中でちゃんとdeleteしないと
0943デフォルトの名無しさん
2009/02/08(日) 00:34:380944デフォルトの名無しさん
2009/02/08(日) 07:45:50コードを見比べても何をしてるのかさっぱりわからないんですが
0945デフォルトの名無しさん
2009/02/08(日) 09:05:130946デフォルトの名無しさん
2009/02/08(日) 09:41:400947デフォルトの名無しさん
2009/02/08(日) 10:02:29その見比べていると言うソースを提示してみてくれ。
0948デフォルトの名無しさん
2009/02/08(日) 10:06:350949デフォルトの名無しさん
2009/02/08(日) 10:21:05for (i=0; i< end; ++i){
s[i] = f[i+1];
}
↓
i = 4;
if (end > 4)
for (i = 0; i < end; i += 4){
s[i] = f[i+1];
s[i+1] = f[i+2];
s[i+2] = f[i+3];
s[i+3] = f[i+4];
}
for (i -= 4 ; i < end; ++i)
s[i] = f[i+1];
0950デフォルトの名無しさん
2009/02/08(日) 10:43:52ちょっとやり方がキモイけど、endに適当な数字を入れて自分で処理を手書きしてみな
0951デフォルトの名無しさん
2009/02/08(日) 10:52:27つーか、ループアンロールなんかコンパイラに任せておけばいいじゃん。
0952デフォルトの名無しさん
2009/02/08(日) 11:03:26展開前をコメントアウトし、ばらしたコードで記述する意味はある。
0953デフォルトの名無しさん
2009/02/08(日) 11:33:14そこまでカツカツの速度が要る場面も珍しいだろうけど
0954デフォルトの名無しさん
2009/02/08(日) 11:51:07大加算ループの中でswitch に置き換えるとか色々。
0955デフォルトの名無しさん
2009/02/08(日) 14:17:18展開ってそういうことか
ありがとう。
それは4段階展開ってことだよね
確かに読みにくくなるね・・・
0956デフォルトの名無しさん
2009/02/08(日) 14:20:120957デフォルトの名無しさん
2009/02/08(日) 15:09:170958デフォルトの名無しさん
2009/02/08(日) 15:53:050959デフォルトの名無しさん
2009/02/08(日) 16:05:350960デフォルトの名無しさん
2009/02/08(日) 16:18:100961デフォルトの名無しさん
2009/02/08(日) 16:23:52for (i = 0; i < end + 4 ; i += 4){
ですな・・
0962デフォルトの名無しさん
2009/02/08(日) 16:26:510963デフォルトの名無しさん
2009/02/08(日) 16:30:00for (i = 0; i < end − 4 ; i += 4){
にはw
0964デフォルトの名無しさん
2009/02/08(日) 16:54:39でも制御文事態のコストがforより軽いからやる意味ないのかな?
0965デフォルトの名無しさん
2009/02/08(日) 19:01:040966デフォルトの名無しさん
2009/02/08(日) 19:03:420967デフォルトの名無しさん
2009/02/08(日) 20:20:390968デフォルトの名無しさん
2009/02/08(日) 20:50:10???
0969デフォルトの名無しさん
2009/02/08(日) 21:24:19do と while どういう使い分けしてるの?
0970デフォルトの名無しさん
2009/02/08(日) 22:07:06???
0971デフォルトの名無しさん
2009/02/08(日) 23:21:09const int MAXDATA = 123;
#define MAXDATA 123
この2つはどっちが正しいんでしょうか?
なにか決定的な違いはありますか?どうでもいいですか?
0972デフォルトの名無しさん
2009/02/08(日) 23:23:15C++ではどちらも正しいが、前者が望ましい。
名前空間やスコープを無視するマクロはできるだけ無い方が良い。
0973デフォルトの名無しさん
2009/02/09(月) 00:44:57アセンブラの命令一覧はなにを参考にすればいいんですか?どこにあるんでしょうか?
CPUによってかわるんですか?
0974デフォルトの名無しさん
2009/02/09(月) 00:47:56命令一覧みたからって即できるようなもんじゃないとだけ言っておく
0975デフォルトの名無しさん
2009/02/09(月) 00:59:41物によって命令が違うのでWindowsで使える?VSで使える命令を知りたいんです
0976デフォルトの名無しさん
2009/02/09(月) 01:08:42ほぼ確実に遅くなるからやめておいたほうがいい。
パイプラインを阻害しないような命令配置とか人間が考えるよりコンパイラにやらせたほうがマシ。
SSEとか使うなら今のところコンパイラまかせよりは人間のほうがいいかも知れんけど。
0977デフォルトの名無しさん
2009/02/09(月) 01:09:02http://www.intel.co.jp/jp/download/
この中でも、命令が載っているのは
32ビット(と16ビット)はIA-32 インテル
アーキテクチャー・ソフトウェア・デベロッパーズ・マニュアル。
上・中A・中B・下があって中2つが命令一覧。
大体同じだけど、64ビットがインテル エクステンデッド・メモリー 64
テクノロジー・ソフトウェア・デベロッパーズ・ガイドの1巻・2巻。
適当にググって予備知識を付けてから見たほうがいい気もするけど。
0978デフォルトの名無しさん
2009/02/09(月) 01:12:49とりあえずこのへん?
http://www.icnet.ne.jp/~nsystem/simd_tobira/index.html
独学でなんとかなんのかぁ?
MMXですら俺は誰かに教わらないと無理だった
しかも全然速くなんねーw
0979デフォルトの名無しさん
2009/02/09(月) 01:14:09Cの変数とやりとりする規約をコンパイラのマニュアルから探さないと。
0980デフォルトの名無しさん
2009/02/09(月) 01:18:59そんなのサンプルみて体で感じ取るぐらいじゃないと駄目
0981デフォルトの名無しさん
2009/02/09(月) 01:25:08これは問題ないですか?
if( (a == b) && (a == c) )
こう書かないと結果がおかしくなる場合ってあるんですか?
あと、&&と書きさえすればショートサーキットになるんでしょうか?
コンパイラによって変わってきちゃいますか?VSなんですが
0982デフォルトの名無しさん
2009/02/09(月) 01:27:49Windowsはハードの互換性がメリットだと思ったので
仮想アセンブラのようなものでCPUを統一しているのかと思いました。
ありがとうございました。
0983デフォルトの名無しさん
2009/02/09(月) 01:29:16> 仮想アセンブラのようなものでCPUを統一
うまいなあ。それは.NET Frameworkというやつだ。
0984デフォルトの名無しさん
2009/02/09(月) 01:29:40問題は、
玄人のアセンブラ>>コンパイラの最適化>>>>素人のアセンブラ
なことだ。
確かIntelのpdf群の中に最適化マニュアルもあっただろ。
どんな命令がストールを起こすとかマイクロコードだから遅いとか
互換性を維持しながら最大限速度を取るにはとか、そんなのが載ってるはず。たぶん。
ただね、SIMDのような特殊な命令を利用して特定部分を、というのでない限り
普通は「分岐予測ミス」「メモリアクセス」によって、CPU時間のかなりの部分を食われるのよ。
Pen4とかと比べれば、最近のはそれでもマシになったけど、おそらく半分程度は浪費されるはず。
だから、いかに分岐を減らしてキャッシュミスを無くすか
そういうのをC/C++のレベルで考えながらコードを書いたほうが意味があったりするわけよ。
0985デフォルトの名無しさん
2009/02/09(月) 01:45:31玄人ががんばれば勝てるものなのか。
0986デフォルトの名無しさん
2009/02/09(月) 02:05:11コンパイラに勝つには、コンパイラの使わないSIMD命令を使い倒さないとだめだな。
でも、ほどほどの速さで良ければ、アセンブリ言語を使わなくても
コンパイラ組込関数を使えばいいという状況になりつつある。
0987デフォルトの名無しさん
2009/02/09(月) 04:04:01ここからここまでの処理はこのスレッドに変数アクセス優先権をあたえて、
他のスレッドがアクセスしに来たらそのスレッドは変数を使い終わるまでそこでストップ
というような処理はできるんでしょうか?
0988デフォルトの名無しさん
2009/02/09(月) 04:05:580989デフォルトの名無しさん
2009/02/09(月) 04:21:10ここのミューテックスにサンプルのってる
0990デフォルトの名無しさん
2009/02/09(月) 06:00:00ありがとう!
0991デフォルトの名無しさん
2009/02/09(月) 07:02:28前者で全く問題ない
0992デフォルトの名無しさん
2009/02/09(月) 07:12:43書き換えがメインスレッドだけでサブスレッドは
読み込みだけだったら問題ないですか?
0993デフォルトの名無しさん
2009/02/09(月) 07:25:55volatile はつけとけよ。
0994デフォルトの名無しさん
2009/02/09(月) 09:06:55Windows関数をつかって軽いアプリケーションを作りたいのだが
win関数を使うとコンパイルでエラーが出てしまう・・・
"外部シンボル 'WinMain' が未解決"
これはどういうことなのでしょうか・・・?おしえてくだしあ><
0995デフォルトの名無しさん
2009/02/09(月) 09:11:03でぐぐれ
0996デフォルトの名無しさん
2009/02/09(月) 09:11:160997デフォルトの名無しさん
2009/02/09(月) 11:25:14> ほう。今ならコンパイラの最適化が人間が扱うのは無理なレベルに達してると思ってたんだが、
> 玄人ががんばれば勝てるものなのか。
勝てるけどコストが合わない事が多い。
0998デフォルトの名無しさん
2009/02/09(月) 12:37:45volatile じゃ解決しねーよ。同期オブジェクト使わないと。
0999デフォルトの名無しさん
2009/02/09(月) 14:19:141000デフォルトの名無しさん
2009/02/09(月) 14:34:16メモリモデルをx86系Windowsに限定するならセーフ。
C/C++の言語的にはアウト。
専門的な話をしたいならマルチスレッドスレに行ったほうがいい。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。