【初心者歓迎】C/C++室 Ver.17【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/05/13(金) 13:30:01ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
http://pc8.2ch.net/test/read.cgi/tech/1113139986/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2005/05/13(金) 13:32:140003デフォルトの名無しさん
2005/05/13(金) 13:53:110004デフォルトの名無しさん
2005/05/13(金) 14:00:10さよなら…
return 0;
0005デフォルトの名無しさん
2005/05/13(金) 15:05:49otu
0006デフォルトの名無しさん
2005/05/13(金) 16:00:36関数の引数に定数を渡し、その関数内で常に同じ値になるときは、
どうなりますか
Func( 256, 4 );
void Func(int a, int b)
{
float fa = a / 256;
float fb = b / 256;
return fa + fb;
}
ちょっと、極端ですけど。
0007デフォルトの名無しさん
2005/05/13(金) 16:06:100008デフォルトの名無しさん
2005/05/13(金) 16:06:56オプチマイズをOFFにしてればどもならん
ONならコンパイラによる
0009デフォルトの名無しさん
2005/05/13(金) 16:07:38return fa+fb; -> g_val = fa+fb;
0010デフォルトの名無しさん
2005/05/13(金) 16:08:30やっぱどもならんか
0011デフォルトの名無しさん
2005/05/13(金) 16:09:42いくら続きだからと言って、説明端折り過ぎ。
Func()内の演算が実際に行なわれるかという質問と考えていいのかな?
だとしたら、関数の実装においてどんな引き数で呼ばれるかは予測不可能なので
演算が行なわれなくなるようなことは有り得ない。
但し、C++でinline指定した場合は呼び出し側で最適化される。
#ついでに言えば、値を返さない関数だと意味ないな。
Ex.
inline double Func(int a, int b)
{
float fa = a / 256;
float fb = b / 256;
return fa + fb;
}
double anyFunction()
{
return Func(256, 4);
}
は、
double anyFunction()
{
return 1.015625;
}
と同じコードになることは十分有り得る。
001211
2005/05/13(金) 16:11:31g_val = fa + fb;
となると、inlineをつけてもinline化されることは期待できなくなってくるね。
00136
2005/05/13(金) 16:17:240014デフォルトの名無しさん
2005/05/13(金) 16:23:05絶対ありえない。
あるとしたらreturn 1.;
0015デフォルトの名無しさん
2005/05/13(金) 16:34:130016デフォルトの名無しさん
2005/05/13(金) 16:46:21二次方程式の解をcで作ってみたんですが
#include <stdio.h>
#include <math.h>
main(){
double a,b,c,D,re,im,x1,x2;
printf("a,b,cを入力してください:");
scanf("%lf %lf %lf",&a,&b,&c);
D=(b*b-4*a*c);
if(D>0){
re=-b/(2*a);
im=-sqrt(D)/(2*a);
x1=re+im;
x2=re-im;
printf("x=%f,%f\n",x1,x2);
}
else if(D==0){
re=-b/(2*a);
printf("x=%f(重解)\n",re);
}else{
re=-b/(2*a);
im=sqrt(-D)/(2*a);
printf("x=%f+%fi,%f-%fi\n",re,im,re,im);
}
・・・・・動かないんですよね;何が違うかわかりません?
それと、係数をファイルから読み込んで方程式を解かせるには
どうしたらいいんでしょうか?
プログラムって難しくって・・・、頭あんまり良くないからなぁ・・・
アドバイスだけでもお願いします。
0017デフォルトの名無しさん
2005/05/13(金) 16:57:10'{' と '}' の関係を見直してみ。
0018デフォルトの名無しさん
2005/05/13(金) 17:05:58動かないというのは、何がどう動かないのか
0019デフォルトの名無しさん
2005/05/13(金) 17:19:05係数をファイルから云々はfopen使っとけ。
0020デフォルトの名無しさん
2005/05/13(金) 20:14:50class baseと継承関係にある二つのクラスをbaseの参照で持ち替えたいのですが。
意図どおりに動きませんでした。
どうしてでしょうか??というか、考え方が根本的に間違ってますか??
環境はvc7.1です。
int main(int argc, char* argv[])
{
Base& B = TheA();//BはBaseのB。
B.Func();
B = TheB();//TheBを突っ込みたいのに、ここでなぜ初期化されたTheAが入るのか??
B.Func();
return 0;
}
フルソースは以下
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/382.txt
0021デフォルトの名無しさん
2005/05/13(金) 20:18:09> 何が違うかわかりません?
1.質問の仕方
2.勉強の順序
3.質問に至るまでの調査の仕方・時間
4.あなたの考え方
0022デフォルトの名無しさん
2005/05/13(金) 20:37:39参照は初期化したあとには参照先を変えられない。
0023デフォルトの名無しさん
2005/05/13(金) 20:41:44やっぱそうなんですかね。
残念。new無しプログラミングができると思ったのに。
ま、いいか。レスThx。
0024デフォルトの名無しさん
2005/05/13(金) 21:40:41前置記法の式を後置記法に変換し、引数postfixが示すキューに格納する関数
を作成せよ」という問題でプロトタイプ宣言が
void getexp(char *prefix,strut queue *postfix);
となっているのです。char *prefixはメイン関数の前置記法の式を代入するこ
とは分かっているんですけどstrut queue *postfixはいったいどういう意味な
のでしょうか?postfixのままポインタとして使えないし、それ以前にメイン
関数でポインタを作成して代入しなきゃならないのか?スレ違いかも知れませ
んがよろしくお願いします。
0025デフォルトの名無しさん
2005/05/13(金) 21:48:19http://pc8.2ch.net/test/read.cgi/tech/1115794784/
0026デフォルトの名無しさん
2005/05/13(金) 21:55:00メモリの任意のアドレスにある値を取り出したいんですが、どうしたらいいのでしょう?
具体的には
0x75DCD3というアドレスにある値を取り出して変数に渡したいんです。
0027デフォルトの名無しさん
2005/05/13(金) 21:56:58type val = *(type *)0x75dcd3
0028デフォルトの名無しさん
2005/05/13(金) 22:01:16どうもありがとうございました。ちょっと試してみます
0029デフォルトの名無しさん
2005/05/13(金) 23:01:33アプリケーション間で文字列を送受信する方法で、
SendMessage+COPYDATA以外の方法はあるのでしょうか?
SendMessageで送受信自体は実現できたのですが、
受信側の処理終了まで待つのが引っかかっています。
PostMessageの様に、送信側が待機状態にならずに
文字列の送信も行えるのが理想なのですが
0030デフォルトの名無しさん
2005/05/13(金) 23:12:470031デフォルトの名無しさん
2005/05/13(金) 23:29:20現状では、15桁数字を分割してPostMessage送信していたのですが
今回15桁数字*2の送信が必要になりまして。
文字列とは言っても数字のみで、あとほんの少しの桁数だから
PostMessageみたいな簡易的な方法があればよかったのですが・・・
ありがとうございました
0032デフォルトの名無しさん
2005/05/14(土) 02:07:36>>30の何が気に入らない?
ソケット通信を始め、プロセス間通信の方法は多々あるぞ。
0033デフォルトの名無しさん
2005/05/14(土) 02:09:38お節介なお前の態度が気に入らない。
0034デフォルトの名無しさん
2005/05/14(土) 03:02:400035デフォルトの名無しさん
2005/05/14(土) 06:05:40003635
2005/05/14(土) 06:08:28どうも書き方が古いということなので、古い書きかたが身につかないうちに、
最新のもので学んでおきたいのです
0037デフォルトの名無しさん
2005/05/14(土) 07:07:02書籍スレ池よ。
0038デフォルトの名無しさん
2005/05/14(土) 21:18:34どっかの関数内でhogeのインスタンスをnewで生成してポインタをvectorに入れたとき、
その関数を出て、別の関数内でvectorのポインタからインスタンスを使ったりしたら
まずい事になりますか?
関数内で宣言された普通の変数とかは、そこを出ると消えちゃうんですよね?
0039デフォルトの名無しさん
2005/05/14(土) 21:23:14言っている意味がよくわからないから、短いコード例を示してくれないか?
0040デフォルトの名無しさん
2005/05/14(土) 21:23:32newで作成したインスタンスは、ローカルとかグローバルに関係ない。以上。
0041デフォルトの名無しさん
2005/05/14(土) 21:28:57何の問題もない。
#include <vector>
class hoge {};
void sub();
std::vector<hoge*> phoge;
int main()
{
sub();
delete phoge[0];
}
void sub()
{
phoge.push_back(new hoge);
}
0042デフォルトの名無しさん
2005/05/14(土) 21:31:30ありがとうございました。
0043デフォルトの名無しさん
2005/05/14(土) 21:34:11はい。わざわざすいません。ありがとうございました。
0044デフォルトの名無しさん
2005/05/14(土) 21:40:42//vector<hoge*> p;
vector<hoge*>::iterator it=p.begin();
for(;it!=p.end();++it)
{
delete it;
it=0; //これ
}
p.erase(p.begin(),p.end());
0045デフォルトの名無しさん
2005/05/14(土) 21:52:32直後で要素を消すなら要らんだろ。
0046デフォルトの名無しさん
2005/05/14(土) 22:01:12delete it;
は
delete *it;
じゃね?
0047デフォルトの名無しさん
2005/05/14(土) 22:07:00delete p[i]; // i < p.size()
p[i]=0;
p.erase(remove(p.begin(),p.end(),static_cast<hoge*>(0)),p.end());
004838
2005/05/14(土) 22:26:42後で多分必要になると思うので参考にします。ありがとうございます。
ところでまた質問なんですが、、
「動物クラス」を継承した「犬クラス」と「猫クラス」、
そして、「動物クラスへのポインタ型」のvectorがあるとします。
適当な順番で何個かの犬クラスや猫クラスをnewで生成し、
動物クラスへのポインタ型変数に入れ、vectorに挿入していきます。
このあと、vectorから適当な要素を取り出して、
そのポインタが犬のインスタンスを指しているのか、
猫のインスタンスを指しているのかを判別するにはどういう方法があるでしょうか?
例えば識別の為のメンバ変数とかメソッドを作っておき、
1が帰ってきたら犬、2が帰ってきたら猫、のようにチェックしてもいいと思うのですが、
本来そのクラス自体が種類を表しているはずなのに、
内部に自分自身の種類の識別のためのメンバ変数を持たせるというのはなんだか気持ちが悪いです。
他にもう少しましな方法というのはないでしょうか。
こういったとき、どうやるのが普通でしょうか。
0049デフォルトの名無しさん
2005/05/14(土) 22:34:010050デフォルトの名無しさん
2005/05/14(土) 22:47:06プログラムで判別すると、継承したクラスの種類が増えるにつれ、if文の
羅列になってしまい、好ましくない。だから普通は判別の必要がないように、
仮想関数にする。
005138
2005/05/14(土) 23:21:22ある種類だけ取り出したいときにはどうすればよいのだろうと思って質問したのですが
dynamic_castというのがまさに探していたものという感じでした。
でもそれが必要になる事自体、設計がよくないみたいですね。見直してみます。
ありがとうございました。
0052デフォルトの名無しさん
2005/05/14(土) 23:26:39dynamic_castが必ずしも悪いわけではなく、ダウンキャストが必須の場面では
使わざるを得ない。しかし継承関係を調べるのに使うのは、設計が間違っている
可能性があるって事を指摘しただけで、学習の過程でいろいろ試してみられる
のは全く問題ないですよ♪
0053デフォルトの名無しさん
2005/05/14(土) 23:29:060054デフォルトの名無しさん
2005/05/14(土) 23:34:06テキストファイルに改ページを入れるにはどうすればいいですか?
昔のDOSだったら、
改ページコードを書き込んで、テキストファイルはプリンタへリダイレクト。
でよかったののですが、WindowsXPの場合、エスケープシーケンスが使えないので困っています。
よろしくお願いします。
0055デフォルトの名無しさん
2005/05/14(土) 23:44:53ここでC#の質問はダメでしょうか?
C#の質問で最適な場所が無いんですが。
ミスターサタンのC#相談室
http://pc8.2ch.net/test/read.cgi/tech/1092656075/l50
0056デフォルトの名無しさん
2005/05/15(日) 00:23:20だめです。
0057デフォルトの名無しさん
2005/05/15(日) 01:11:08変数の終端位置アドレスを指定しなくてもその開始位置から何バイトまでがその変数なのか、
という事は勝手に判断してくれるのでしょうか。
例えば標準関数などに変数の開始位置アドレスを使うものがありますが終端位置を使っていません。
OS等がよろしくやってくれるんでしょうか?
0058デフォルトの名無しさん
2005/05/15(日) 01:13:38そのために型情報を使う。或いは配列として扱うならナル文字などのSentinelを置く。
#尤も、後者の場合も型情報を使っているわけだが。
いずれにしても、この場合はOS云々は関係がない。
0059デフォルトの名無しさん
2005/05/15(日) 01:14:50T* p があれば、 (char*)p + sizeof(T) でオブジェクトの占めているメモリの終端は得られる。
しかし、ほとんどの処理は「変数の終端位置」なんて考慮しない。
その「変数の終端位置」っていうのは何に使えると思うんだ?
0060デフォルトの名無しさん
2005/05/15(日) 01:51:53sprintfやstrcatの事を言ってるのだと予想。
006160
2005/05/15(日) 01:57:05これらの関数は格納先のサイズを知る術は無いのでバッファオーバーランの危険がある。
0063デフォルトの名無しさん
2005/05/15(日) 02:16:19006457
2005/05/15(日) 04:42:31配列に限らずですが、先頭アドレスの情報だけではその変数は扱えないはずでは、と思ったのです。
変数の型から計算しているという事に納得しました。
0065デフォルトの名無しさん
2005/05/15(日) 06:12:30a(x[0])の設定をnewでメモリを確保した後に、実行させるにはどうしたらよいのでしょうか?
class foo
{
public:
int &a;
int *x;
};
foo::foo() : a(x[0])
{
x = new int[10];
}
0066デフォルトの名無しさん
2005/05/15(日) 06:33:32HTMLのフォームからPOSTメソッドで行われた標準入力は、
そのHTMLフォームの順番通りになっている事が保証されるのでしょうか?
例えば、題名・名前・本文という内容のデータを受け取った時、
標準入力には必ず題名・名前・本文という順番で格納されているのでしょうか。
0067デフォルトの名無しさん
2005/05/15(日) 07:17:08foo::foo() : x(new int[10]), a(x[0])
{
}
0068デフォルトの名無しさん
2005/05/15(日) 08:15:44メンバの初期化は宣言順だから、クラス定義も書き換えなきゃダメ
class foo
{
public:
int* x;
;int& a;
foo();
};
0069デフォルトの名無しさん
2005/05/15(日) 10:10:18どこかのWebで解説されていませんか?
もしくはこの本に乗っているでもいいので教えてください。
マニピュレーターが関数である、という知識しかありません。
0070デフォルトの名無しさん
2005/05/15(日) 10:30:15普通は順不同でも動作する様に作る。
0071デフォルトの名無しさん
2005/05/15(日) 10:45:18マニピュレータが関数である、ということがわかっていれば、
それ以上の解説なんか要らないことがほとんどなんで、たぶん無いだろうな。
0072デフォルトの名無しさん
2005/05/15(日) 10:50:42「出力以外の何か」をするように<<演算子を定義するだけだが。
それから、マニピュレータは関数であるとは限らない。
ostream &(&)(ostream &)型に対してあらかじめ<<演算子が定義されているだけ。
0073デフォルトの名無しさん
2005/05/15(日) 11:59:35int testfunc(char *s_in[],int *size)
{
int i=0;
while(i<*size){
if(s_in[i++] == "="){
printf("%d文字目に=があった。\n",i);
}
}
return 0;
}
main()
{
int size=10;
char s_in[size]="=";
testfunc(s_in,&size);
return 0;
}
これをコンパイルしても「定数式が必要(main関数)」というエラーが出て通りません。
何がダメなんでしょう?
それと、testfunc内でsizeは*を使わないとエラーになるのに、s_in[i]は*をつけるとエラーになります。
これは何故ですか?
0074デフォルトの名無しさん
2005/05/15(日) 12:08:06> これをコンパイルしても「定数式が必要(main関数)」というエラーが出て通りません。
>何がダメなんでしょう?
古いCだと、配列の大きさは定数でなければならない。
#define SIZE 10
char s_in[SIZE] = "=";
とでもするべし。
>それと、testfunc内でsizeは*を使わないとエラーになるのに、s_in[i]は*をつけるとエラーになります。
>これは何故ですか?
s_in[i]は、*(s + i)と同じ意味を持つ。
0075デフォルトの名無しさん
2005/05/15(日) 12:26:08ありがとうございます。
新しいCならば、変数でも可能なのでしょうか?
その行に来たときに動的に配列を作成してくれるということなのでしょうか?
0076デフォルトの名無しさん
2005/05/15(日) 12:26:46以下のように修正したところ、「互換性のないポインタ変換」というエラーが出ました。
これは何故でしょうか?
#include <stdio.h>
#define size 10
int testfunc(char *s_in[],int size_)
{
int i=0;
while(i<size_){
if(s_in[i++] == "="){
printf("%d文字目に=があった。\n",i);
}
}
return 0;
}
main()
{
char s_in[size]="=";
testfunc(s_in,size);
return 0;
}
007773&76
2005/05/15(日) 12:27:550078デフォルトの名無しさん
2005/05/15(日) 12:28:08うん。
0079デフォルトの名無しさん
2005/05/15(日) 12:37:49testfuncの仮引数で、
char *s_in[]
とあるけど、これは「char *の配列」を指定している。
一方mainではcharの配列(これはchar *に変換される)を渡している。
008069
2005/05/15(日) 12:58:22ありがとうございました。できました。
ostream& test ( ostream& out )
{
out << " " << setw(2) << setfill('0');
return out;
}
しかしどうやったらこういう知識を得られるのでしょうか?
ある日突然朝起きたら閃くわけじゃないよね?
0081デフォルトの名無しさん
2005/05/15(日) 13:02:150082デフォルトの名無しさん
2005/05/15(日) 13:06:28・俺は「プログラミング言語C++第三版」で読んだ。
・「マニピュレータ c++」でググると9番目に出てくる。
・知識はなくとも、自分で<<を定義できることを知っていれば考え出せる。
struct test_t{} test;
std::ostream &operator<<(std::ostream &out, const test_t &)
{
out << " " << setw(2) << setfill('0');
return out;
}
008369
2005/05/15(日) 13:13:34(すでに転職して消えてしまった)先輩がちょろっと、「マニピュレーターは単なる関数だから」って言ってたのを覚えていたから。
いなくなって初めてわかる「できる先輩」のありがたさ。もっと教わっておくんだった。
>>82
Stroup先生の本は翻訳が読みづらい…
プログラマーには向いてないんですかね orz
0084デフォルトの名無しさん
2005/05/15(日) 13:21:55"Stroustrup"な。翻訳が読みづらいと思うなら、原書を読むのはどうかね?
0085デフォルトの名無しさん
2005/05/15(日) 13:26:350086デフォルトの名無しさん
2005/05/15(日) 14:17:14WSADATA wsadata;
WSAStartup(MAKEWORD(1,1),&wsadata);
が必要なのでしょうか?
wsadataなんて使わないプログラムなんですが、これがないとエラーになってしまいます。
0087デフォルトの名無しさん
2005/05/15(日) 14:22:00ttp://msdn.microsoft.com/library/en-us/winsock/winsock/wsastartup_2.asp
"The WSAStartup function must be the first Windows Sockets function called by an application or DLL."
0088デフォルトの名無しさん
2005/05/15(日) 14:26:31あ、WSAstartupが必要らしいってことはわかるんです。
でも、wsadataなんて使わない構造体を宣言するのにどうも違和感が…。
0089デフォルトの名無しさん
2005/05/15(日) 14:29:39要らないならローカルに定義してすぐ捨てればいいだろ。
0090デフォルトの名無しさん
2005/05/15(日) 14:34:56やっぱり一回は必要なんですね。
どこかで初期化したら、他の関数ではもう意識しなくていいということですか。
ありがとうございましたー
0091デフォルトの名無しさん
2005/05/15(日) 14:40:39あんたが必要なくてもライブラリが必要とするわけだ。
0092デフォルトの名無しさん
2005/05/15(日) 23:52:36みたいな文字列のメンバに、コンストラクタの初期化リストで適当な文字を入れて
初期化したいときはどうやって書けばよいのでしょうか。
0093デフォルトの名無しさん
2005/05/15(日) 23:56:540094デフォルトの名無しさん
2005/05/16(月) 00:04:02上記のようにすべて省略した場合、無限ループになるのでしょうか?
また、この省略は文法的に認められているのでしょうか?
for( i=0 ; ;i++ )
また上記のようにエンドのみを終了した場合も無限ループとなるのでしょうか?
0095デフォルトの名無しさん
2005/05/16(月) 00:06:38ありがとうございます。
char型の文字列だと無理なんでしょうか?
例えば名前を入れたい文字列だとして、
初期値として"名無し"と初期化したりしたいのですが。
0096デフォルトの名無しさん
2005/05/16(月) 00:09:50無理です。
同様に、配列の {} による初期化もできません。
0097デフォルトの名無しさん
2005/05/16(月) 00:10:58全部省略したら無限ループになります。
;(セミコロン)は省略できませんが、その他は省略できます。
次の奴も無限ループになります。
0098デフォルトの名無しさん
2005/05/16(月) 00:12:28初期化を諦めて代入にすればどう?
まあ、初期化リストに書けない事で、継承していた場合の基本クラスの
コンストラクタ呼び出しが出来なくなるが・・・・・
0099デフォルトの名無しさん
2005/05/16(月) 00:16:04メンバをポインタ変数にし、"奈々氏"を返す関数で初期化する。
0100デフォルトの名無しさん
2005/05/16(月) 00:21:03char[] ひとつを代入にしたところで
基本クラスのコンストラクタ呼び出しには影響しないんじゃないか?
>>99
ポインタの指す先の寿命について厳しい注意が必要。
0101デフォルトの名無しさん
2005/05/16(月) 00:22:51いや、初期化リストの所に書きたいと言っているので、もしかしたら
親クラスのコンストラクタでも呼び出す可能性があるのかと思って。
気にしないでくだされ。
0102デフォルトの名無しさん
2005/05/16(月) 00:28:07やっぱり何が関係あるのかわからん。まあ気にしないでおくかな。
0103デフォルトの名無しさん
2005/05/16(月) 00:41:480104デフォルトの名無しさん
2005/05/16(月) 00:53:510105デフォルトの名無しさん
2005/05/16(月) 01:07:14そんな時は逆転の発想が必要です
CPUを無意味に使って、メモリも不必要に使い倒します
そうすれば、両方とも100%使用状態
特に取得する必要もありません
0106デフォルトの名無しさん
2005/05/16(月) 01:19:52あおどのくらい使用できるかを知りたいのですが・・・
つまりその、100%じゃないかどうかをしりたいのです
0107デフォルトの名無しさん
2005/05/16(月) 02:40:00負荷を徐々にかけていけば、どのへんが限界かわかるでしょう。
0108デフォルトの名無しさん
2005/05/16(月) 02:41:00どうやって?
0109デフォルトの名無しさん
2005/05/16(月) 02:44:190110デフォルトの名無しさん
2005/05/16(月) 03:08:46しかしその場合、仮想メモリがあったらエラーをかえさないのでは?
0111デフォルトの名無しさん
2005/05/16(月) 03:14:210112デフォルトの名無しさん
2005/05/16(月) 04:08:190113デフォルトの名無しさん
2005/05/16(月) 04:09:22配列は変数と違い関数内で書き換えると呼び出し元の値も変わるとあるサイトで解説されていたのですが、
この書き方では何がダメなんでしょうか。
それと、何故配列と普通の変数でこんなにポインタまわりの仕様が違うんですか?
#include <stdio.h>
void test(char hairetu[],int *var)
{
printf("%d\n",*var);
printf("%d\n",var);
printf("%d\n",hairetu);
hairetu[1] = "z";
}
main()
{
char data[6] = "aiueo";
int data2 = 10;
printf("%c\n",data[1]);
test(data,&data2);
printf("%c\n",data[1]);
return 0;
}
0114デフォルトの名無しさん
2005/05/16(月) 04:38:02hairetu[1] = 'z';
0115デフォルトの名無しさん
2005/05/16(月) 04:39:00わけのわからんメッセージだな。どこのコンパイラだ?
hairetu[1] = "z";
これがまずい。charにchar*を代入しようとしてる。
0116デフォルトの名無しさん
2005/05/16(月) 04:43:39コンパイル出来ました。
ありがとうございます。
"と'で意味違うんですね。
コンパイラはborland c++ compilerです。
0117デフォルトの名無しさん
2005/05/16(月) 10:55:36main以外の自作関数などでは成功時return 1;で失敗時return 0;とするほうが便利ですけど
自作関数ではこういう使い方でいいんですよね?
0118デフォルトの名無しさん
2005/05/16(月) 11:12:25DOSの頃、プログラム終了値は「エラーレベル(ERRORLEVEL)」とも言われてました。
その頃の名残ですね。DOSでIF ERRORLEVEL 〜 を使用して
BATファイルを組んだ事がある人ならピンとくるんですけどね。
自作関数は勿論自由に組んでOK。
戻り値はポインタの場合、0(=NULL)を返す事がざらですし。
0119デフォルトの名無しさん
2005/05/16(月) 11:12:51return 時の値は場合によって選択する
main() で成功時に 0 を返すのは、その方が都合がいいシェルでもあるのだろう。
0120デフォルトの名無しさん
2005/05/16(月) 11:15:33WindowsのAPIも成功時に0返すのが多い。
0121117
2005/05/16(月) 11:19:540122デフォルトの名無しさん
2005/05/16(月) 11:34:34そうか?
あまり無い気がするが
0123デフォルトの名無しさん
2005/05/16(月) 11:46:230124デフォルトの名無しさん
2005/05/16(月) 11:55:49cout << str << endl;
とするとabcと出ますが、これはstr[3]にNULLが入っているからその手前まで出力しているのですよね。
という事はcoutは出力文字数回の比較(その文字がNULLかどうか)をしていると言う事でしょうか。
つまり、
i=0;
while(str[i] != NULL){
str[i]を出力;
i++;
}else{ return }
という様に内部ではなっているのでしょうか?
しかしこれでは文字列が長いほど無駄が多くなります。
予め何バイトを出力すればいいのかが分かっている場合、
この様な比較処理無しに指定バイト数だけ出力したいのですが、何か方法はあるでしょうか?
0125デフォルトの名無しさん
2005/05/16(月) 12:03:59while(str[i] != NULL){
str[i]を出力;
i++;
}else{ return }
to
for(i=0;i<Length;i++;){
str[i]を出力;
}else{ return }
0126デフォルトの名無しさん
2005/05/16(月) 12:07:23> char str[10] = {"a","b","c"};
そのような初期化はエラーになる。
> while(str[i] != NULL){
> 〜
> }else{
そのような構文は無い。
0127124
2005/05/16(月) 12:09:00その場合、i<lengthの比較を出力文字数回行っているのでは?
str[i]を出力; の部分も具体的にどう書けばいいのか自分には良く分かりません。
coutの内部を予想するのにcoutを使うわけにもいかなかったのでそう書きましたけど。
1文字だけならcoutを使っても無駄無く出来るのか、余計な処理が入ってしまうのか・・前者なら良いのだけど。
0128デフォルトの名無しさん
2005/05/16(月) 12:09:21つまらねぇことを気にするな。
一般的に出力処理はそれ自体がコストが掛かるから、枝葉末節はどうでもいい。
0129124
2005/05/16(月) 12:13:37>>124は今書いているプログラムをデフォルメしたものですが、投稿したプログラムはデバッグしてませんでした。
str[]は末尾にヌル文字の入った適当な文字列
while〜elseと書いたのはstr[i]がNULL文字でない間出力処理をして、NULL文字が来たら終了という意図です。
0130デフォルトの名無しさん
2005/05/16(月) 14:29:170131デフォルトの名無しさん
2005/05/16(月) 14:33:00string s(len, '\0');
意味あるかは知らないけど
0132デフォルトの名無しさん
2005/05/16(月) 15:28:54if(a == "あいうえお") printf("%s" , a);
「もし右辺と同じ文字列が含まれているなら」という風に
したいのですが、教えてください。
0133デフォルトの名無しさん
2005/05/16(月) 15:30:540134デフォルトの名無しさん
2005/05/16(月) 15:34:07何をしたいのか具体的に。
>131じゃ余りに意味がない。
0135デフォルトの名無しさん
2005/05/16(月) 15:35:24>132をよく読め。
全体一致じゃなくて部分一致だぞ。
>>132
ということで、strstr()を使って味噌。
0136デフォルトの名無しさん
2005/05/16(月) 15:38:03int main()
{
int test = 1;
{
int test;
test = 100;
printf("%d\n", test);
}
printf("%d\n", test);
return 0;
}
0137デフォルトの名無しさん
2005/05/16(月) 15:41:12ありがとうございます
今のところ全体一致でも結構ですた。
0139デフォルトの名無しさん
2005/05/16(月) 15:41:57問題なし
0140デフォルトの名無しさん
2005/05/16(月) 15:42:39何を持って問題とするかの定義がないので何とも言えないが、
言語規約的には問題なし。
但し、ロジック的には余り意味がないという点で、問題あり。
0141デフォルトの名無しさん
2005/05/16(月) 15:48:490142デフォルトの名無しさん
2005/05/16(月) 16:00:01ワイド文字は wchar.h を利用した方が良い。
#include <wchar.h>
int main(int argc, char* argv[])
{
wchar_t a[] = L"あいうえお";
wchar_t b[] = L"かきくけこ";
wchar_t c[] = L"うえお";
if ( wcsstr( a, c ) != NULL ) {
printf( "Found\n" );
} else {
printf( "Not found\n" );
}
if ( wcsstr( b, c ) != NULL ) {
printf( "Found\n" );
} else {
printf( "Not found\n" );
}
return ( 0 );
}
0143デフォルトの名無しさん
2005/05/16(月) 16:13:16最たるものがWinProcだろ
0144デフォルトの名無しさん
2005/05/16(月) 16:17:16あまりに初心者な質問なので一応ここで。
ウィンドウにテキストを表示させようと思っているんですが、
// テキスト表示
CClientDC DC(this);
TEXTMETRIC tm;
CSize size;
// テキストの色を黒に設定
DC.SetTextColor(RGB(0, 0, 0));
DC.GetTextMetrics(&tm);
wsprintf(mm_str, "th=%f, Ae=%f, Be=%f", th,ae,be);
DC.TextOut(10, 450, mm_str, strlen(mm_str));
とやった場合、
error C2673: 'Grab_Thread' : グローバル関数にアクセスするための 'this' ポインタがありません。
といわれました。
これってどうすればいいんでしょうか。
C#だとthisって定義しなくてもいけたんで戸惑っております。。
ちなみにコードは本を見て書きました。というか変数以外は写しました。
0145デフォルトの名無しさん
2005/05/16(月) 16:26:38つーか提示されたコードにGrab_Threadなんて見当たらないんだが。
0146デフォルトの名無しさん
2005/05/16(月) 16:26:57それをどの関数に書いたのかが重要
0147デフォルトの名無しさん
2005/05/16(月) 16:29:20質問とは関係無いが、
mm_str がマルチバイトなのかシングルバイトなのか・・・。
int swprintf( wchar_t *buffer, const wchar_t *format [, argument] ... );
size_t strlen( const char *string );
0148デフォルトの名無しさん
2005/05/16(月) 16:31:56よく見ろ。swprintfじゃなくてwsprintfだぞ。
0149デフォルトの名無しさん
2005/05/16(月) 16:34:01どこがおかしいでしょうかって聞いてるのか
0150147
2005/05/16(月) 16:34:470151デフォルトの名無しさん
2005/05/16(月) 16:48:38そういうのは 「多い」 とは言わん。
0152デフォルトの名無しさん
2005/05/16(月) 16:50:040153151
2005/05/16(月) 16:50:570154144
2005/05/16(月) 16:52:40よくわからないもので。
UINT Grab_Thread(LPVOID WinObjPtr)
{
CApp *theapp=(CApp*)AfxGetApp();
HIFCGRAB grabID;
int ring_frames = 3;
DWORD frame_count;
BYTE *pHostBuffFrame;
int iSeqNum;
WORD sum;
int i,j;
DWORD t[2048], nbuf, dwWritten;
HANDLE hFile3;
char mm_str[255];
while(g_ThreadFlg){
さっきの中身
}
}
といった感じです。
0155デフォルトの名無しさん
2005/05/16(月) 16:56:37クラスのメンバ関数じゃないとthisは無いぞ
0156デフォルトの名無しさん
2005/05/16(月) 16:56:500157144
2005/05/16(月) 17:00:02#include <stdio.h>
#include <math.h>
#include <string.h>
〜中略〜
int g_ThreadFlg;
UINT Grab_Thread(LPVOID WinObjPtr);
//メインウィンドウ構築
CMainWin::CMainWin(LPCSTR ClassName)
{
と続きますが。。
0158デフォルトの名無しさん
2005/05/16(月) 17:04:20キャストして使うのでは
0159デフォルトの名無しさん
2005/05/16(月) 17:10:170160デフォルトの名無しさん
2005/05/16(月) 17:15:24CClientDC DC(this);を
CClientDC DC(static_cast<CWnd *>(WinObjPtr));にしたらどうなる?
0161デフォルトの名無しさん
2005/05/16(月) 17:17:59C++に限定しないなら、プログラム全体のグローバル変数・関数をメンバに持つ実行コンテキストクラスのインスタンスだろうな。
0162144
2005/05/16(月) 17:49:01なんかテキストクラスというのがあって、
そこをいじっていたらできました。
ほかにCClientDC DC(this)を宣言してるとこがあったみたいです。。
お手数おかけしました。
ありがとうございます。
0163デフォルトの名無しさん
2005/05/16(月) 18:39:29構造体か何かで定義して、そのアドレス(ポインタ?)をextern宣言?
0164デフォルトの名無しさん
2005/05/16(月) 18:47:480165デフォルトの名無しさん
2005/05/16(月) 18:50:160166デフォルトの名無しさん
2005/05/16(月) 18:57:22構造体定義するくらいならクラスにする
0167デフォルトの名無しさん
2005/05/16(月) 19:43:32お前わかってないな〜
class と struct はぜんぜん違うよ
0168デフォルトの名無しさん
2005/05/16(月) 19:53:340169デフォルトの名無しさん
2005/05/16(月) 19:54:06デフォルトがパブリックかプライベートかだけの差でしょ?
0170デフォルトの名無しさん
2005/05/16(月) 20:03:540171デフォルトの名無しさん
2005/05/16(月) 20:04:140172デフォルトの名無しさん
2005/05/16(月) 20:11:15class と struct の言語仕様上の違いは、デフォルトが private か public だけだ。
しかし、struct のイメージは、「データ構造」であり、
class のイメージは「オブジェクト」なんだ。
これを分かっていないで何でもかんでも class にしたがるやつがいるが、
イメージは大事にせにゃあかんぞ。それで可読性も変わる。
0173デフォルトの名無しさん
2005/05/16(月) 20:16:49被虐体質(マゾ)な香具師なんだろ。
0174デフォルトの名無しさん
2005/05/16(月) 20:22:26コンストラクタと operator= だけを持つ struct なんてぇモノを
タマに作るんですが、邪道でつか?
0175デフォルトの名無しさん
2005/05/16(月) 20:22:300176デフォルトの名無しさん
2005/05/16(月) 21:24:11中身がPODならできる。
0177デフォルトの名無しさん
2005/05/16(月) 21:29:240178デフォルトの名無しさん
2005/05/16(月) 21:42:39浮動小数点数やポインタを含んでいると不具合が出る処理系もある。
0179デフォルトの名無しさん
2005/05/16(月) 21:51:42延べ約44時間コードとにらめっこしてもワカリマセンorz
ご指南よろしくお願いします・・・
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/397.txt
0180デフォルトの名無しさん
2005/05/16(月) 21:59:100181デフォルトの名無しさん
2005/05/16(月) 22:04:01…って書くと馬鹿にしてるみたいだな
0182デフォルトの名無しさん
2005/05/16(月) 22:18:43headの宣言の場所がおかしいみたいですね・・・
他にも問題は山積みっぽいですがもうちょい頑張って考えてみます。
有難うございました。
0183デフォルトの名無しさん
2005/05/16(月) 22:21:23動的確保って意味わかる?
0184デフォルトの名無しさん
2005/05/16(月) 22:21:27で、グローバル変数がいくつか必要なときはあんたならclassにしないでstructにするということか?
#だとしたら呆れたもんだ。
0185デフォルトの名無しさん
2005/05/16(月) 22:27:10readnumの頭にhead = newdigit();でも突っ込んどけばとりあえず動きはする
あと p->value = c - '0';
それにgetcharした文字が数字かどうか判別しないと題意に沿わない希ガス
>1行に1個のデータを
っていうのも考慮されてないし確かに問題山積み
0186デフォルトの名無しさん
2005/05/16(月) 22:28:42int value;
Digit *prev;
Digit *next;
};
typedef struct list Digit;
普通この順番だろ?
0187デフォルトの名無しさん
2005/05/16(月) 22:30:22データってあるでしょ?
そんなのはどうすればいいにょ?
0188デフォルトの名無しさん
2005/05/16(月) 22:30:300189デフォルトの名無しさん
2005/05/16(月) 22:31:21int value;
Digit *prev;
Digit *next;
};
0190デフォルトの名無しさん
2005/05/16(月) 22:32:22グローバル変数にすれば?
0191デフォルトの名無しさん
2005/05/16(月) 22:33:08文法的に問題ない
0192デフォルトの名無しさん
2005/05/16(月) 22:37:550193191
2005/05/16(月) 22:39:15186だと問題大有りw
0194191
2005/05/16(月) 22:40:160195デフォルトの名無しさん
2005/05/16(月) 22:55:09namespace Global で包む。
0196デフォルトの名無しさん
2005/05/16(月) 23:00:310197デフォルトの名無しさん
2005/05/16(月) 23:35:08ガッ
0198デフォルトの名無しさん
2005/05/17(火) 00:29:540199デフォルトの名無しさん
2005/05/17(火) 00:32:390200デフォルトの名無しさん
2005/05/17(火) 00:38:59マジだすか?
( ゚д゚)ポカーン
0201デフォルトの名無しさん
2005/05/17(火) 00:48:58b が取れたら有料ものになるのかしらん。
0202デフォルトの名無しさん
2005/05/17(火) 01:41:44独自プロトコル、DCOM、SOAP、その他?
0203デフォルトの名無しさん
2005/05/17(火) 02:08:050204デフォルトの名無しさん
2005/05/17(火) 02:26:35NetBEUI
0205デフォルトの名無しさん
2005/05/17(火) 04:01:51その様な関数があれば名前を教えてもらえませんか。
0206デフォルトの名無しさん
2005/05/17(火) 05:57:41環境書かないとわからんぞ。
Pentium以降のx86ならインラインアセンブラなりでRDTSC命令呼べばいいんじゃないか?
WindowsならQueryPerformanceCounter
0207デフォルトの名無しさん
2005/05/17(火) 09:56:06戻り値とか引数の型が一致してないといけませんか?
0208デフォルトの名無しさん
2005/05/17(火) 09:57:540209デフォルトの名無しさん
2005/05/17(火) 10:42:320210デフォルトの名無しさん
2005/05/17(火) 15:38:390211208
2005/05/17(火) 17:11:180212デフォルトの名無しさん
2005/05/17(火) 18:17:30共変の戻り値でググれ。
0213デフォルトの名無しさん
2005/05/17(火) 18:18:16class A
{
public:
virtual int Test(int i) { cout << "A::Test(" << i << ")" << endl; return i; }
};
class B: public A
{
public:
long Test(int i) { cout << "B::Test(" << i << ")" << endl; return i; }
};
コンパイル通らなかったよ。
0214デフォルトの名無しさん
2005/05/17(火) 18:38:53{
public:
Base* Clone();
};
class Derived : public Base
{
public:
Derived* Clone();
};
0215デフォルトの名無しさん
2005/05/17(火) 18:57:52コンパイル通らなかったよ。
VC6 で。
0216デフォルトの名無しさん
2005/05/17(火) 19:21:300217デフォルトの名無しさん
2005/05/17(火) 19:22:45話だったりして
0218デフォルトの名無しさん
2005/05/17(火) 19:22:56勉強不足
0219デフォルトの名無しさん
2005/05/17(火) 19:47:05Derived型だと分かっているときにClone()を呼ぶと戻り値がDerived型なのでアップキャストしなくていいというのが肝。
0220デフォルトの名無しさん
2005/05/17(火) 20:04:290221デフォルトの名無しさん
2005/05/17(火) 22:18:56javaで言うabstruct、interface は、C++だとどういう記述になるのでしょうか?
作成方法と継承方法をお願いします。
また、c++にあるvirtualという予約語は、オーバーライドさせるためにあるのでしょうか?
でもこの記述がなくてもできますよね?
以上!
0222デフォルトの名無しさん
2005/05/17(火) 22:30:53C++の入門書でも買って読め。
以上
0223デフォルトの名無しさん
2005/05/17(火) 22:36:30バカはJavaでもやってろ
以上!
0224デフォルトの名無しさん
2005/05/17(火) 22:51:44共に通常のclassとして宣言し、interfaceのメソッドとabstractメソッドをC++ではvirtualメンバ関数にすればよい。
virtualでないメンバ関数は、派生クラスのオブジェクトを基底クラスのポインタ・参照から使うと、基底クラスのメンバ関数が呼ばれる。
#include <iostream>
using namespace std;
class A {
public:
f() {cout << "A::f()" << endl;}
virtual g() {cout << "A::g()" << endl;}
};
class B : public A{
public:
f() {cout << "B::f()" << endl;}
virtual g() {cout << "A::g()" << endl;}
};
int main() {
A *p = new B;
p->f(); //A::fが呼ばれる。
p->g(); //B::fが呼ばれる。
delete p;
}
0226デフォルトの名無しさん
2005/05/17(火) 23:51:16class CTest {
public:
int _1;
int _2;
CTest(void) :i_1(3){}
CTest(const int n) :i_1(n){}
CTest(const int n, const int d) :i_1(n){ this->_2 = d;}
void test() { std::cout << _1 << _2 << std::endl; }
};
というクラスがあります。
引数一つだけのコンストラクタの書き方と
引数二つのコンストラクタの書き方は、動きが違うと聞きました。
理由を教えてください。可能なら詳細に
0227デフォルトの名無しさん
2005/05/18(水) 00:15:28関数に複数の戻り値をもたせることって可能ですか?
VBはできなったんだけどCではできるのかな???
0228デフォルトの名無しさん
2005/05/18(水) 00:16:51explicit指定のない一引数のコンストラクタは暗黙の型変換を導入する。その例だと、
CTest x = 3; /* CTest x(3);と同じ。 */
の様に使える。
0229デフォルトの名無しさん
2005/05/18(水) 00:16:58読み込んだかどうかを調べたいのですが、どうすればいいのでしょう。
やりたいことは改行までに現れる不定個の整数を読み込んで処理することなんですが……。
while (1) {
while (1) {
cin >> c;
// もし改行なら break;
...
}
}
0230デフォルトの名無しさん
2005/05/18(水) 00:18:00直接はできない。普通は代わりにポインタを渡したり構造体を返したりする。
0231デフォルトの名無しさん
2005/05/18(水) 00:19:03cはcharか?もしそうならc = cin.get()とすると、空白を読み飛ばさない
0232227
2005/05/18(水) 00:47:53THX!やっぱりできないのか〜
構造体を返すってのはわかるけどポインタを渡す???
ポインタを戻り値にしても一つしかあらわせないんじゃないのかな?
0233デフォルトの名無しさん
2005/05/18(水) 00:49:51配列
0234デフォルトの名無しさん
2005/05/18(水) 00:52:16---foo.h----
#include "bar.h"
----main.cc-----
#include "foo.h"//n.g
#include "bar.h"//o.k
int main(){
Bar baka;
baka.getBaka();//link error
}
こんな感じなんですが。。
0235デフォルトの名無しさん
2005/05/18(水) 00:54:59「エラーが出る」と相談するときにはエラーメッセージをコピペしよう。
0236デフォルトの名無しさん
2005/05/18(水) 00:59:21横レスになるけど、230の書いたのは
ポインタを戻り値にするんじゃなくて引数として渡すってこと。
VBでいうByRefみたいなもの。
C++では参照渡しという方法もある
0237227
2005/05/18(水) 01:11:56ありがとう〜
なるほどよくわかったよ、参照渡しのことか!!!
複数の戻り値を次の行でまた違う関数の引数にしようとおもってたから
構造体はちょっとめんどくさそうだったんだよね、ByRef(゚Д゚ )ウマー
0238デフォルトの名無しさん
2005/05/18(水) 01:13:49配列
0239デフォルトの名無しさん
2005/05/18(水) 01:21:46morio.o(.text+0x45): In function `main':
: undefined reference to `bkl::Random::Random()'
えーっと、こんな感じの参照先が見つからないってエラーがいっぱい出ます。
無いと言われる物のオブジェクトファイルはちゃんと引数に渡しているんですが。。
0240デフォルトの名無しさん
2005/05/18(水) 01:40:58gccだな。
ほんとうに #include の書き方だけで何か変わるんなら、
gcc -E main.cc をそれぞれの状態で実行して、出力を比べてみるといい。
0241デフォルトの名無しさん
2005/05/18(水) 01:41:15他のヘッダファイルのinclude順番じゃねの?
0243デフォルトの名無しさん
2005/05/18(水) 01:57:51インクルードガードしてないうっかりミスとか?
0244デフォルトの名無しさん
2005/05/18(水) 01:59:30複数のクラスを1つのnamespaceにするために
---foo.h----
namespace bkl {
#include "bar.h"
#include "hoge.h"
...
}
こんな感じでやってたんですが、これってまずかったんでしょうか。。
0245デフォルトの名無しさん
2005/05/18(水) 02:05:28まずい。
ヘッダは全部グローバルで #include されているものと考えるべき。
bar.h の中で namespace bkl { ... }
hoge.h の中でも namespace bkl { ... }
0246デフォルトの名無しさん
2005/05/18(水) 02:12:17そうだったんですか、、これから全部書き直して来ます。ありがとうございました。
0247デフォルトの名無しさん
2005/05/18(水) 03:21:58ファイルを固めたアーカイブから、1ファイルだけをメモリにロードして、そのデータを
ファイルとして扱いたいのですが。
0248デフォルトの名無しさん
2005/05/18(水) 06:40:05なぜポインタを渡すだけで必要な文字長でちゃんと代入されますか。
0249デフォルトの名無しさん
2005/05/18(水) 07:39:18null-terminated
0250デフォルトの名無しさん
2005/05/18(水) 09:15:56ポインタのNULLと混同するから、その呼び方はやめてほしいなぁ。
0251デフォルトの名無しさん
2005/05/18(水) 09:46:270252デフォルトの名無しさん
2005/05/18(水) 10:07:45Char型なんてない。
>>250
ではなんと呼べと。
0253デフォルトの名無しさん
2005/05/18(水) 10:14:26計算出力/*2005/5/18*/
/*
#include <studio.h>;
char* main(WORD)
{
int i
i = scanf(%d+10);
print("\%d=%d\ti=%d", %d, i);
print("%d+10=i");
extern (char*)i;
]
0254デフォルトの名無しさん
2005/05/18(水) 10:21:56何このゴミ。
0255デフォルトの名無しさん
2005/05/18(水) 10:23:140256デフォルトの名無しさん
2005/05/18(水) 10:28:410257デフォルトの名無しさん
2005/05/18(水) 11:10:08NULL文字
NULLポインタ
こう言えば混同も何も無いだろ
オマエが混同しやすい言い方してるだけ
0258250
2005/05/18(水) 11:31:09全部大文字の NULL で「NULL文字」なんて言ってるのは、混同している日本人だけじゃないか?
memset(&a,NULL,sizeof(a)) なんてコード、もう見たくないんだよ。
0259デフォルトの名無しさん
2005/05/18(水) 11:51:39ヌルポインタ。
0260デフォルトの名無しさん
2005/05/18(水) 11:59:570261デフォルトの名無しさん
2005/05/18(水) 12:15:17Javaスレにお帰りください
0262デフォルトの名無しさん
2005/05/18(水) 12:18:560263デフォルトの名無しさん
2005/05/18(水) 12:24:04ここにあるWindows用のソースコードをコンパイル方法を教えてください。
環境はWinXPHomeとC++Builder6Proです。
0264249
2005/05/18(水) 12:28:59深く考えずに大文字でNULLと書いてしまったが
言われてみればごもっとも・・・orz
(言い訳させてもらえば、カタカナで書くのを一瞬躊躇したためで、
英語を併記したのもそのためです)
0265デフォルトの名無しさん
2005/05/18(水) 12:38:03>混同している日本人だけじゃないか?
混同しているMSも含めといて下さい。
0266デフォルトの名無しさん
2005/05/18(水) 12:39:520267デフォルトの名無しさん
2005/05/18(水) 12:40:050268デフォルトの名無しさん
2005/05/18(水) 12:42:32doc/pdflib/readme-source-windows.txt
読んでガンガレ
ってこれしかないが・・
Building PDFlib with other Windows compilers
--------------------------------------------
In order to build PDFlib with other compilers, observe the above
notes and make sure to define the preprocessor symbol WIN32.
それ以上は専用スレいったほうがよさげ
0269デフォルトの名無しさん
2005/05/18(水) 13:25:30だからそれをヌル文字と呼ぶんだっつの
0270デフォルトの名無しさん
2005/05/18(水) 15:00:12とあるクラスをヘッダファイル(hoge.h)の中だけで全部インラインで書いてたのですが、
微妙なのでCPPファイル(hoge.cpp)を作ってそちらに実装を書き写したところ、
メンバにSTLのmapを使っているところでエラーが出まくりました。
環境はVisualC++6.0SP5です。
↓こんなかんじです
private:
map<unsigned short, FUGAGA> // 構造体FUGAGAを値、unsigned shortをキーとするmap
(略)hoge.h(333) : error C2143: 構文エラー : ';' が '<' の前に必要です。
(略)hoge.h(333) : error C2501: 'map' : 識別名を宣言するのに、型が指定されていません。
(略)hoge.h(333) : error C2059: 構文エラー : '<'
(略)hoge.h(333) : error C2238: ';' の前に不正なトークンがあります。
以下略...
ヘッダファイルだけでインラインで全部書いていたときは出なかったエラーなので
元に戻したら直ったのですが、
hoge.cppでたった一行
#include "hoge.h"
と書いただけで上記のエラーがずらーっと・・・・
(実装内容は全部ヘッダに戻したので実質hoge.cppには上記の一行しか書いてない状態)
mapのヘッダファイルはインクルードしてるし、#include "hoge.h"をコメントアウトしたら
ビルドに成功するので文法上の間違いとかではなさそうなのですが
原因が全く思いつきません・・・・
どなたか教えてください、よろしくお願いしますm(_ _)m
0271デフォルトの名無しさん
2005/05/18(水) 16:11:40リビルドして味噌。
さもなくばhoge.hをぎりぎりまで削ってみるとか。
0272270
2005/05/18(水) 16:23:05削る=行数を減らすということでしょうか?
あと訂正です、
private:
map<unsigned short, FUGAGA> mapFugaga; // 構造体FUGAGAを値、unsigned shortをキーとするmap
でした、すみません
0273デフォルトの名無しさん
2005/05/18(水) 16:26:090274デフォルトの名無しさん
2005/05/18(水) 16:27:42とか。いやまさか。
0275デフォルトの名無しさん
2005/05/18(水) 16:32:04if(ptr->g_Flg){
・・・
}
って、g_Flgがtrueならば(ブーリアンです)if内に入るってことでいいんですよね?
いままで順調に動いていたんですが、if内で使用するクラスを作ったら、
入らなくなってしまったのですが。。
何か原因とかありますか?
ifのとこでブレークさせても、ちゃんと 1が返ってきてます。
ちなみに新クラスは、
void CMainWin::Recter_ctrl(int sX, int sY, int eX, int eY)
{
CPaintDC DCP(this);
DCP.BitBlt(0,0,maxX,maxY,&m_memDC,0,0,SRCCOPY);
CBrush HollowBrush;
HollowBrush.CreateStockObject(HOLLOW_BRUSH);
m_memDC.SelectObject(&m_RedBrush);
m_memDC.Rectangle(sX,sY,eX,eY);
m_memDC.SelectObject(&HollowBrush);
if(eY > 700) ResetWin();
InvalidateRect(NULL);
}
で関係ないと思うのですが。。
0276デフォルトの名無しさん
2005/05/18(水) 16:35:03そ・・・・・それでした|||||||||orz
アホなミスでお手数かけてスミマセン つД`)
いつもテキトーにusing namespaceで済ませてたから気付きませんでした・・・
どうもありがとうございましたm(_ _)m
0277デフォルトの名無しさん
2005/05/18(水) 18:08:39いま仮想ウィンドウでビットマップ作ってCDCで長方形を表示させているのですが、
引数が左上の座標と右下の座標しかないのですが、
この長方形を斜めに傾かせることってできますか?
0278デフォルトの名無しさん
2005/05/18(水) 18:10:15ポリゴン描画(あったかなかったか覚えてねぇ)か線分描画で描くべし。
0279デフォルトの名無しさん
2005/05/18(水) 18:14:32char* str;
void setstring()
{
str = "hello world";
}
void main()
{
setstring();
printf("%s \n", str);
}
setstring()関数中で文字列ポインタをsetに入れた場合に
その関数からリターンしたあとで、そのポインタが使ってもいいですか?
0280デフォルトの名無しさん
2005/05/18(水) 18:20:11その"hello world"の寿命はプログラムの生存期間に等しい。故に問題ない。
#が、何故グローバル変数にする?
0281デフォルトの名無しさん
2005/05/18(水) 18:20:17数字読み込みに便利な関数など、ありませんか?
ANSI-Cでなくても構わないです。
0282デフォルトの名無しさん
2005/05/18(水) 18:21:31setstring()中に記述されている"文字列"は
ローカルにあるわけじゃないので使ってもいい
0283デフォルトの名無しさん
2005/05/18(水) 18:22:09CかC++かで答えが変わるがどっちだ?
0284デフォルトの名無しさん
2005/05/18(水) 18:23:03両方
0285デフォルトの名無しさん
2005/05/18(水) 18:29:12ありがとうございました。
質問ではchar* strなのですが、実際はもっとややこしい形をしています;;
>>282
ローカルではなく、プログラム内にあると考えればいいんですね。。。
ありがとうございました。
0286281
2005/05/18(水) 18:34:050288デフォルトの名無しさん
2005/05/18(水) 19:04:18>>入力演算子
0289281
2005/05/18(水) 19:11:450290デフォルトの名無しさん
2005/05/18(水) 19:40:18キャストしてint型変数に渡すという方法を教えてください。
0291デフォルトの名無しさん
2005/05/18(水) 19:42:00数値って数字のコード'0'〜'9'って事か?isdigit()。
0292デフォルトの名無しさん
2005/05/18(水) 19:51:38c-'0'とか文字列ならatoiとか。
0293デフォルトの名無しさん
2005/05/18(水) 20:23:08そです。10進法です。でもchar型だから無理です。
>292
atoiする前にchar変数の中身が整数か確認したいのです。
if(〜みたいな感じで
c-'0'ってのはよく分かりません
0294デフォルトの名無しさん
2005/05/18(水) 20:27:36if (isdigit(c))
i = c - '0';
else
puts("not a number!");
0295293
2005/05/18(水) 20:56:41ありがとうございます。
でもisdigitはchar型の引数は無理みたいです。
0296デフォルトの名無しさん
2005/05/18(水) 21:04:59isdigitのプロトタイプは
int isdigit(int);
で、引数にchar型を取ったら、自動的にint型へのプロモート(格上げ)が
行われるからモーマンタイのはず。
もしかして #include <ctype.h> をしてないだけのオチ?
0297293
2005/05/18(水) 21:16:46#include <string.h>
#include <stdlib.h>
#include <ctype.h>
int main()
{
char c[] = "1";
int i;
if (isdigit(c))
i = c - '0';
else
puts("not a number!");
return 0;
}
こんな感じですが。
0298293
2005/05/18(水) 21:31:560299デフォルトの名無しさん
2005/05/18(水) 21:40:32まあそう言うな。char型の配列とは初耳だぞ。
その文脈では、atoi()を使うのが適切だ。
で、atoi()を適用する前に、すべての配列の要素に対してisdigit()
を適用し、全部OKだったら初めてatoi()を使えばいい。
というか、情報を小出しにするな。分かる物も分からなくなるだろが。
0300デフォルトの名無しさん
2005/05/18(水) 21:56:400301デフォルトの名無しさん
2005/05/18(水) 22:03:59#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int isint(const char *str)
{
while (isdigit(*str++)) {
if (*str == '\0')
return 1;
}
return 0;
}
int main()
{
char c[][5] = {"123X", "1234", "A123"};
int i;
int N = sizeof(c) / sizeof(c[0]);
for (i = 0; i < N; i++)
if (isint(c[i]))
printf("%d\n", atoi(c[i]));
else
printf("%s isn't a number.\n", c[i]);
return 0;
}
0302293
2005/05/18(水) 22:16:03逃げるようで申し訳ないのですが
頭冷やして出直してきます(´・ω・`)
0303デフォルトの名無しさん
2005/05/18(水) 22:46:500304デフォルトの名無しさん
2005/05/18(水) 23:20:110305デフォルトの名無しさん
2005/05/18(水) 23:40:320306デフォルトの名無しさん
2005/05/18(水) 23:44:560307デフォルトの名無しさん
2005/05/18(水) 23:46:290308デフォルトの名無しさん
2005/05/18(水) 23:57:310309デフォルトの名無しさん
2005/05/19(木) 00:01:11│ ヽ( ,_ノ`)ノ 残念 それは私のおいなりさんだ
│ へノ /
└→ ω ノ
>
0310デフォルトの名無しさん
2005/05/19(木) 00:08:59あとはstrtol()とかさ。
if (sscanf(s, "%d", &n) == 1) {
/* OK */
} else {
/* NG */
}
0311デフォルトの名無しさん
2005/05/19(木) 00:13:59それでは"123X"みたいな文字列もOKになってしまう。
質問者がどこまで要求しているのかわからないが。
0312258(=250)
2005/05/19(木) 01:09:25MSDNを眺めてみたけど、英語サイトで "null terminated" と書いてあるものを
日本語訳によって「NULLで終わる」とされているようだった。
こいつらの影響も大きいな。
>>266
"NULL character" と "NULL文字" でぐぐってみて、そう思った。
0313デフォルトの名無しさん
2005/05/19(木) 03:30:41sscanf()を使うなら%nで変換終了点をチェック。
まぁ、それくらいならstrtol()で同じ事をすればよろしい。
0314デフォルトの名無しさん
2005/05/19(木) 08:36:47rect*nのように書く事で中身をn倍できるようにしたいのですが、
演算子のオーバーロードとかいうのを使えばできるのかと思ったんですけど
書き方が分かりません。どうやって書けばよいのでしょうか。
0315デフォルトの名無しさん
2005/05/19(木) 08:51:140316デフォルトの名無しさん
2005/05/19(木) 08:52:51矩形をn倍って、倍率だけじゃなくて拡大の中心が必要じゃないか?
0317デフォルトの名無しさん
2005/05/19(木) 09:30:07できました。今回やりたい事はこれだけで用が足ります。
ありがとうございました。
0318デフォルトの名無しさん
2005/05/19(木) 11:06:42ボタンなどのコントロールを
メンバ変数で持つのと、GetDlgItem()するのと
どういった違いがあるのでしょうか。
お願いします。
VC++6.0 WinXP
0319デフォルトの名無しさん
2005/05/19(木) 11:21:35例えばエディットボックスは前者ならCEditのようにコントロール変数で持つこともCStringやintのように値として持つこともできる。
後者ではCEdit * p = static_cast<CEdit *>(GetDlgItem(...))すればコントロール変数にはなる。
方針を決めて、適材適所でいいと思う。
#値として扱いたいなら前者
#そのダイアログクラス内で何箇所から操作/参照する必要があるなら前者
#そうでないなら後者
0320318
2005/05/19(木) 13:31:30なるほど。
値として扱えるのですね。
いつも値が欲しい時は
GetWindowText()などとしていました。
いくつかの場所でボタンに対し操作を行うので
メンバ変数で持つことにします。
ありがとうございました。
0321デフォルトの名無しさん
2005/05/19(木) 14:29:260322デフォルトの名無しさん
2005/05/19(木) 15:25:510323デフォルトの名無しさん
2005/05/19(木) 15:34:55変数→コントロールがFALSEだった・・
0324デフォルトの名無しさん
2005/05/19(木) 15:44:39struct x{
int i;
char c[];
}
この手のソースは見るがどのコンパイラでもOKかは不明。
普通はポインタじゃないか。
0325デフォルトの名無しさん
2005/05/19(木) 15:48:410326デフォルトの名無しさん
2005/05/19(木) 16:09:10C99では実行時に動的に確保されると言うことですか?
0327デフォルトの名無しさん
2005/05/19(木) 16:11:240328デフォルトの名無しさん
2005/05/19(木) 16:21:54C99では可変長配列が扱えると言うことです。
0329デフォルトの名無しさん
2005/05/19(木) 17:08:140330デフォルトの名無しさん
2005/05/19(木) 17:22:04その後は変更できないんじゃないの?
0331デフォルトの名無しさん
2005/05/19(木) 18:15:590332デフォルトの名無しさん
2005/05/19(木) 18:35:440333デフォルトの名無しさん
2005/05/19(木) 18:35:51呼び出しもとのプログラムのさらに呼び出し元のプログラムに戻らせる方法はありますか?
0334デフォルトの名無しさん
2005/05/19(木) 18:38:520335デフォルトの名無しさん
2005/05/19(木) 18:47:450336デフォルトの名無しさん
2005/05/19(木) 19:14:110337デフォルトの名無しさん
2005/05/19(木) 19:23:54インラインアセンブラを使えば戻れます。
但し、スタックの巻き戻しは省略します(w
0338デフォルトの名無しさん
2005/05/19(木) 20:15:40戻り先に戻るかどうかを決める情報を返せばいいだろ。
0339デフォルトの名無しさん
2005/05/19(木) 21:37:21配列をプリントfする方法を教えてください。
VC++でお願いします。
d:\car.dat n個*m列は任意
豊田、ホンダ、日産
ノア、DQNワゴン、セレナ
あるファード、エリシオン、LLグランド
0340デフォルトの名無しさん
2005/05/19(木) 21:47:13あとスレタイな
0341339
2005/05/19(木) 21:47:140342デフォルトの名無しさん
2005/05/19(木) 22:02:47麻奈とか望洋とかの本には、書いてないのです。
1次元の文字配列をそのまま出力とか。
int*[]とか、VBだと誰でもやっているのに
MFCに組み込みたいのです。
0343デフォルトの名無しさん
2005/05/19(木) 22:15:58Segmentation fault(core dumped)と表示されて失敗します。
原因は何でしょうか?
0344デフォルトの名無しさん
2005/05/19(木) 22:22:160345デフォルトの名無しさん
2005/05/19(木) 22:31:08実行ファイルのパスを取得したいのですがどうしたらよいのでしょうか?
VBではapp.pathを参照すれば簡単に取得できるのですが・・
0346デフォルトの名無しさん
2005/05/19(木) 22:31:58gdb使うか、printf埋め込んでどの行でおきたか調べる
たいていは初期化してないポインタでアクセスしたとか
NULLポインタとかその辺
0347デフォルトの名無しさん
2005/05/19(木) 22:34:08argv[0]とかGetModuleFilename()とか
0348デフォルトの名無しさん
2005/05/19(木) 22:38:340349デフォルトの名無しさん
2005/05/19(木) 22:50:03関数呼び出しのオーバーヘッドが無視できないほど大きいとき。
0350343
2005/05/19(木) 22:53:120351348
2005/05/19(木) 23:04:29馬鹿ですいませんが、関数の呼び出しのオーバーヘッドが気になる場合って
わからなかったりw
Win上でヌルくPGやっている分には気にしないでいいですか?
0352デフォルトの名無しさん
2005/05/19(木) 23:08:22ループの真ん中が関数の場合とインラインの場合ではループする回数が大きいほど差が出るのはわかるべ
0353345
2005/05/19(木) 23:12:50GetModuleFilename()で試してみたいと思います。
0355デフォルトの名無しさん
2005/05/20(金) 00:09:42何ででしょうか?
#include <stdio.h>
#include <stdlib.h>
typedef struct node *link;
struct node {int item; link next;};
int main(int argc,char *argv[]) {
struct node heada,headb;
int i,N=atoi(argv[1]);
link t,u,x,a = &heada,b;
srand(1);
for(i=0,t=a;i<N;i++){
t->next = malloc(sizeof *t);
t = t->next; t->next = NULL;
t->item = rand() % 1000;
}
b = &headb; b->next = NULL;
for(t=a->next; t!=NULL;t=u){
u=t->next;
for(x=b;x->next!=NULL;x=x->next)
if(x->next->item > t->item) break;
t->next = x->next;
x->next = t;
}
}
0356デフォルトの名無しさん
2005/05/20(金) 00:24:01何がやりたいの?
そのコードだと出力が全然無いから動いたかどうか確認できないと思うけど。
0357デフォルトの名無しさん
2005/05/20(金) 00:36:220358デフォルトの名無しさん
2005/05/20(金) 00:37:54出るのでそれが出ないようにしたいんです。
0359デフォルトの名無しさん
2005/05/20(金) 00:54:510360デフォルトの名無しさん
2005/05/20(金) 00:57:46もう、お茶目さんね!最適化をOFFにして、一行ずつデバッガで実行してみれば
わかるじゃないの。
0361デフォルトの名無しさん
2005/05/20(金) 09:02:59前に詰めてくれますか?
詰めない場合、swapメソッドでソートするのが正攻法?
0362デフォルトの名無しさん
2005/05/20(金) 09:04:430363361
2005/05/20(金) 09:36:580364デフォルトの名無しさん
2005/05/20(金) 10:12:58意味ワカンネ
0365デフォルトの名無しさん
2005/05/20(金) 11:32:340366362
2005/05/20(金) 11:53:42初心者なので分かっているのかどうかも分かりません。
やりたい事はCGIのPOSTメソッドで送られてきた入力を受け取る事なのですが、
cinやreadで標準入力を受け取ると値のコピーになりますよね?
入力データに対して行う操作が参照だけなので、
ポインタを使おうと思ったのです。
0367デフォルトの名無しさん
2005/05/20(金) 12:09:42int x;
int y;
};
int main(void)
{
char Buf[100];
0368デフォルトの名無しさん
2005/05/20(金) 12:16:26struct Map{
int x;
int y;
};
int main(void)
{
//1バイト列のデータ確保して
char Buf[100];
//Map型のポインタでアドレス計算してバイト列にアクセス
Map* pMap = (Map*)Buf;
for(int i=0; i<... ;i++)
{
pMap[i].x = 5;
pMap[i].y = 10;
}
return 0;
}
とやってもよろしいものでしょうか?
もちろん確保した領域を超えてアクセスしないように考慮しますが。
Win⇔Linuxの通信に使います。
0369デフォルトの名無しさん
2005/05/20(金) 12:19:20標準入力はシステムコール、API 等から直接返されるもので、どこか特定のメモリに
格納されるものではない。
従ってポインタでアクセスしようというアプローチは間違い。
ファイルへのアクセスと同じ。
0370デフォルトの名無しさん
2005/05/20(金) 12:19:52アラインメントが正しく保たれているなら、問題ない。
0371デフォルトの名無しさん
2005/05/20(金) 12:20:43無問題だが、union を使わない理由は何だ?
0372デフォルトの名無しさん
2005/05/20(金) 12:21:09intのサイズやエンディアンやアライメントなど、不安要素はいくつかある。
それらの要素に対して、現在および将来に渡って確証が持てない限り、
よろしくないと思われる。
0373368
2005/05/20(金) 12:47:43実際にはintじゃなくてfloatだったりしますが、
もうすぐ64ビットとかいってるのにintで例に出したのは悪かったかもしれません。
unionの使い方はよくわかりませぬ。ちょっと調べてみます。
暇な人いればご教授いただければ幸いです。
0374デフォルトの名無しさん
2005/05/20(金) 12:49:440375デフォルトの名無しさん
2005/05/20(金) 12:54:370377デフォルトの名無しさん
2005/05/20(金) 14:44:19具体的にはどう決まるんでしょうか?
32ビット機なら4バイト、とかですか?
0378デフォルトの名無しさん
2005/05/20(金) 14:45:19コンパイラを書いたやつの勝手。
0379デフォルトの名無しさん
2005/05/20(金) 15:43:15t->next = malloc(sizeof *t);
t->next = malloc(sizeof t);
0380デフォルトの名無しさん
2005/05/20(金) 15:48:57そのsizeofの値をprintしてみな
0381デフォルトの名無しさん
2005/05/20(金) 15:55:06とりあえず、実行時に引数の数字はつけてるか
0383382
2005/05/20(金) 16:10:000384デフォルトの名無しさん
2005/05/21(土) 17:27:18これを実行すると違う値が出てしまいます。
何が間違っているのでしょうか?
#include <stdio.h>
#define TEST_STRING "abcdefghijklmnopqrstuvwxyz"
int main() {
char *str = TEST_STRING;
printf("%p\n",str);
printf("%p\n",TEST_STRING);
return 0;
}
0385デフォルトの名無しさん
2005/05/21(土) 17:33:04#define はテキストマクロなので、
char *str = "abcdefghijklmnopqrstuvwxyz";
printf("%p\n",str);
printf("%p\n","abcdefghijklmnopqrstuvwxyz");
と書いたのと同じ。
文字列リテラルは、内容が同じでも同じ領域に確保されるとは限らない。
0386デフォルトの名無しさん
2005/05/21(土) 17:33:34普通は違うのが当たり前。別々な文字列リテラルが確保されるから。
但し、BCCなどのコンパイルオプションによっては、同一文字列リテラル
をマージする事ができるものがあり、それだと同じアドレスになる。
0387デフォルトの名無しさん
2005/05/21(土) 17:41:25>>386
ありがとうございました。
0388デフォルトの名無しさん
2005/05/22(日) 09:30:38int array[num];
このコードは、C++ では通りますが C では通りません。
理由を教えてください。
0389デフォルトの名無しさん
2005/05/22(日) 09:40:53C99サポートのCなら通る。
0390388
2005/05/22(日) 10:46:440391デフォルトの名無しさん
2005/05/22(日) 10:49:130392デフォルトの名無しさん
2005/05/22(日) 11:20:35昔のCではサポートしてない
C99ならおけ、って >389もいっとろーが
0393デフォルトの名無しさん
2005/05/22(日) 11:22:190394デフォルトの名無しさん
2005/05/22(日) 11:50:46確か昔は構造体の丸ごとコピー(代入)ができなかったんだよね
0395デフォルトの名無しさん
2005/05/22(日) 12:09:47まるごとコピーはかなり昔からできた
0396デフォルトの名無しさん
2005/05/22(日) 12:30:49hoo(100,200)のような書き方で簡単に中身に代入できるようにするには
どうしたらよいですか。
struct hoge{
int a;
int b;
};
0397デフォルトの名無しさん
2005/05/22(日) 12:32:060398デフォルトの名無しさん
2005/05/22(日) 12:34:41最近C触ってないから忘れちったぃ。
0399デフォルトの名無しさん
2005/05/22(日) 12:40:07void operator()(int x, int y) { a = x; b = y; }
int a;
int b;
};
0400デフォルトの名無しさん
2005/05/22(日) 12:41:500401デフォルトの名無しさん
2005/05/22(日) 12:43:56エラー E2141 s.c 10: 宣言の構文エラー
エラー E2139 s.c 10: 宣言に ; がない
警告 W8004 s.c 10: 'hoo' に代入した値は使われていない
エラー E2190 s.c 10: 不要な }
エラー E2190 s.c 10: 不要な }
0402デフォルトの名無しさん
2005/05/22(日) 12:44:32例えば関数の引数としてhoge型の構造体変数を渡したいとき、
一旦hooを作って値を入れて、それを関数に渡すのではなくて、
関数の引数のところに直接
func(hoo(100,200));
みたく書けるようにしたいです。
0403デフォルトの名無しさん
2005/05/22(日) 12:49:14C99対応コンパイラなら
-----
typedef struct { int x, y; } point_t ;
void PutPixel(const point_t *p)
{
...
}
...
PutPixel(&(point_t){640, 480});
//または
PutPixel(&(point_t){.x=640, .y=480});
-----
ってなことができるらしい
0404デフォルトの名無しさん
2005/05/22(日) 12:53:550405デフォルトの名無しさん
2005/05/22(日) 12:53:57hoo gen_hoo( int, int ){}
func( gen_foo( 100, 200 ) );
0406402
2005/05/22(日) 13:02:26func(hoge(100,200));のように書きたかったです。
というか実際使いたいのはwinのPOINT型構造体です。
関数に渡す際などに、一々変数を作って渡すのが面倒くさいので
func(POINT(100,200));のようにかけないものかと思って質問させていただいた次第です。
0407402
2005/05/22(日) 13:13:17整理しますと、
・winのPOINT構造体型の変数hooに対し、hoo(100,200);のように値を一度に代入する方法
・変数を作らずにfunc(POINT(100,200));のようにPOINT構造体を引数として渡す方法
を知りたいです。
0408デフォルトの名無しさん
2005/05/22(日) 13:25:55POINT構造体返す関数でも作れば?
POINT SETPOINT(int x, int y)
{
POINT point;
point.x = x;
point.y = y;
return point;
}
void func_test(POINT& point)
{
printf("x: %d, y:%d\n", point.x, point.y);
}
main()
{
func_test(SETPOINT(100, 200));
}
0409デフォルトの名無しさん
2005/05/22(日) 13:32:36脳内コンパイルすな!
0410デフォルトの名無しさん
2005/05/22(日) 14:54:41C99ならコンパウンドリテラルでぐぐれ。
C++ならこんなカンジで。
#include <stdio.h>
using namespace std;
class CPoint {
public:
int x, y;
CPoint(int x, int y)
{
this->x = x;
this->y =y;
}
};
void func_test(CPoint point)
{
printf("x: %d, y:%d\n", point.x, point.y);
}
main()
{
func_test(CPoint(100, 200));
}
0411デフォルトの名無しさん
2005/05/22(日) 18:19:25MFCあるいはATLのCPointを使えばfunc(CPoint(100, 200));と書ける。
ATLのなら<atltypes.h>をインクルードするだけで使えるんじゃないかと思う。(だめでも自分で作ればいいだけだし)
CPointはPOINTから継承されているのでPOINTを引数に取る関数へもそのまま渡せる。
0412デフォルトの名無しさん
2005/05/22(日) 19:58:18ようするに引数指定のコンストラクタ付き構造体か
0413デフォルトの名無しさん
2005/05/22(日) 20:15:17最近のCの仕事ってMFC不要ってのが多いの?
組み込みとかはMFCあまりいらないだろうけど、
業界仕事としてはCだけできれば採用可能ってのか多い
んかい??
0414デフォルトの名無しさん
2005/05/22(日) 20:21:57そりゃそうだ。
MFCなんてそもそもCでは使えない。
0416デフォルトの名無しさん
2005/05/22(日) 22:27:45それでもあまり変わらないが…。
Windows以外にMFCは使えないわけだし。
君の言う業界ってWindowsを除くのか?
0417デフォルトの名無しさん
2005/05/22(日) 22:28:47Windows以外を、だ。
0418デフォルトの名無しさん
2005/05/22(日) 22:42:400419デフォルトの名無しさん
2005/05/22(日) 23:44:17方法はForで無限ループさせ
ループのたびに、システム時間をチェックし、
設定時間になったらループを抜けるようにしようと思うのですが
システムへの負荷って無茶苦茶高くなってしまうものなのでしょうか?
またforで無限ループさせる以外に他になにかいい方法がありましたらお教え願います。
0420デフォルトの名無しさん
2005/05/22(日) 23:50:07素直にAPIつかっとけ
0421デフォルトの名無しさん
2005/05/22(日) 23:53:19たいまいべんとってないの?
0422デフォルトの名無しさん
2005/05/23(月) 00:17:110423419
2005/05/23(月) 00:52:12APIは使えないと思います。(コンパイラが未対応)
>>421
タイマイベントというのは、APIによるタイマイベントでしょうか?
Cでそういったイベントを発生できるのでしたら
ヒントでもお教え頂けないでしょうか。。
0424デフォルトの名無しさん
2005/05/23(月) 00:56:14環境依存と書かれた時点でピュアCでは出来ないことは自明ではなかろうか。
0425デフォルトの名無しさん
2005/05/23(月) 00:58:34標準ライブラリにしたって各プラットフォームのAPI呼んでる訳なんだが‥‥
0426デフォルトの名無しさん
2005/05/23(月) 01:03:140427デフォルトの名無しさん
2005/05/23(月) 01:08:320428デフォルトの名無しさん
2005/05/23(月) 01:09:400429419
2005/05/23(月) 01:10:45環境はUNIX(AIX)です。。。
0430デフォルトの名無しさん
2005/05/23(月) 01:42:39In function 'main':
warning: assingment makes pointer from without a cast
となって失敗します。これってどうしろってことなんですか?
0431430
2005/05/23(月) 01:46:55はしたことになってたみたいです。なんでもないです。
0432デフォルトの名無しさん
2005/05/23(月) 02:00:01警告:assingmentはポインターを作ります、fromキャストなし
キャスト汁!
0433デフォルトの名無しさん
2005/05/23(月) 02:04:280434デフォルトの名無しさん
2005/05/23(月) 02:11:50ご存知の方はいませんでしょうか?
WIN32 の場合、CreateFile の dwFlagsAndAttribute に
FILE_FLAG_NO_BUFFERING フラグをつけると、L1,L2 キャッシュを汚染せずに
file からメモリに直接DMA転送します。同様の事を linux で行いたいと考えている
のですが、fread 文を使うとキャッシュを汚染してしまうようです。
なお、マルチスレッドで file access スレッドと複数のデータ処理スレッドからなる
構造のプログラムであり、mmap を使用する事はできません。
いい方法をご存知の方は、ぜひご教授下さい。m(_ _)m
0435デフォルトの名無しさん
2005/05/23(月) 02:16:15この場合は別の警告がでねーか? 知らねー関数がでてきたけど...みたいな
0436デフォルトの名無しさん
2005/05/23(月) 07:05:55FILE_FLAG_NO_BUFFERINGはCPUのキャッシュじゃなくて
メモリ上に取られるファイルキャッシュを使わないという意味だと思うが。
0437デフォルトの名無しさん
2005/05/23(月) 07:14:35C++ならね。
Cだと単にintを返す関数と仮定される
0438デフォルトの名無しさん
2005/05/23(月) 07:21:340439デフォルトの名無しさん
2005/05/23(月) 07:25:24Cでもプロトタイプがないって警告を出す処理系もある。(BCCとか)
0440デフォルトの名無しさん
2005/05/23(月) 14:37:55何を検索すれば資料が出ますか?
0441デフォルトの名無しさん
2005/05/23(月) 15:31:110442デフォルトの名無しさん
2005/05/23(月) 16:13:470443デフォルトの名無しさん
2005/05/23(月) 18:44:56キーを押した事にすると言う意味なら。
PostMessage(他のアプリのHWND, WM_KEYDOWN, キーコード, 0);
0444デフォルトの名無しさん
2005/05/23(月) 18:49:420445デフォルトの名無しさん
2005/05/23(月) 19:46:030446デフォルトの名無しさん
2005/05/23(月) 21:10:270447デフォルトの名無しさん
2005/05/23(月) 21:12:17class unko {
private:
int kuso;
public:
void setkuso() {
kuso = tinko.sikko();
}
int ketsu() { return 1; }
} unko;
class tinko {
private:
int tinpo;
public:
void settinpo() {
tinpo = unko.ketsu();
}
int sikko(){ return 1; }
} tinko;
のようにグローバルでclass変数を宣言してるんですが、
自分より後に宣言されているほうのメソッドを内部で呼び出してると、
「未定義のオブジェクト」エラーがでてしまいます。
どうしたもんでしょう。
スコープ解決演算子とかそういう関係でなんとかなるんですかね?
どっちを先に定義しても、あとのほうで定義している関数も中で呼び出してる
ので必ず未定義のオブジェクトエラーになっちゃうんですが
0448デフォルトの名無しさん
2005/05/23(月) 21:24:04class unko {
private:
int kuso;
public:
void setkuso();
int ketsu() {return 1;}
};
class tinko {
private:
int tinpo;
public:
void settinpo();
int sikko(){return 1;}
};
unko u;
tinko t;
void unko::setkuso() {
kuso = t.sikko();
}
void tinko::settinpo() {
tinpo = u.ketsu();
0449デフォルトの名無しさん
2005/05/23(月) 21:42:500450デフォルトの名無しさん
2005/05/23(月) 21:44:020451デフォルトの名無しさん
2005/05/23(月) 21:46:110452デフォルトの名無しさん
2005/05/24(火) 03:09:15なぜ?
0453デフォルトの名無しさん
2005/05/24(火) 06:43:15>FILE_FLAG_NO_BUFFERING フラグをつけると、L1,L2 キャッシュを汚染せずに
>file からメモリに直接DMA転送します。同様の事を linux で行いたいと考えている
自信満々で言ってるけどほんまかいな?
0454デフォルトの名無しさん
2005/05/24(火) 14:09:47コンパイラの最適化でループ処理を消されるからか計算時間がほとんどかからず終わってしまいます。
どうすればベンチマークが取れますか?
int main(){
unsigned long bit1 = 156761546,bit2=4891656,max = 500000,i=0,a;
a = time(NULL);
while(i<max){
bit1 = bit1 & bit2;
i++;
}
cout << time(NULL) - a << endl;
}
0455デフォルトの名無しさん
2005/05/24(火) 14:59:37time a.out
Windowsならパフォーマンスカウンタとか使えば?
0456デフォルトの名無しさん
2005/05/24(火) 15:29:03最適化をオフにすればいいだろ。
0457デフォルトの名無しさん
2005/05/24(火) 15:56:451万回くらい実行したら
0458デフォルトの名無しさん
2005/05/24(火) 15:58:17談合の悪寒w
0459デフォルトの名無しさん
2005/05/24(火) 16:33:01ループの中に関数呼び出しを入れてみろ。何もせずにリターンする関数でいい。
大抵の場合最適化が取り消される。
inline関数はお勧めしないが。
0460デフォルトの名無しさん
2005/05/24(火) 16:57:56void main(void)
{
int kazu;
kazu=1;
scanf("%d\n",&kazu);
while(kazu<50)
{
printf("%d\n",&kazu);
kazu=kazu+1;
}
を実行して、1と2を入力したら、
1
2
1245052
1245052
1245052
1245052
.
.
.
と出てきた。
ちなみにMicrosoft Visual C++(Win32?)使用。
0461デフォルトの名無しさん
2005/05/24(火) 17:01:18マルチ(orコピペ)すなや。
0462デフォルトの名無しさん
2005/05/24(火) 17:02:49いっぱい仕事とれますか?
C++できんってヤツが周りに多くて困っている
んだが。
0463デフォルトの名無しさん
2005/05/24(火) 17:04:53新しいことを吸収する能力の欠如に自分自身が気付いていないことだね。
0464デフォルトの名無しさん
2005/05/24(火) 17:05:13氏ね
0465デフォルトの名無しさん
2005/05/24(火) 17:05:520466デフォルトの名無しさん
2005/05/24(火) 19:11:00% output = load_file(filename)
lsofで見てみると、膨大なPIPEが出てきています。
outputを他のプログラムに渡す処理をするとき、それも「1ファイルのオープン」となって、それが残ってしまっているのかなと思います。
どうやってこのファイルを消せばいいのでしょうか?
0467デフォルトの名無しさん
2005/05/24(火) 19:12:35closeするだけだと思うのだが、言語は何かね。
0468デフォルトの名無しさん
2005/05/24(火) 19:16:31そのコードはCにもC++にも見えないが。
0469デフォルトの名無しさん
2005/05/24(火) 19:17:52output = load_file(filename)
x = program(output)
と続きます。
0470デフォルトの名無しさん
2005/05/24(火) 19:19:300471デフォルトの名無しさん
2005/05/24(火) 19:21:140472466
2005/05/24(火) 19:36:05if ((ptr = popen (cmd, "r")) == NULL)
{
error("Can't execute command");
return retval;
}
のパイプが残っていることがわかりました。これをcloseすれば良かったんですね。
ありがとうございました。
0473デフォルトの名無しさん
2005/05/24(火) 20:50:40#include <boost/spirit.hpp>
とincludeしただけで以下のエラーが出てどうしようもない状況です。
google検索しても見つからず途方に暮れています
解決方法をご存知の方、ご教授お願いします。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): error C2065: 'ScannerT' : 定義されていない識別子です。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): error C2065: 'ListT' : 定義されていない識別子です。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): error C2687: 列以外でテンプレート クラスの入れ子の UDT を定義できません。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
0474デフォルトの名無しさん
2005/05/24(火) 20:50:48#include <boost/spirit.hpp>
とincludeしただけで以下のエラーが出てどうしようもない状況です。
google検索しても見つからず途方に暮れています
解決方法をご存知の方、ご教授お願いします。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): error C2065: 'ScannerT' : 定義されていない識別子です。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): error C2065: 'ListT' : 定義されていない識別子です。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): error C2687: 列以外でテンプレート クラスの入れ子の UDT を定義できません。
d:\lib\boost\boost\spirit\core\non_terminal\subrule.hpp(105): fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
0475デフォルトの名無しさん
2005/05/24(火) 20:51:350476デフォルトの名無しさん
2005/05/24(火) 21:10:360477デフォルトの名無しさん
2005/05/24(火) 21:48:47コンパイルエラーのメッセージがアホ過ぎだ。
1箇所間違えただけでエラー箇所いっぱい出てくるし
しかも肝心の場所とちがう。
0478デフォルトの名無しさん
2005/05/24(火) 22:31:54郷に入りては(ry
0479デフォルトの名無しさん
2005/05/24(火) 22:38:43class A {
private:
static void (*func)(int);
};
funcの定義の方法が分かりません。
どのように定義すればよろしいのでしょうか。
よろしくお願いいたします。
0480デフォルトの名無しさん
2005/05/24(火) 22:41:55「intを引数にとってvoidが戻り値の関数へのstaticなポインタを
privateメンバに持っている」と定義されていると思うんだけれども。
何を定義したいのかな?
0481デフォルトの名無しさん
2005/05/24(火) 22:45:16void (*A::func)(int) = ...;
0482デフォルトの名無しさん
2005/05/24(火) 23:40:02擬似的ものでも何か実現する方法はないですか?
関数経由じゃないとだめでしょうか?
0483デフォルトの名無しさん
2005/05/24(火) 23:41:51const
const
const
const
const
const
const
const
const
0485デフォルトの名無しさん
2005/05/25(水) 01:31:30アラインを揃えたメモリを確保して転送する必要があるので、DMA転送している
のだと思ってたんだけど、違うのかな? 速度的にも fread より遥かに速いようだし。
自信は全く無し。。 orz
0486デフォルトの名無しさん
2005/05/25(水) 08:42:48を宣言していくのが見やすいですかね??暗黙の定石みたいなものってないんですか。
class x {
public:
int momo;
void momomo();
};
class y {
public:
int mamama;
void mama();
};
void x::mama() {
}
void y::momomo() {
}
↑こうなのか
class x {
public:
int momo;
void momomo();
};
void x::mama() {
}
class y {
public:
int mamama;
void mama();
};
void y::momomo() {
}
↑こっちがいいのか。あなたの判定はドッチ?
0487デフォルトの名無しさん
2005/05/25(水) 08:51:14宣言と定義は混ぜないのが基本。
0488aaa
2005/05/25(水) 09:27:05typedef struct foo{
int x;
} foo;
typedef struct bar{
foo *y;
} bar;
int main(void){
int i;
int x, y;
bar A;
A.y->x = 100;
printf("%d", A.y->x);
return 0;
}
#if 0
gcc test.c;./a.out
コンフィグオプション:
../configure --prefix=/usr --mandir=/usr/share/man
--infodir=/usr/share/info --enable-shared --enable-threads=posix
--disable-checking --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-java-awt=gtk
--host=i386-redhat-linux
スレッドモデル: posix
gcc バージョン 3.4.3 20050227 (Red Hat 3.4.3-22.fc3)
#endif
確保していないはずの領域に書きこめてしまうのはなぜですか?
0489デフォルトの名無しさん
2005/05/25(水) 09:29:59たまたまです。環境と運が悪ければシステムごと落っこちます。
0490aaa
2005/05/25(水) 09:37:10落ちないほうがむしろ運が悪いんでしょうね
0491デフォルトの名無しさん
2005/05/25(水) 10:41:07#include <math.h>
main()
{
printf("%f",(1/100)*100);
return 0;
}
で計算すると、0.0000000になりました。これはなぜなんでしょうか?
0492デフォルトの名無しさん
2005/05/25(水) 10:46:23(1/100)*100は全て整数演算。実数演算したかったらどれかを実数の定数にせよ。
Ex.:(1.0/100)*100
0493デフォルトの名無しさん
2005/05/25(水) 10:54:210494492
2005/05/25(水) 11:06:380495デフォルトの名無しさん
2005/05/25(水) 12:11:04括弧とか計算符号とかどうすればいいのかがわからない○| ̄|_
教えてえらいひと
ちなみに環境なんてわかんないくらいの初心者君○| ̄|_
0496デフォルトの名無しさん
2005/05/25(水) 12:16:28http://www.redout.net/data/osietekun.html
0497デフォルトの名無しさん
2005/05/25(水) 12:17:060498デフォルトの名無しさん
2005/05/25(水) 13:56:210499デフォルトの名無しさん
2005/05/25(水) 20:04:26クラスメンバにオブジェクトを持つとき、
他のオブジェクトへのポインタじゃなくて、他のクラス変数自体を持つと
なんか問題があるのですか?
ヒープ領域を使うからデカいクラスをメンバに持っちゃダメだとか
書いてる人もいるけどそうなの?とにかくなんでポインタなんでしょうか
おしえてください
0500デフォルトの名無しさん
2005/05/25(水) 20:15:54つ憂鬱本
0501デフォルトの名無しさん
2005/05/25(水) 22:16:02ポインタならそのクラスのためのヘッダを外側のクラスのヘッダにインクルードしなくて済みますよ。
動的な差し替えとか、遅延初期化とかも可能だし。
オブジェクト指向チックにしたいなら、オブジェクトの型を固定するような使い方はそもそもしないのが吉。
ポインタにして作成メソッドをvirtualにしとけばサブクラスでオーバーライドできるしね。
> ヒープ領域を使うからデカいクラスをメンバに持っちゃダメ
まったくの嘘ですな。
0502デフォルトの名無しさん
2005/05/26(木) 00:01:01class a{
char c[4096];
};
class b{
a _a[4096];
};
void f(){
b _b[4096];
};
0503デフォルトの名無しさん
2005/05/26(木) 00:13:34丸ごと文字列で式を取り込んで、自作のパーサに取り込めば?
0504デフォルトの名無しさん
2005/05/26(木) 00:20:490505デフォルトの名無しさん
2005/05/26(木) 12:08:49なんだ括弧って。
0506デフォルトの名無しさん
2005/05/26(木) 15:02:24Cygwinでmakeを実行したら
$make
gcc -o hoge1 hoge.o
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/../../../../i686-pc-cygwin/bin/ld: cannot
find -luser32
collect2: ld returned 1 exit status
make: *** [hoge1] Error 1
と怒られてしまいました。
どうしたらいいのでしょうか。助けてください。
0507デフォルトの名無しさん
2005/05/26(木) 16:21:13LinuxとCygwinに何の関係が?
それはさておき、libuser32.aが見つからないと言っているようだ。
それを用意したまえ。
0508デフォルトの名無しさん
2005/05/26(木) 17:38:270509デフォルトの名無しさん
2005/05/26(木) 18:13:07君のレベルによる。
0510デフォルトの名無しさん
2005/05/26(木) 18:16:55case 1:
int aaa[3];
break;
case 2:
int aaa[10];
break;
}
このように宣言することはできないでしょうか?
実際やってみたらエラーがでまくりです
0511デフォルトの名無しさん
2005/05/26(木) 18:23:50無理。
0512デフォルトの名無しさん
2005/05/26(木) 18:26:03よくやる手だ
0513デフォルトの名無しさん
2005/05/26(木) 18:28:10俺もそう考えたが、質問者はあの配列を
下のほうで使うんじゃないかと思われる。
もしそうだったら>>512の手は使えないね
0514デフォルトの名無しさん
2005/05/26(木) 18:31:54>下のほうで使うんじゃないかと思われる。
どこをどう見たら…
0515デフォルトの名無しさん
2005/05/26(木) 18:34:36そもそも条件ごとに配列の要素数を変えることはできない。
最大値が判っているなら、それで済ませるのが無難かと。
つまり、>510の場合、int aaa[10]を定義して使いまわせばいい。
0516デフォルトの名無しさん
2005/05/26(木) 18:35:44だってすぐbreakで抜けてるじゃん
0517デフォルトの名無しさん
2005/05/26(木) 18:44:40試しに書いてるだけだろ
0518デフォルトの名無しさん
2005/05/26(木) 18:45:36本人に聞いてみろよ
0519デフォルトの名無しさん
2005/05/26(木) 18:46:500520デフォルトの名無しさん
2005/05/26(木) 18:50:170521デフォルトの名無しさん
2005/05/26(木) 18:51:580522デフォルトの名無しさん
2005/05/26(木) 18:54:450523デフォルトの名無しさん
2005/05/26(木) 19:02:59条件aによって配列のサイズを変えたいということじゃないだろうか?
ならば、
int size = 0;
switch( a ){
case 1:
size = 3;
break;
case 2:
size = 10;
break;
}
{
int aaa[size];
/* aaaに対する処理 */
}
のようにすれば何とかなると思われる。
C99に準拠してないコンパイラは怒るかもしれんが。
0524デフォルトの名無しさん
2005/05/26(木) 19:23:41int *aaa = new int[siae];
や
int *aaa = (int*)malloc(size);
すればいいさ。
0526510
2005/05/26(木) 21:16:49いろいろありがとです
switch文を出た後に同じような処理をするんで配列の確保だけを
無駄に多く配列を作らずにswitch文でできたらいいな〜と思ったしだいです
>>523-524さんのやつで行こうと思います
助かりました!!!
0527初心者
2005/05/26(木) 22:52:390528デフォルトの名無しさん
2005/05/26(木) 23:01:19数値的な微分でいいのか解析的な微分が必要なのかくらいは書いてくれ。
そんだけの情報じゃ私たちも全くわからなくて困ります。
0529初心者
2005/05/26(木) 23:05:06問題は数値的な微分です。
逐次計算式を作って計算するプログラムを作れといわれました。
0530デフォルトの名無しさん
2005/05/26(木) 23:05:55宿題スレに逝け
0531デフォルトの名無しさん
2005/05/27(金) 06:18:400532デフォルトの名無しさん
2005/05/27(金) 07:24:43#ifdefでは無理。#ifでやる必要がある。
#if defined HOGE && defined FOO || defined BAR
0533デフォルトの名無しさん
2005/05/27(金) 10:35:310534デフォルトの名無しさん
2005/05/27(金) 12:36:25ググレ
0535デフォルトの名無しさん
2005/05/27(金) 12:57:45case 0 || 1:
break;
case 2 || 3:
break;
case 4:
break;
}
エラー:case の値 '1' は既に使われています。
switch(a){
case 0:
break
case 1:
break;
case 2:
break
case 3:
break;
case 4:
break;
}
エラーなし
いったいどういうことなんでしょうか?
メディーーーーーーク
0536デフォルトの名無しさん
2005/05/27(金) 13:14:43case 0 || 1 ≡ case (0 || 1) ≡ case 1
case 2 || 3 ≡ case (2 || 3) ≡ case 1
そういうときは
case 0:
case 1:
// 処理
break;
case 2:
case 3:
// 処理
break;
case 4:
// 処理
0537デフォルトの名無しさん
2005/05/27(金) 13:15:05case 0 :
case 1 :
/* 0と1の処理 */
break;
case 2 :
case 3 :
/* 2と3の処理 */
break;
case 4:
break;
}
0538デフォルトの名無しさん
2005/05/27(金) 13:25:280539535
2005/05/27(金) 13:52:13無事通りました。ありがとうございます
でもなんで、「0または1」と「2または3」
という条件が一緒って判断されてしまうのでしょうか?????
やっぱりメディーーーーーーク
0540デフォルトの名無しさん
2005/05/27(金) 14:15:36↓
「FALSEまたはTRUE」も「TRUEまたはTRUE」
↓
TRUEもTRUE
同じ
0541デフォルトの名無しさん
2005/05/27(金) 14:26:46>>538
0542デフォルトの名無しさん
2005/05/27(金) 14:51:52timeGetTimeを使おうとして"mmsystem.h"をincludeすると
error C2146: 構文エラー : ';' が、識別子 'MMVERSION' の前に必要です。
fatal error C1004: 予期せぬ EOF が検出されました。
とエラーがでます。どうしたらよいでしょうか。
0543デフォルトの名無しさん
2005/05/27(金) 15:04:290544デフォルトの名無しさん
2005/05/27(金) 15:06:14#include <stdlib.h>
#include <mmsystem.h>
だけであります。
0545デフォルトの名無しさん
2005/05/27(金) 15:12:48#include "stdafx.h"
あと死ね。
0546デフォルトの名無しさん
2005/05/27(金) 15:15:36Aというクラスがあり、デフォルト引数を指定したコンストラクタを作成しました。
class A{
public:
void A(string filename);
void B(void);
};
A::A(string filename="test.txt")
{
x=new ofstream(filename.c_str());
}
main関数内で
A x("bbb.txt");
と引数を指定して作成した場合はコンパイルできるのですが
A x();
として作成した場合、エラーが出てコンパイルできません。エラーは具体的にはメイン関数内で
x.B();
と呼び出すところで起こり、
request for member 'B' in 'x', which is of non-class type 'A ()()'
というエラーメッセージが出ます。何がいけないのでしょうか?
0547デフォルトの名無しさん
2005/05/27(金) 15:19:56デフォルトのコンストラクタがない。
0548デフォルトの名無しさん
2005/05/27(金) 15:20:55インクルード ファイルがオープンできません。'stdafx.h': No such file or directory
当然だと思うのですが、とエラーが出ました。
あと、なんで死ななきゃなりませんか?
詳細に教えてください。
0549デフォルトの名無しさん
2005/05/27(金) 15:31:32A x();
と書くと、これはAを返す無引数関数の宣言になる。
A x;
と書くべし。
0550デフォルトの名無しさん
2005/05/27(金) 15:35:19ありがとうございます。下記のように変更してみたのですがやはり同じエラーが出ます。
class A{
public:
void A(string filename);
void A(void);
void B(void);
};
A::A(string filename)
{
x=new ofstream(filename.c_str());
}
A::A(void)
{
x=new ofstream( "test.txt");
}
0551549
2005/05/27(金) 15:37:34struct A
{
A(int i = 7);
};
A::A(int i){..}
0552デフォルトの名無しさん
2005/05/27(金) 15:43:250553デフォルトの名無しさん
2005/05/27(金) 15:45:46strftime
0554デフォルトの名無しさん
2005/05/27(金) 16:14:40死ぬほどではないが初歩的ミス。
プリコンパイルヘッダ
0555554
2005/05/27(金) 16:16:48まあ、あれでわかるからいいか。
0556デフォルトの名無しさん
2005/05/27(金) 16:30:17すいません、よく意味がわからないのですが、
stdafx.hとかいうのは、よくコンパイル時間を短くしたりしたい時なんかに
あまり変更しないヘッダなんかをそこに入れて自分で作るものじゃないんですか?
何の関係があるのでしょうか?
0557デフォルトの名無しさん
2005/05/27(金) 16:33:06そうだから、全ての.c/.cppファイルがインクルードしている必要がある。
0558デフォルトの名無しさん
2005/05/27(金) 16:35:30strDに数字が入ってるのですがこれをint型に直したいのですがどうすればいいでしょうか
0559デフォルトの名無しさん
2005/05/27(金) 16:38:23_ttoi
0560デフォルトの名無しさん
2005/05/27(金) 16:40:03mmststem.hはWORDとかUINTとかの型に依存していて、
しかも自分ではそれらの定義のあるヘッダをincludeしていないから、
mmsystem.hをincludeする前にそれをincludeしてやる必要がある。
windowsのsdkは詳しくないけど、多分windows.hをincludeしておけば大丈夫。
ちなみにstdafx.hは無関係。
0561542
2005/05/27(金) 16:46:00度々申し訳ないのですが、
全ての.c/.cppファイルが、「何を」インクルードしてる必要があるのでしょうか。
作ってるものは.cppファイル一つの単純なプロジェクトで、
自作のヘッダファイルも何もないのですが。
"mmsystm.h"を使いたいだけなのですが、
プリコンパイルヘッダが何の関係があるのか分かりません。
0563デフォルトの名無しさん
2005/05/27(金) 17:16:24何かってのは普通stdafx.hのこと。
fatal error C1004:とくれば大抵それが原因だから。
0564デフォルトの名無しさん
2005/05/27(金) 17:27:46ifstream fin(fileName, std::ios::in | std::ios::binary);
int a;
fin.get((char*)&a, sizeof(a));
このときバイナリデータが0x0Aだと読み込んでくれません。
fin.get((char*)&a, sizeof(a), 'a');
のように適当に区切り文字も変更すると読み込みますが、
これではぜんぜん根本的な解決になってません。。
どうすればいいんでしょうか?
0565デフォルトの名無しさん
2005/05/27(金) 17:29:290566564
2005/05/27(金) 17:39:03fin.readを使ったら解決できました。
でもbasic_istream.readは廃止予定みたいなワーニングがでます。
warning C4996: 'std::basic_istream<_Elem,_Traits>::read' が古い形式として宣言されました。
こちらはどうにかならないでしょうか?
0567542
2005/05/27(金) 17:52:13ですからそのファイルはどうやって用意すればよいでしょうか?
>>560の方の助言に従い解決しましたし、全て説明がついていると思うのですが、
それ以上にstdafx.hがこの問題の解決に何の関係があるのか気になっています。
0569デフォルトの名無しさん
2005/05/27(金) 17:57:130570542
2005/05/27(金) 18:02:29それとも私の読解力がないのでしょうか。
全く意味がわかりません。
0571デフォルトの名無しさん
2005/05/27(金) 18:11:360572デフォルトの名無しさん
2005/05/27(金) 18:27:22スッキリしないで気持ち悪いです。別の解決法でもあるのかなと。
全く関係ない話ですよね?
ただキチガイが意味不明なことを意って混乱させてようとしてるだけ
と考えてよいですか?
0573デフォルトの名無しさん
2005/05/27(金) 18:29:12おいおい、回答が多少ずれてたからといって回答者をキチガイとは聞き捨てならんな。
二度とこのスレに現れるなよ。
0574デフォルトの名無しさん
2005/05/27(金) 18:30:520575デフォルトの名無しさん
2005/05/27(金) 18:32:11それ自体の意味を教えてくれたんだとすれば、その方には御礼を言いたいですが、
発端の>>545のstdafx.hをインクルードすれば解決するってのは
全く関係ないですよね?
0576デフォルトの名無しさん
2005/05/27(金) 18:33:15単に自分の間違いを認めるのが嫌なだけだろ。許してやれよ。
>>573
何様のつもりだ?
あほな回答者を非難するのは当然だと思うが。
0577デフォルトの名無しさん
2005/05/27(金) 18:34:11>>545はC++スレの伝統的なコピペ。
0578デフォルトの名無しさん
2005/05/27(金) 18:34:410579デフォルトの名無しさん
2005/05/27(金) 18:37:170580デフォルトの名無しさん
2005/05/27(金) 18:45:270581デフォルトの名無しさん
2005/05/27(金) 18:49:220582デフォルトの名無しさん
2005/05/27(金) 18:53:470583デフォルトの名無しさん
2005/05/27(金) 18:55:530584デフォルトの名無しさん
2005/05/27(金) 19:16:39お前ら全員ワロピ
0585デフォルトの名無しさん
NGNGここによると
#include <stdio.h>が記述されていないとエラーになるそうですが、
自分がやってもエラーにならないんです。
どういうことでしょうか?
0586デフォルトの名無しさん
2005/05/27(金) 22:17:02それはよかったな。せいぜい書かずに精進してくれ。
しかしvoid mainってそこのページ・・・・・
0587デフォルトの名無しさん
2005/05/27(金) 22:18:37その例はCの規格に照らして正しいから(c99では「未定義」だが、これはエラーを出さなくても良いことを意味する)。
0588デフォルトの名無しさん
2005/05/27(金) 22:28:05全ての処理系でエラーになるわけではない。
ちなみにC++では必ずエラーになる。
0589デフォルトの名無しさん
NGNG問題でもあるんでしょうか?
0590587
2005/05/27(金) 22:31:19今、Cの標準規格にはC89とC99があって、C89の方が一般に使われている。
そのコードはC89では完全に正しい(良いスタイルかどうかは別だが)から、
コンパイラはエラーを出してはいけない(警告なら良い)。
C99では未定義だから、どう扱おうとコンパイラの勝手だということになる。
この点でそのページは間違ってるし、>>586の言ってる問題もあるから、お勧めはしない。
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
2005/05/27(金) 22:38:35正式なのはint main(void)とint main(int argc, char *argv[])だけ。
ただし同じ意味になるのであれば多少の相違点があっても問題ない。
例えばC++ではint main()も正しい。C++ではint main(void)と同じになるから。
0593デフォルトの名無しさん
2005/05/27(金) 23:16:43main()
main( int argc, char* argv[] )
は?
0594592
2005/05/27(金) 23:17:37結構古い本にそのようなことが書いてあり、
気になってC99の規格も読んでみたがそんなことが書いてあった。
ただし廃止予定事項となっていたが。
0595デフォルトの名無しさん
2005/05/28(土) 00:35:28これが、ソースの管理上やコンパイル等で悪影響を与える事はありますか?
環境VC2003です。
0596デフォルトの名無しさん
2005/05/28(土) 00:37:38Cだと関数定義/宣言の括弧になにも入れないと、K&Rスタイルとの互換性で
「引数チェックはしないよん」という意味になるんじゃなかったか
要するに何でも素通しの、プロトタイプ以前の世界。
0597デフォルトの名無しさん
2005/05/28(土) 00:38:23コンパイル時間は遅くなるだろうな
0598デフォルトの名無しさん
2005/05/28(土) 00:40:34ちょくちょくいじるプログラムだったらお勧めできない。
ちょっと変更しただけで全コンパイル走るし。
staticなメンバ変数の置き場にも困るな。
0599595
2005/05/28(土) 00:45:56*.hppのままでプリコンパイル済みヘッダとか効かすのって無理かや・・・。
ちょくちょくいじるソースなので、分ける事にします。
ヘッダとソース分かれているの、マンドクセ。
0600デフォルトの名無しさん
2005/05/28(土) 00:48:28JavaやC#になれていると、醜いと感じるかもしれないし
テンプレート使いまくりだと、めんどいと感じるかもしれないが
まあ我慢汁
0601デフォルトの名無しさん
2005/05/28(土) 00:51:55IDEがサポートしてくれりゃそれでいいんだろうけど、大体ツリー形式でパラメータ途中で切れてたりするし。
たいていアルファベット順に並び替えられちゃうし同じクラス内では全部フラットだから機能ごとにまとめて書くなんていプログラマの気遣いが水の泡になっちゃう。
C++のヘッダ見たほうが正確で速いや。
なんかコメント書いてあるかもしれないし。
0602デフォルトの名無しさん
2005/05/28(土) 00:54:14Stroustrupは同じ意見みたいだな。
まあJavaの場合はjavadocとかあるから。
0603デフォルトの名無しさん
2005/05/28(土) 09:08:07staticにしただけじゃだめでした。static constだと値が変更できないのでちょっと今回の用途には合いません。
どなたかご教授おねがいします
0604デフォルトの名無しさん
2005/05/28(土) 09:08:230605デフォルトの名無しさん
2005/05/28(土) 09:16:44static で何が不満なんだ?
0606デフォルトの名無しさん
2005/05/28(土) 09:24:56//ヘッダ
class hoge
{
static int foo;
};
//cppファイル
static int hoge::foo;
普通のグローバル変数と同じようにどこか一箇所で定義が必要。
0607デフォルトの名無しさん
2005/05/28(土) 09:36:23CWindow2 error LNK2001: 外部シンボル ""protected: static int CWindow::NumWindow" (?NumWindow@CWindow@@1HA)" は未解決です。
または
CWindow2 error LNK2005: "public: static int CWindow::NumWindow" (?NumWindow@CWindow@@2HA) は既に CWindow.obj で定義されています。
どういう宣言の仕方をすればいいのでしょうか?
ソースはヘッダとソースで分割してます。
0608デフォルトの名無しさん
2005/05/28(土) 09:37:13あ、ヘッダに書いてました。
そうかソースのほうか。
勉強になりました。
Thx!
0609デフォルトの名無しさん
2005/05/28(土) 12:57:000610デフォルトの名無しさん
2005/05/28(土) 17:14:190611デフォルトの名無しさん
2005/05/28(土) 17:35:070612デフォルトの名無しさん
2005/05/28(土) 17:36:33class Base
{
Base()
Base(int i)
}
class Sub : public Base
{
Sub():Base(){
Base(5)
}
}
ではだめだった
0613デフォルトの名無しさん
2005/05/28(土) 17:37:18Base二回呼ぶなよ
0614デフォルトの名無しさん
2005/05/28(土) 17:38:32なので2回呼ぶこともある
0615デフォルトの名無しさん
2005/05/28(土) 17:46:39基底クラスのコンストラクタは派生クラスのコンストラクタが実行
される前に呼ばれるから、むりだよ
そういうことがやりたいのなら、設計を変えるんだね
0616デフォルトの名無しさん
2005/05/28(土) 17:53:38なぜ?その理由は?
0617デフォルトの名無しさん
2005/05/28(土) 17:53:58Sub() : Base( condition ? Base() : Base( 5 ) ){}
正確にはやりたいことと違うが、Baseがまともなクラスなら問題はないでしょう。
0618デフォルトの名無しさん
2005/05/28(土) 18:35:54その方法がいいかも
これでも動いてはくれた。Vc.net2003だから動いただけかな?
class Sub : public Base
{
int flag;
int initProc(){
ごにょごにょ
return flag;
}
Sub():Base(flag=initProc()){
}
}
動いたのでOKなんだけどちょっと不安
0619デフォルトの名無しさん
2005/05/28(土) 20:15:40unsigned char *AAA;
unsigned char BBB[3][XXX][YYY];
AAA = (unsigned char *)malloc((size_t)XXX*YYY*3);
AAAには、BBB[0],BBB[1],BBB[2]……といった順で同じデータ形式が
格納されるとします。
AAAとBBBの間で、効率よくデータのやり取りするには、どうすれば良いですか?
この関数を使え的なアドバイスでもかまいません。
0620デフォルトの名無しさん
2005/05/28(土) 20:23:08memcpy()
あとunsigned char (*AAA)[XXX][YYY];にするのも考えてみたらどう?
0622デフォルトの名無しさん
2005/05/28(土) 21:55:08その前に自分が試した色々と、上手く行かなかった結果について、
「実際の記述」を示すのが先だろう。
0623デフォルトの名無しさん
2005/05/28(土) 22:24:58BBBって3次だから AAA には BBB[0][0][0], BBB[0][0][1], ... ぢゃねの?
0624619
2005/05/28(土) 22:38:20失礼しました。
例えば AAA から BBB にコピーする時は……
memcpy(BBB[0], *(AAA ),((size_t)XXX*YYY));
memcpy(BBB[1], *(AAA +((size_t)XXX*YYY))),((size_t)XXX*YYY));
かなぁ?とか(^^;
配列が分かっていないと言われれば、それまでなんですが……
いまは、以下をforで回してコピーしています。
BBB[n][i][j]= *(AAA +k);
>>623
はい。それが正しいです。省略?していました。すみません。
0625デフォルトの名無しさん
2005/05/28(土) 22:41:51memcpy(BBB, AAA, XXX * YYY * 3);
forでループさせる必要は全く無い。
0626デフォルトの名無しさん
2005/05/28(土) 22:44:07なんだそりゃ。コンパイルも通らないだろ。
memcpy(BBB,AAA,sizeof(BBB));
これでおしまいじゃないか?
0627619
2005/05/28(土) 22:54:46ありがとうございます。
上手く行きました。
美しい記述で、感動中……
>>626 はい。>>624は、コンパイルすら通りませんでした。
で、その試行例を書いて聞くには、余りにも恥ずかしかった次第です。
本当にありがとうございました。
0628デフォルトの名無しさん
2005/05/28(土) 23:12:25あえて揚げ足とりさせてもらうとそれはコンパイル時のエラーじゃない。リンク時のエラーだ。
0629デフォルトの名無しさん
2005/05/29(日) 00:30:08public:
a(int (*test)[2] ){ 何かの処理 };
}
class b : public class a{
public:
b(int age, int (*test)[2]) : a((*test)[2]);
};
b::b(int age, int (*test)[2]))
{
何かの処理
}
とやってもうまくいきませんでした
どうしてでしょうか?
0630デフォルトの名無しさん
2005/05/29(日) 00:33:560631629
2005/05/29(日) 00:41:58肝心なものが書いてありませんでしたヽ(´Д`;)ノ
「構文エラー : ';' : メンバ関数の定義を終了するための '}' がありません。」
こんなエラーが出てしまいます
もう一つ問題ができてしまいました
コンストラクタで引数の数だけ二次元配列を作成するにはどうしたらいいのでしょうか
0632629
2005/05/29(日) 00:43:14b(int age, int (*test)[2]) : a((*test)[2]);
の部分で出ています
0633デフォルトの名無しさん
2005/05/29(日) 00:46:150634デフォルトの名無しさん
2005/05/29(日) 00:49:00: でつなげるのはbの関数定義のほう
0635デフォルトの名無しさん
2005/05/29(日) 00:55:578行目:以降いらない(セミコロンはいる)
11行目、最後の括弧閉じいらない、ここに、: a(test) とつなげる
0636629
2005/05/29(日) 01:12:32>>633-635
ありがとう
うまくいったよ
コンストラクタで引数の数だけ二次元配列を作成するにはどうしたらいいのでしょうか
↑
これの方法見つけました
double** pd = new double* [2];
for (i1 = 0; i1 < 2; i1++)
pd[i1] = new double [3];
でできるみたいですね、でもちょっとめんどい(´・ω・`)ショボーン
0637629
2005/05/29(日) 01:36:00class a{
double **d;
public:
a( int size );
}
a::a( int size )
{
d = new double *[size];
for(int i = 0; i = size; i++){
d[size] = new double[size];
}
}
ここまでは完璧なんだけどデストラクタが引数をとれない・・・
for (int i = 0; i < size; i++){
delete [] d[i];
}
delete [] d;
こんな感じで配列が解放できないよヽ(`Д´)ノウワァァァン
0638デフォルトの名無しさん
2005/05/29(日) 01:42:180639デフォルトの名無しさん
2005/05/29(日) 01:43:470641デフォルトの名無しさん
2005/05/29(日) 01:52:040643デフォルトの名無しさん
2005/05/29(日) 08:18:580644デフォルトの名無しさん
2005/05/29(日) 13:39:39class TBase{
virtual void Speak() = 0;
};
class TInt{
int Value;
int Speak() {return Value;};
};
class TFloat{
float Value;
float Speak(){return Value;};
};
TBaseのリストにに派生したクラスがぶら下がって
返りの型が違う(けどなんとなく互換性がある)ものを
ポリモーフィズムできないでしょうか?
0645デフォルトの名無しさん
2005/05/29(日) 13:47:570646644
2005/05/29(日) 13:59:39技法はないのでしょうか?
0647デフォルトの名無しさん
2005/05/29(日) 14:04:36何がしたい?「ポリモーフィズムしたい」じゃわからんぞ。
0648デフォルトの名無しさん
2005/05/29(日) 14:10:29TBaseのポインタ・参照からSpeak()を呼んだときに戻り値を何で受け取ったらいいのかわからないからそんなこと出来ない。
C++なんだからテンプレートを使って作り直してみろ。
0649644
2005/05/29(日) 14:30:08ちょっと説明がうまく言えないのでご容赦を。
上のクラスみたいにint,float,charのようなメンバを持つオブジェクトが
リストで連なっていて、それを先頭から足したり割ったりしていくわけですが
(ここは諸事情で同じ型に統一できないのです、ただ全部数値として格納してます)
メンバの型を判定してint&int,int&float,float&intの足す処理、√の処理、二乗の処理
のように書いていくと膨大な関数を作らないとならず、また判定するために重くなるようです。
それでそういう組み合わせの型に関係なく、足したり引いたりするには
どうしたらいいのか、ということがやりたい処理です。
なにか良い方法はありませんでしょうか。。。
0650644
2005/05/29(日) 14:32:030651デフォルトの名無しさん
2005/05/29(日) 14:50:09全部doubleに変換してから処理すれば?
#intのビット数がdoubleで表現できる精度を越えていなければ。
0652デフォルトの名無しさん
2005/05/29(日) 20:50:14class apple{
apple(int i );
orenge(int i );
}
main(){
apple ringo( ); ←ここで定義したくない
for(int i = 1; i <10; i++){
ringo.orenge( i )
}
}
こんな感じでfor文のiをコンストラクタの引数にしたいんです
0653デフォルトの名無しさん
2005/05/29(日) 20:59:36状況が良くわからないが、コンストラクタとは別に初期化するメンバ関数を作れば解決?
(std::fstreamとstd::fstream::open()のように)
0654652
2005/05/29(日) 21:02:24下のようにしたら普通に動きました
おかしいな〜 さっきは動かなかったのに(゜∀。)ワヒャヒャヒャヒャヒャヒャ
class apple{
apple(int i );
orenge(int i );
}
main(){
for(int i = 1; i <10; i++){
apple ringo( i );
ringo.orenge( i );
}
}
0655デフォルトの名無しさん
2005/05/29(日) 21:06:390656デフォルトの名無しさん
2005/05/29(日) 21:44:56他人が分かるように的確に書けるやつは、たいてい自分で解決しちゃうからな。
説明の出来ないやつは自分で解決できたと思い込むと。
0657デフォルトの名無しさん
2005/05/30(月) 11:18:19コーディングも適当な気がする・・・
0658Google先生
2005/05/30(月) 12:52:290659デフォルトの名無しさん
2005/05/31(火) 02:28:22参照渡しはできないんでしょうか?
SafeArrayを使っても参照渡しになりませんでした
0660デフォルトの名無しさん
2005/05/31(火) 07:09:55以下のプログラムでscanf関数の部分がループになるのですが
何かおかしい所ありますでしょうか?
void input(int i){
int tmp;
scanf("%d",&tmp);
}
はじめ、構造体のint要素へ値の受け渡しをする作業を行う
関数として設計したのですが、scanfの処理部でなぜかループ状態になり
制御がきかなくなりますので、簡略化してほぼ独立な関数(上のような形)
として実行してみましたが、やはり上手くいきません。
原因がわからないのがなんとも気持ち悪いのでご指導下さい。
どうぞよろしくおねがいします。
0661デフォルトの名無しさん
2005/05/31(火) 10:15:30たとえば、%dで数値をとろうとした場合、
キーボードで数字以外を入力すると
取得できずに戻ってくるわけだが、
入力バッファにこの文字は残ったままなので
バッファクリアしないで再びscanfを呼んでも
キー入力を待たずに同じ結果になるばかり
つまりループする
0662デフォルトの名無しさん
2005/05/31(火) 12:44:59それ以前に、提示されたソースのみではループのしようもない訳だが
0663デフォルトの名無しさん
2005/05/31(火) 13:22:34どのボタンにもコントロール変数が追加できません。
ご存知の方、恐れながらご教授お願いいたします。
0664デフォルトの名無しさん
2005/05/31(火) 14:29:38環境を明示しましょう。
もしかしたらこちら?
★初心者にVisual C++を教えるスレ★ Part19
http://pc8.2ch.net/test/read.cgi/tech/1116209988/
http://pc8.2ch.net/test/read.cgi/tech/1115386557/
0665デフォルトの名無しさん
2005/05/31(火) 15:08:01ありがとうございました。
ちゃんとint型を入力しているのですが・・・。
http://www9.plala.or.jp/sgwr-t/c/sec05.html
↑ページの最後にある、改行記号の読み捨てなどやってみましたが
改善されませんでした。
ただ、タイプミスから偶然判明したのですが、scanf部を・・・
scanf("* %d",&tmp);
とすると、なぜかループに陥らない事が・・・・
なぜだ〜、何が原因なんだ〜
>>662
そうなんです。
開発環境がvC6.0なので、デバッグツールでプログラムの挙動を
追ったのですが、どうもscanf関数内部でループに陥っているらしく
scanfの戻り値などは戻ってこずに制御不能になります。
とりあえず時間がなくなってきたので、改良はまた帰ってきてからダナ・・・
(´・ω・`)ショボボン
どうもありがとうございました
0666デフォルトの名無しさん
2005/05/31(火) 16:19:10コンパイラだけでも.NETに置き換えたら?
Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/
0667デフォルトの名無しさん
2005/05/31(火) 17:16:23> 親と子のダイアログが作ったのですが
何を?
0669デフォルトの名無しさん
2005/05/31(火) 17:25:430670デフォルトの名無しさん
2005/05/31(火) 17:36:260671デフォルトの名無しさん
2005/05/31(火) 17:41:320672デフォルトの名無しさん
2005/05/31(火) 19:00:05public class UniqueID {
public static final UniqueID Foo = new UniqueID();
public static final UniqueID Bar = new UniqueID();
public static final UniqueID Baz = new UniqueID();
private UniqueID() {}
}
0673デフォルトの名無しさん
2005/05/31(火) 19:20:59//ヘッダ
class UniqueID {
public:
static UniqueID Foo;
static UniqueID Bar;
static UniqueID Baz;
private:
UniqueID() {}
};
//どこかcppファイル
UniqueID UniqueID::Foo;
UniqueID UniqueID::Bar;
UniqueID UniqueID::Baz;
0674デフォルトの名無しさん
2005/05/31(火) 20:24:110675デフォルトの名無しさん
2005/05/31(火) 22:17:041234というintの数字をそのままstd:stringクラスに代入したいのですが、いい案はないでしょうか?
int hoge = 1234;
string str = int_to_string ( hoge );
みたな。
馬鹿みたいな質問ですがよろしくお願いします。
0676デフォルトの名無しさん
2005/05/31(火) 22:22:46s << 1234;
string str = s.str();
0677デフォルトの名無しさん
2005/05/31(火) 22:57:22boost::lexical_cast
0679デフォルトの名無しさん
2005/05/31(火) 23:41:02boost::lexical_castはたった1行
http://www.kmonos.net/alang/boost/classes/lexical_cast.html
0680デフォルトの名無しさん
2005/05/31(火) 23:41:52string str = "1234";
0681デフォルトの名無しさん
2005/06/01(水) 00:32:06"1234"じゃなくて(int)1234だ
0682デフォルトの名無しさん
2005/06/01(水) 04:28:10mallocで確保したメモリはfreeで、newで確保したメモリはdeleteで解放しているのですが、
intやcharで宣言した領域は解放していないものがあります。
intやcharのメモリはプログラム終了時に自動的に解放されるのでしょうか?
固定長だから、プログラムコードのメモリが解放されると同時に解放されているのでしょうか。
0683デフォルトの名無しさん
2005/06/01(水) 05:28:37スタックに取った自動変数はブロックを抜ければ自動的に解放される
0684デフォルトの名無しさん
2005/06/01(水) 08:05:55std::map<> とかに入れるときは &UniqueID::Foo とか?
0685デフォルトの名無しさん
2005/06/01(水) 12:15:16適切でしょうか?
例えば、特定のホットキーを押している数秒間だけ負荷をかけるとか
0686デフォルトの名無しさん
2005/06/01(水) 12:55:060687デフォルトの名無しさん
2005/06/01(水) 13:11:28では逆に、例えばこういう目的にはこういう処理が適切とか、いくつか挙げて頂けますでしょうか
一応私の目的としては、負荷をかけることで早すぎるアクションゲームなんかを遅くしたいなあと思ってるんですが
…πの計算でもさせればいいのかしら
0688デフォルトの名無しさん
2005/06/01(水) 13:12:190689デフォルトの名無しさん
2005/06/01(水) 13:14:160690デフォルトの名無しさん
2005/06/01(水) 13:14:560691デフォルトの名無しさん
2005/06/01(水) 13:16:32sleepしても、マルチタスクOSなら他のプロセスにCPU時間が回される
だけで、負荷にはならんよ。
Windowsなら、SetPriorityClass()APIでも使って、重くしたらどう?
0692デフォルトの名無しさん
2005/06/01(水) 13:16:42は?sleepってなにやってるか知らないの?
0693デフォルトの名無しさん
2005/06/01(水) 13:25:00だから、>>685はCPUに意図的に負荷を掛けて、温度を上昇させる
とか、そういう実験をしたいんだろ。
sleepはOSの問題。馬鹿ですか?
0694デフォルトの名無しさん
2005/06/01(水) 13:27:24負荷をかけることで早すぎるアクションゲームなんかを遅くしたいなあと思ってるんですが
0695デフォルトの名無しさん
2005/06/01(水) 13:29:18はい?なんですか?その頓珍漢な返答は?
0696デフォルトの名無しさん
2005/06/01(水) 13:29:53大昔の奴ね。裏でmp3エンコードとかやりながら遊ぶと遅くなりますよ
0697デフォルトの名無しさん
2005/06/01(水) 13:30:22そういう用途ならSleep()で結構。
0698デフォルトの名無しさん
2005/06/01(水) 13:31:22すればいいだろ。
0699デフォルトの名無しさん
2005/06/01(水) 13:33:54他人の書いたゲームの事かと。
0700デフォルトの名無しさん
2005/06/01(水) 13:38:46測って、ウェイトルーチンに与えるパラメタを変えたりして、CPUが替わっても
ゲームそのものの速度にはあまり影響が出ないようにしてあるもんだけどな。
それか、プログラマブルタイマ割り込みかVSYNC割り込みでタイミングを
取ってる物がほとんどだぞ。
相当古いゲームなんですか?
0701デフォルトの名無しさん
2005/06/01(水) 13:38:550702デフォルトの名無しさん
2005/06/01(水) 13:45:51自分で速度を調節したいとか、そういう質問か?
板違いだろ。PCゲーム板でも逝け。
0703デフォルトの名無しさん
2005/06/01(水) 13:48:300704デフォルトの名無しさん
2005/06/01(水) 13:55:09http://www.speederxp.com/en/
0705デフォルトの名無しさん
2005/06/01(水) 16:36:37cin でaiueoと受け取ったら
int aiueoというものを作りたいのですが
0706デフォルトの名無しさん
2005/06/01(水) 16:49:520707706
2005/06/01(水) 16:51:33動的にダイナミックリンクライブラリ作ればいける。
0708デフォルトの名無しさん
2005/06/01(水) 17:29:440709デフォルトの名無しさん
2005/06/01(水) 18:33:24関数名などのネーミングでうまい方法、
もしくは一般的な推奨ルールなど自慢してください。
どうもウィンドウズのなんたら記法っていうのになじめないんです。
0710デフォルトの名無しさん
2005/06/01(水) 18:46:28慣れると便利だけどね。
0711デフォルトの名無しさん
2005/06/01(水) 18:51:56そんなもんそれこそきりが無い罠
0712デフォルトの名無しさん
2005/06/01(水) 21:56:130713デフォルトの名無しさん
2005/06/01(水) 23:23:57http://pc8.2ch.net/test/read.cgi/tech/1068752664/
http://pc8.2ch.net/test/read.cgi/tech/1096687703/
0714デフォルトの名無しさん
2005/06/01(水) 23:29:11ものすごく遠くにある int i とかを使い回していいのでしょうか?
それともちゃんとブロックで破棄しながら進んでいかないといけないのでしょうか・・・。
0715デフォルトの名無しさん
2005/06/01(水) 23:48:32言語仕様としては使いまわしてよい。
お行儀としてはブロックスコープで区切った方が良い。
その方がわかり易いし、良いコードが出る可能性も高くなる。
0716デフォルトの名無しさん
2005/06/01(水) 23:50:02遠くにあるint iが使えるという時点でペケ。
0717デフォルトの名無しさん
2005/06/02(木) 01:00:04レスありがとうございます。
これからはきちんと管理していこうと思います。
0718デフォルトの名無しさん
2005/06/02(木) 02:19:11#include <iostream.h>
int main(){
unsigned int no = 1234;
char *value;
value=(char*)malloc(4);
memcpy(value,&no,4);
memcpy(&no,value,4);
cout << no << endl;
free(value);
}
0719デフォルトの名無しさん
2005/06/02(木) 02:30:11してない。
余談だけど4よりsizeof(unsigned int)使ったほうがいいよ。
0720デフォルトの名無しさん
2005/06/02(木) 03:09:03レスありがとう。
なるほど、sizeofの方がソースコードが環境に依存しないで済みますね。
0721デフォルトの名無しさん
2005/06/02(木) 07:15:55C++ならmalooc()なんか使うなや。
0722デフォルトの名無しさん
2005/06/02(木) 09:26:360723721
2005/06/02(木) 09:42:010724デフォルトの名無しさん
2005/06/02(木) 11:18:310725デフォルトの名無しさん
2005/06/02(木) 11:19:35C++でostream使わずにstdio使ったらファビョる方ですか?^^;
0726デフォルトの名無しさん
2005/06/02(木) 11:27:020727デフォルトの名無しさん
2005/06/02(木) 11:51:55C++ は元々そういう言語。
ただ malloc は混乱の元になりかねんので
封印したほうがいいんジャマイカ。
0728デフォルトの名無しさん
2005/06/02(木) 11:56:380729デフォルトの名無しさん
2005/06/02(木) 13:10:40確かに「理屈の上の立場」は両者同じだけど、
代替となる「C++ならではの手段」の評判が違いすぎるだろう。
0730デフォルトの名無しさん
2005/06/02(木) 14:24:170731デフォルトの名無しさん
2005/06/02(木) 14:32:30newは確保した領域にオブジェクトを構築するという重要な仕事があるからなぁ。
同じというには無理があると俺は思う。
0732デフォルトの名無しさん
2005/06/02(木) 17:16:44互換性はないということになっているから、本質的に同じとはいえない。
メモリ確保をどう行うか、実装によって違う可能性がある。
0733デフォルトの名無しさん
2005/06/02(木) 18:09:06malloc()はコンストラクタの呼び出しを行わない。
0734デフォルトの名無しさん
2005/06/02(木) 21:05:16mallocの本質はメモリ領域の確保だけ
newの本質はインスタンスの作成、メモリの確保だけではない
0735デフォルトの名無しさん
2005/06/02(木) 21:05:50new はメモリ不足に対して例外を投げる。
0736デフォルトの名無しさん
2005/06/02(木) 21:09:21newはニューっと新しいメモリを確保する。
0737デフォルトの名無しさん
2005/06/02(木) 21:27:01どの本を読んでも書いていないのですが 「すたんだ〜ど」 で良いのでしょうか?
0738デフォルトの名無しさん
2005/06/02(木) 21:29:530739デフォルトの名無しさん
2005/06/02(木) 21:40:08の略です。えすてぃーでぃ〜と発音してください
0741デフォルトの名無しさん
2005/06/02(木) 22:12:35迷ったらアルファベットをバラして読むほうが間違いが少ない
0742デフォルトの名無しさん
2005/06/02(木) 22:55:120743デフォルトの名無しさん
2005/06/02(木) 23:18:18standardでいい
0744デフォルトの名無しさん
2005/06/03(金) 00:04:450745デフォルトの名無しさん
2005/06/03(金) 01:26:160746デフォルトの名無しさん
2005/06/03(金) 01:53:35こんな場合は、どうすべきなのでしょうか? 記述するまでもないですが、一応こんな
感じなんです。
CHoge::CHoge( int x ) {
_a = x ;
}
void CHoge::set_value( int x ) {
_a = x ;
}
あくまで、大雑把に書くとこんな感じです。とにかく、中身が全く同じなんですが、
初期化時点でどうしても必要な引数が一つある場合と、無い場合が二つ存在してます。
だからこうして分けてて、 : CHoge( x ) の明示的な呼び出ししてもエラーとか言われ
ちゃうし・・・
わたしが言おうとしてる、意味わかるかたどうかご教示お願いします。
0747デフォルトの名無しさん
2005/06/03(金) 03:31:27>わたしが言おうとしてる、意味わかるかたどうかご教示お願いします。
大馬鹿者。
他人が読んで意味が明確に分かるように説明するのは質問者の義務。
お前の書いてることは支離滅裂で意味不明。書き直せ。
0748デフォルトの名無しさん
2005/06/03(金) 04:28:13ここまでは理解した。
> 初期化時点でどうしても必要な引数が一つある場合と、無い場合が二つ存在してます。
> だからこうして分けてて、 : CHoge( x ) の明示的な呼び出ししてもエラーとか言われ
> ちゃうし・・・
病院に行け
0749デフォルトの名無しさん
2005/06/03(金) 05:15:30class CHoge {
int a;
public:
CHoge(int x) {set_value(x);}
void set_value(int x) {a = x;}
};
0750デフォルトの名無しさん
2005/06/03(金) 06:12:020751デフォルトの名無しさん
2005/06/03(金) 07:06:590752デフォルトの名無しさん
2005/06/03(金) 12:02:08ありがとうございます、出来ました。
それでよかったんですね・・・(ノ_・、)シクシク
すごく馬鹿らしい質問だったかもしれないけど、お陰で助かりました。
0753デフォルトの名無しさん
2005/06/03(金) 13:03:320754デフォルトの名無しさん
2005/06/03(金) 13:10:50一応注意しておくけど、質問の内容が馬鹿らしかったのではなく、
説明の仕方が馬鹿らしかったんだからね。
0755デフォルトの名無しさん
2005/06/03(金) 15:33:38このaをsigned shortに変換するのに
(signed short)aじゃだめで
(signed short)(signed char)aでないと駄目なのはどうしてですか?
0756デフォルトの名無しさん
2005/06/03(金) 15:40:29コンパイラの問題じゃないか?
WindowsXp、VC++6.0では
(signed short)a
で問題無かったけど。
0758755
2005/06/03(金) 16:00:07unsigned char a=0xff;
printf("(signed short)(signed char)a = %x\n",(signed short)(signed char)a);
printf("(signed short)a = %x\n",(signed short)a);
結果
(signed short)(signed char)a = ffffffff
(signed short)a = ff
になりました。
unsigned char a=0xffとはa==-1のことだと思うので、正しくキャストできているのは上の方の結果だと思うのですが。
0759755
2005/06/03(金) 16:02:380760デフォルトの名無しさん
2005/06/03(金) 16:02:510761デフォルトの名無しさん
2005/06/03(金) 16:04:35255 -> -1 -> -1
(signed int)aの場合
255->255
何の問題もないが
0762デフォルトの名無しさん
2005/06/03(金) 16:06:22>0xff はunsigned なら 255 だろうが
そうだ。やっぱり自分の方の間違いか。スレ汚しすいません。
0763デフォルトの名無しさん
2005/06/04(土) 00:16:50こういう動的配列とかではよく利用しているのですが
int* a;
a = new int[num];
例えばこういう使い方の意味がよくわからんのです
CMyBitmap* pBitmap;
↑画像をファイルから読み込んだり表示したり色々する
DirectXでもなんでもいいけども
pBitmap = new CMyBtimap;
こうする理由がいまいちわからない。
データが消えたりするのでしょうか、それとも処理速度が上がったり?
0764デフォルトの名無しさん
2005/06/04(土) 00:19:52newで作ったオブジェクトはブロックを抜けてもdeleteしない限り消えない。
だからスコープがブロック範囲では困るときに(も)使う。
0765デフォルトの名無しさん
2005/06/04(土) 00:22:47{
CMyBitmap Bitmap;
CMyBitmap* pBitmap;
pBitmap = new CMyBtimap;
// Bitmapの内容も、pBitmapの内容も保証される
}
{
// Bitmapの内容は保証されない
// pBitmapの内容は保証される(delete前ならば)
}
0766デフォルトの名無しさん
2005/06/04(土) 00:34:560767デフォルトの名無しさん
2005/06/04(土) 00:39:32レス有難うございます
スコープを外れても使用する事が出来るのですね
まさにメモリ確保。レスどうもでした。
0768デフォルトの名無しさん
2005/06/04(土) 00:46:43おっと、そんなツレナイ事カキコしないでくださいよ旦那。
学校ではまったく習ってないのよ、もう本が師匠。
0769デフォルトの名無しさん
2005/06/04(土) 01:08:41void func ()
{
printf ( "このfunc()を呼び出した関数名");
}
こんな感じ。要するにログを吐きたい。
0770デフォルトの名無しさん
2005/06/04(土) 01:24:02・ポインタに配列を利用してたくさんのオブジェクトを生成する
・基幹クラスののポインタに派生クラスのオブジェクトを入れる
これらのことはできたのですが、この二つを同時に行うプログラムを組んだところ
コンパイルはできるものの実行中にエラーを吐くようになってしまいました。
↓実際に組んだ物
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/498.txt
どうかアドバイスをお願いします。
0771デフォルトの名無しさん
2005/06/04(土) 01:33:45それでは要素がpet型の配列を作ってdobutu型のポインタで保持してることになる。
やりたいことがポリモーフィズムならば、要素がdobutu*型の配列を
作らなければならない。
で、その場合は配列を作った後で、配列の各要素は改めてnewしつつ配列に
ポインタを突っ込む必要がある。
0772デフォルトの名無しさん
2005/06/04(土) 01:37:58http://www.parashift.com/c++-faq-lite/proper-inheritance.html#faq-21.4
http://www.parashift.com/c++-faq-lite/proper-inheritance.html#faq-21.5
http://www.parashift.com/c++-faq-lite/containers.html#faq-34.1
http://www.research.att.com/~bs/bs_faq2.html#arrays
0773デフォルトの名無しさん
2005/06/04(土) 01:41:07簡単に言うと、doubutuのインスタンスとpetのインスタンスのsizeofが違う
ので、mem[i]でアクセスした時にi==0の時はいいかもしれないが、i>0に
なると結果は不定なわけだな。
0774デフォルトの名無しさん
2005/06/04(土) 02:04:48これであってますでしょうか?
int main()
{
int number;
cout << "数を入力:", cin >> number;
doubutu **fuga ;
fuga = new doubutu*[number] ;
for(int i =0 ; i < number ; i++)
fuga[i] = new pet, fuga[i]->setdata();
cout << endl, cout <<"データの表示" << endl;
for(i = 0 ; i<number ; i++)
fuga[i]->showdata();
delete[] fuga ;
}
0775デフォルトの名無しさん
2005/06/04(土) 02:17:23petのインスタンスがdeleteされてない。
そもそも配列を動的に確保するぐらいならstd::vector使うよし。
0776デフォルトの名無しさん
2005/06/04(土) 02:22:06>>772
>>773
回答ありがとうございます。
doubutu型のポインタでpet型の配列を保持しているのでdoubutu型の配列を生成するとは
doubutu *mem;
mem = new doubutu[number];
としてあげるということでいいのでしょうか?
>で、その場合は配列を作った後で、配列の各要素は改めてnewしつつ配列に
>ポインタを突っ込む必要がある。
えーと、ここは具体的にどうすればいいのか・・・
772は英語なので明日にでもじっくりと読みたいと思います
0777770
2005/06/04(土) 02:34:29doubutu **fuga ;
fuga = new doubutu*[number] ;
とすると確かに動くのですが
ポインタfugaを**としてることと
doubutu*[number]の*の部分はどういう意味になるのか教えていただけないでしょうか
おしえてちゃんで申し訳ないです。。。
0778デフォルトの名無しさん
2005/06/04(土) 02:39:57ポインタがちゃんと分かっていれば分からないはずはないんだが。
doubutu **fuga なら fuga は doubutu 型へのポインタへのポインタ型。
fuga = new doubutu[number] だと dobutu 型の配列。
fuga = new doubutu* [number] だと doubutu * 型(doubutu へのポインタ型)の配列。
0779770
2005/06/04(土) 02:42:56やっとすっきりしました!
ポインタへのポインタって考え方はありなのか・・・
0780デフォルトの名無しさん
2005/06/04(土) 02:44:06ちゃんとdeleteしろよ。
0781デフォルトの名無しさん
2005/06/04(土) 02:45:59>>780
ちゃんとdelete付け加えておきます
皆様ありがとうございました
0782デフォルトの名無しさん
2005/06/04(土) 02:54:49int a[2];
printf("%p %p\n",a,&a);
で同じアドレスが表示されるのはなぜですか?
さらに同じアドレスなのに
*a = 1;
はよくて
*(&a) =1;
は怒られるのはなぜですか?お願いします。
0783デフォルトの名無しさん
2005/06/04(土) 03:10:10*(a+0)
a[0]
0784デフォルトの名無しさん
2005/06/04(土) 03:13:18&a とは意味がまったく違う
0785デフォルトの名無しさん
2005/06/04(土) 03:22:470786デフォルトの名無しさん
2005/06/04(土) 04:32:31aと&a[0]が同じなのは分かるんですが、
なぜaと&aが同じ値になるんでしょうか?
&aは何を意味しているんですか?
0787デフォルトの名無しさん
2005/06/04(土) 04:36:120788デフォルトの名無しさん
2005/06/04(土) 04:37:430789デフォルトの名無しさん
2005/06/04(土) 06:01:06&a は配列へのポインタで、値が一緒なだけで、
別物と考えるということですか?
なので
*(&a) = 1;
という代入も認められない。
じゃあ &a という記述は何のためにあるんですか?
うざくてすみません
0790デフォルトの名無しさん
2005/06/04(土) 06:51:26T a[N];
T (*p)[N];
のとき、p = a でも p = &a[0] でもなく、p = &a でなければならない。
0791789
2005/06/04(土) 07:51:58なるほど。それは例えば複数の配列に同じ処理をしたいときに
pで処理を書いておいて、先頭でp=&aとかp=&bと代入して使うと
いうことでいいですか?
いまいちポインタのうれしさが分かってないんで。
皆さんありがとうございました。
0792デフォルトの名無しさん
2005/06/04(土) 07:52:21アドレスの値は同じでも型がそれぞれ違う。
aとかくと先頭要素へのポインタということでint *。
&aは配列へのポインタなのでint (*)[2]。
0793デフォルトの名無しさん
2005/06/04(土) 08:37:12警告 W8030 test.cpp 28: 'x' パラメータ(vector<shape *,allocator<shape *> >::pus
h_back(shape * const &))のために一時変数を使用する(関数 main())
test.cpp
23 : vector<shape *> shapes;
〜
28 : shapes.push_back(dynamic_cast<shape *>(new circle));
circle は shapeクラスを継承したクラスです
0794デフォルトの名無しさん
2005/06/04(土) 08:59:39push_backは参照を受け取る。
そこへ右辺値を作るdynamic_castの値を渡しているので内部では一時変数を作ってそこへの参照を渡しているということ。
アップキャストだろうからdynamic_castをなくせば警告は無くなるんじゃないかと思う。
0795デフォルトの名無しさん
2005/06/04(土) 09:35:35DLLを共有エリア(0x80000000以上)に置きたいのですが、どうすればよいでしょうか・・・?
無料版BCC++を使っています。
0796デフォルトの名無しさん
2005/06/04(土) 09:35:53DLLを共有エリア(0x80000000以上)に置きたいのですが、どうすればよいでしょうか・・・?
無料版BCC++を使っています。
0797デフォルトの名無しさん
2005/06/04(土) 09:36:35DLLを共有エリア(0x80000000以上)に置きたいのですが、どうすればよいでしょうか・・・?
無料版BCC++を使っています。
0798デフォルトの名無しさん
2005/06/04(土) 09:39:43*((char*)0x80000001) = 'L';
*((char*)0x80000002) = 'L';
0799デフォルトの名無しさん
2005/06/04(土) 09:50:180800793
2005/06/04(土) 10:03:5128 : shapes.push_back(new circle);
に変えても同じ警告が出ました。
使っているコンパイラは bcc32 です
0801デフォルトの名無しさん
2005/06/04(土) 10:21:54俺は気にしなくて良いと思う。const参照に一時オブジェクトを渡すなんて
日常茶飯事だからな。
g++だと-Wallでも警告でないし。
0802632
2005/06/04(土) 10:57:56試しに
catch(System.OverflowException e){.....}
としてみましたがうまくいきませんでした。
初心者です。よろしくおねがいします。
0804デフォルトの名無しさん
2005/06/04(土) 11:38:29部分的に共有させるのならできる。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
BCCでも同じようにやればいい。
0805デフォルトの名無しさん
2005/06/04(土) 12:09:10System.OverflowExceptionはC#の構文。
0806デフォルトの名無しさん
2005/06/04(土) 12:22:05という型があります。
これのサイズをチェックして
8バイトじゃなければ
コンパイルを中止するようにしたいんですが
何か方法はありますか?
イメージとしてはこんな感じです。
#if sizeof(int64_t) != 8
#error 失敗すますた。
#endif
0807デフォルトの名無しさん
2005/06/04(土) 12:25:18これで構造化例外がやってくるようになる。(__tryと__except)
そして構造化例外はC++例外として受け取れるようにも出来る。
http://www.microsoft.com/japan/msdn/library/ja/jpdndeepc/htm/deep03162000.asp
0808632
2005/06/04(土) 12:29:31bcc32の構文をご存知の方いらっしゃいましたら
ご教授願います。
0809デフォルトの名無しさん
2005/06/04(土) 12:35:46>>807
0810632
2005/06/04(土) 12:38:37すみません 更新遅れてました
試してみます
0811デフォルトの名無しさん
2005/06/04(土) 12:49:010812デフォルトの名無しさん
2005/06/04(土) 12:49:36BOOST_STATIC_ASSERTはどう?
0813デフォルトの名無しさん
2005/06/04(土) 12:59:27int main(void)
{
int num;
while(1)
{
printf("Input : ");
scanf("%d",&num);
if(num=0)
{
break;
}
}
printf("num is %d",num);
return 0;
}
このプログラムでifの条件は代入が成立したということで真になって、
break;でwhileループを抜けると思うのですが、無限ループしてしまいます。
どうしてでしょうか?教えてください。
0814デフォルトの名無しさん
2005/06/04(土) 13:01:21ありがとうございました。
やっぱりBOOSTは避けて通れない道なんですかね。
また、別話題ですいません。
あるサイトにメンバ変数は遅い為
forループの中では使わないで
auto変数を使えって書いてあったんですが
皆さんはやってますか?
0815デフォルトの名無しさん
2005/06/04(土) 13:12:52>if(num=0)
0816デフォルトの名無しさん
2005/06/04(土) 13:16:13×if( num = 0 )
○if( num == 0 )
ソースそのままのっけたかは わからんけど。
とりあえず誤り指摘。
0817デフォルトの名無しさん
2005/06/04(土) 13:19:34速度が問題にならない限りやらないなぁ俺は。
0818デフォルトの名無しさん
2005/06/04(土) 13:22:16ちょっとズレてないかおまいらの指摘。
わかってて代入してるんだぞ>>813は。
>>813
> このプログラムでifの条件は代入が成立したということで真になって、
いや、ここで評価されるのは「代入した結果の値」であって、
この場合それが0だから、つまり偽になる。
0820デフォルトの名無しさん
2005/06/04(土) 13:42:24>813がscanf()を代入だなんていうから>818が素っ頓狂なレスつけてるし、>819は納得しているし。
0821デフォルトの名無しさん
2005/06/04(土) 13:48:13↓変換
data="8da193fa82cd82a282a293568b43"(2)
のように変換出来るようにしたいのですが
(1)→(2)の変換を どうすればいいか分かりません。
よろしくお願いします。
0822デフォルトの名無しさん
2005/06/04(土) 13:54:04> >813がscanf()を代入だなんていうから
そんなこと誰も言ってないじゃん。
0823デフォルトの名無しさん
2005/06/04(土) 14:01:04ついついメンバ変数には長い名前をつけてしまうから、
メンバ関数内では短い名前で使えるようにというのもあって俺はやっている。
0824デフォルトの名無しさん
2005/06/04(土) 14:03:17どうすべきでしょうか?
string test
fget( test, ---
のようなイメージでやりたいんですけど。
0825デフォルトの名無しさん
2005/06/04(土) 14:08:50std::getline使えば
0826デフォルトの名無しさん
2005/06/04(土) 14:11:220827デフォルトの名無しさん
2005/06/04(土) 14:23:28int main(void)
{
FILE *fp ;
string s ;
fp = fopen( "test.txt", "r" ) ;
getline(fp,s) ;
みたいにしたんですけど、できません・・・
0828デフォルトの名無しさん
2005/06/04(土) 14:24:080829デフォルトの名無しさん
2005/06/04(土) 14:24:570830デフォルトの名無しさん
2005/06/04(土) 14:31:19なんか他のスレッドから参照されないことを
保障するキーワードみたいなのあればいいですね。
答えてくれてありがとうございました。
0831デフォルトの名無しさん
2005/06/04(土) 14:50:08linuxでも動くものを作りたいのでsusieのプラグインは使いたくありません。
また将来的にはGUIでもやりたいと思っているのですが、フリーで使えるライブラリなどはないでしょうか?
0832デフォルトの名無しさん
2005/06/04(土) 14:52:01時、分、秒をそれぞれUINT8型で格納している構造体があります。
そこから、sprintfを使い、char型の配列に変換して出力することは出来るんです。
・・・で、問題はここからで、時、分、秒をそれぞれ1ビットずつで
、16進数であらわすことが求められました。
自分でもよく分かってないので上手く説明できないのですが、
やり方を教えてほしいです。
0833デフォルトの名無しさん
2005/06/04(土) 14:54:141ビットの16進数?1バイトの16進数の間違いじゃないのか?
あと、基数変換を知っているかね?
0834デフォルトの名無しさん
2005/06/04(土) 14:57:25FILE *とfopenではなくstd::ifstream
0835デフォルトの名無しさん
2005/06/04(土) 14:58:37難しすぎる
0836デフォルトの名無しさん
2005/06/04(土) 15:01:58#include <iomanip>
#include <sstream>
std::string hoge(const std::string& str)
{
std::ostringstream oss;
for (std::string::size_type i = std::string::size_type(0); i < str.size(); ++i)
oss << std::hex << std::setfill('0') << std::setw(2) << (str[i] & 0xFF);
return oss.str();
}
0837デフォルトの名無しさん
2005/06/04(土) 15:04:33fstream fi("test.txt",ios::in);
string s((istreambuf_iterator<char>(fi)),istreambuf_iterator<char>());
cout << s;
//一文字づつなら
fi.seekg(0);
istreambuf_iterator<char> ch(fi);
cout << *ch;
for(int i=0;i<10;++i)
cout << *++ch ;
0838デフォルトの名無しさん
2005/06/04(土) 15:13:37レスありがとうございました。
難しいですが、これを参考にがんばってみます。
0839832
2005/06/04(土) 15:52:58すみません。そうです、1バイトでした。
基数変換・・・ですか。よくわからないんですが。
0840デフォルトの名無しさん
2005/06/04(土) 16:28:331バイトの表現ならつまり
printf("%02x %02x %02x\n", h, m, s);
ですか? わかりません!!
0841初心者
2005/06/04(土) 17:05:35.NET (2003)です.(配列でない)文字型変数のアドレスって,存在しないの でしょうか?C/C++の教科書見ていると,直にそのようなことを書いてい
るものは見つからないのですが.下記プログラムの,p_c2が「フフフ」なのと,&c3がアドレスでなくて,値そのものを出力するのは,根は同じなのでしょうが,何が間違ってい
るのでしょうか?よろしくお願いいたします.
#include <iostream>
using namespace std;
int main()
{
//今度は文字型変数
char c2;
char *p_c2;
c2='5';
p_c2=&c2;
cout << "value=" << c2 << "\n"; //これは値
cout << "address=(p_c2)" << p_c2 << "\n"; //これはアドレスのつもりだけど「フフフフ」
//2chに「自動変数のときだけ」と書いてあったので
static char c3;
char *p_c3;
c3='H';
p_c3=&c3;
cout << "value=" << c3 << "\n"; //これは値
cout << "address=" << p_c3 << "\n"; //これはアドレスのつもりだけど,値
cout << "address=(&c3)" << &c3 << "\n"; //これもアドレスのつもりだけど,値
return 0;
}
0842デフォルトの名無しさん
2005/06/04(土) 17:09:290843デフォルトの名無しさん
2005/06/04(土) 17:47:43でいいんかな?
0844デフォルトの名無しさん
2005/06/04(土) 17:48:18operator << に char const* を渡すと "" によるものと同じく、
0 で終わる文字列を表示させることになる。
アドレスを表示させたければ、 static_cast<void*>(&c2) とすればいいだろう。
0845初心者
2005/06/04(土) 18:01:100846デフォルトの名無しさん
2005/06/04(土) 19:59:13フリーかどうかは知らんが公式のリファレンスコードがあるぞ?
http://www.ece.uvic.ca/~mdadams/jasper/
0847デフォルトの名無しさん
2005/06/04(土) 20:21:43int main(int argc, char *argv[]) // 引数付きmain()の基本的な形
{
……云々といったプログラムを組みたいのですが、VCでのパラメーターの入力が出来ません。
Unix環境だと出来るのですが、家だとこういったもの出来ないのでしょうか?
0848デフォルトの名無しさん
2005/06/04(土) 20:22:470849デフォルトの名無しさん
2005/06/04(土) 20:24:27F5でしか実行方法がわからないのです。
F5をおすとパラメータを入力していないので、パラメータ入力無しの実行結果になってしまいます。
0850デフォルトの名無しさん
2005/06/04(土) 20:25:38??何がどうできなかったんだ??
君が作ろうとしてるのはVC++では「Win32コンソールアプリケーション」と呼ばれる
種類のプログラムで、いわゆるDOS窓上で実行される。
DOS窓開いてプロンプトに君の作ったプログラムの名前と引数入力すれば、普通に
受け付けてもらえるよ。
まあ、シェルが違うから、引用符やワイルドカードの扱いだのが
UNIXとは違うがね。
0851デフォルトの名無しさん
2005/06/04(土) 20:26:44なら、デバッグオプションで引数を設定するんだね
VC++のバージョンにもよるが、プロジェクトの設定にデバッグという
項目があって、そこで引数を指定できるはずだ
0852デフォルトの名無しさん
2005/06/04(土) 20:28:15use cmd.exe or command.com
0854デフォルトの名無しさん
2005/06/04(土) 21:08:11ソートするときに入れ替える回数が0回のままなんです
どこがおかしいのでしょうか?
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/499.txt
0855デフォルトの名無しさん
2005/06/04(土) 21:15:48> count++;
アドレスをインクリメントしちゃダメだろう。
(*count)++;
0856デフォルトの名無しさん
2005/06/04(土) 21:16:59× count++
○ (*count)++
0857デフォルトの名無しさん
2005/06/04(土) 21:22:51public:
void hoge_a( void ) { cout << "test1" ; }
} ;
class cb : public ca {
public:
void hoge_b( void ) { cout << "test2" ; }
} ;
class cc : public cb {
public:
void hoge_c( void ) { cout << "test3" ; }
} ;
int main( void )
{
ca a ;
cb b ;
cc c ;
a.hoge_a() ;
b.hoge_a() ;
c.hoge_a() ;// ここで使わせたくない。
}
c.hoge_a() を使わせたくないのですが、こういったとき、
どう継承させればよいのでしょうか?
0859デフォルトの名無しさん
2005/06/04(土) 21:45:26class cc : public cb {
public:
void hoge_c(){ cout << "test3";}
private:
using ca::hoge_a;
};
0860デフォルトの名無しさん
2005/06/04(土) 22:01:32なるほど、ありがとうございました!
0861デフォルトの名無しさん
2005/06/04(土) 22:27:550862デフォルトの名無しさん
2005/06/04(土) 22:29:26ここに、動的3次元配列のサンプルがのっていて、コンパイルしたら、
warning C4786 とか、識別子が '255' 文字に切り捨てられました
など、ものすごい数の警告が出るのですが、そもそもこのやり方は普通なのでしょうか?
vector<vector<vector<int> > > の、> > の間にスペースが無きゃいけない、
あたり、なんだか強引な気がします。皆さんのご意見を伺いたいです。
0863デフォルトの名無しさん
2005/06/04(土) 22:46:40> vector<vector<vector<int> > > の、> > の間にスペースが無きゃいけない、
> あたり、なんだか強引な気がします。
とりあえず、これは動的3次元配列云々とはまったく別の問題。
「最後の文字が '>' である型を、最後のテンプレートパラメータとして用いること」は
強引でも何でもなく、そのことをスペース無しで判別できない言語仕様のほうに問題がある。
0864デフォルトの名無しさん
2005/06/04(土) 22:55:41激しく遅レスで悪いが、
↓のようなスレもあるので併せて活用すべし
★初心者にVisual C++を教えるスレ★ Part19
http://pc8.2ch.net/test/read.cgi/tech/1116209988/
0865デフォルトの名無しさん
2005/06/04(土) 22:59:09けれど、そもそもどうやって使えばいいのでしょうか?
vector<vector<char> > obj;
obj.resize(5) ;
for ( size_t i = 0 ; obj.size() ; i++ )
obj[i].resize(5) ;
for ( int j = 0 ; j < 5 ; j++ ) {
if ( j != 4 )
obj[j].push_back(4 + j) ;
else
obj[j].push_back('\0') ;
}
cout << obj[0] << endl ;
とりあえず、テストでやってみました。obj[5][5] が確保されてて、
obj[0][0] obj[0][1] obj[0][2] ... と、適当な数字をいれて、文字列
にしたつもりですが、表示もうまくいきません。
0866デフォルトの名無しさん
2005/06/04(土) 23:04:06warningは#pragma使うなり、
「> >の」スペースについては適宜typedefするなりして対処
0867デフォルトの名無しさん
2005/06/04(土) 23:05:19warning 4786はSTL使うと必ず出る警告
pragma使うなどしてコンパイラにwarning 4786を出さないようにさせるか、自分で無視しなされ
0868デフォルトの名無しさん
2005/06/04(土) 23:11:03とりあえずオマエは普通の配列とvectorを混同しすぎ
そのobj[0]で返されるのはvector全体であって配列内のデータじゃない
それをcoutしてもオマエが思ってるような表示がされるわけないだろ
0869デフォルトの名無しさん
2005/06/04(土) 23:15:40なんか色々間違ってるぞ。
まず、cout << [vector<t>型] なんてやっても、全要素が一気に出力されたりはしないぞ。
要素を一つ一つ出力しなきゃ。
それから、char型の変数に「適当な数字」を入れたら、そりゃ表示されないこともあるだろうよ。
文字として出力可能な値じゃなきゃ。
あと、push_backってのは要素数を一つ増やしてそこに引数のコピーを代入する関数だから、
そのコードだとobj[j][0]〜obj[j][4]には何も代入していないことになる。
その代わりにobj[j][5]〜obj[j][9]までが新たに作られ、そこに各値が代入されている。
resize(5)がcapacity(5)なら意図した通りに動くがね。
0871デフォルトの名無しさん
2005/06/04(土) 23:26:54レスありがとうございました。配列とvector は意味合い的には違うのですか。
C++はまだ僕には敷居が高いようです・・・。
警告の方は #pragma warning( disable : 4786 ) を付けたら消えてくれました。
STL使うと必ずでる警告だったのですね、安心です。
大変色々と、勉強になりました。
0872デフォルトの名無しさん
2005/06/04(土) 23:34:43普通の配列はただの変数、vectorはクラス
0873デフォルトの名無しさん
2005/06/04(土) 23:41:460874デフォルトの名無しさん
2005/06/04(土) 23:43:540875デフォルトの名無しさん
2005/06/04(土) 23:44:53元から低いの間違いだろ
0876デフォルトの名無しさん
2005/06/04(土) 23:51:52俺はこのスレの回答者のレベルが低いとは思っていないが。
0877デフォルトの名無しさん
2005/06/05(日) 00:19:10ファイルの属性や最新更新日時を読み込む方法はないでしょうか?
0878デフォルトの名無しさん
2005/06/05(日) 00:22:51stat とか fstat 使う。
0879デフォルトの名無しさん
2005/06/05(日) 00:27:38それ思いっきり環境依存。ファイルシステムの問題だから。
まあUNIXのシステムコールであるstat()やfstat()はWindowsのコンパイラでも
サポートされてたりはするが。
0880877
2005/06/05(日) 00:28:15おぉ!こんな関数があったのですね!
早速試してみます。ありがとうございました!
0881デフォルトの名無しさん
2005/06/05(日) 01:12:53【初心者歓迎】C/C++室 Ver.17【環境依存OK】
0882デフォルトの名無しさん
2005/06/05(日) 01:14:13だから?
0883デフォルトの名無しさん
2005/06/05(日) 01:16:150884デフォルトの名無しさん
2005/06/05(日) 01:25:24「自分の質問の内容が環境依存であることがわかってない」と判断して
それが環境依存であることをまず明確にし、
ついでにstat()やfstat()がUNIX系でもWinでも使えることまで教えてあげてるのが
>>879だろ?
それに対する>>881の反応がよくわからんのよ。
0885デフォルトの名無しさん
2005/06/05(日) 01:27:380887デフォルトの名無しさん
2005/06/05(日) 01:56:22#include <string>
int main()
{
// inserts str2 into str1 at locations 11 and then 20
string str1 = "Judges live on income";
string str2 = " fixed";
str1.insert(11, str2);
str1.insert(20, str2);
cout << str1 << endl;
// add ! to the end
str1.push_back('!');
cout << str1 << endl << endl;
}
//error C2039: 'push_back' :
//'basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' のメンバではありません。
見かけたサンプルを持ってきたのですが、コンパイルが通りません。なにか間違っているのでしょうか?
コンパイラはVC6.0です。
str1.push_back('!'); が通らないのは、コンパイラが古いからなのでしょうか?
結構ググったんですけど、一向に答えが見つからないっす・・・
0888888
2005/06/05(日) 02:01:510889デフォルトの名無しさん
2005/06/05(日) 02:03:530890デフォルトの名無しさん
2005/06/05(日) 02:05:250891デフォルトの名無しさん
2005/06/05(日) 02:09:07std::string str2 = " fixed";
string が別のやつと思われてるとか
0892デフォルトの名無しさん
2005/06/05(日) 02:11:590893890
2005/06/05(日) 02:12:200894デフォルトの名無しさん
2005/06/05(日) 02:12:50VS.NET 2003付属のやつとかだとまだいけるけど
まあいい加減寿命だよなあVC++6も
0895デフォルトの名無しさん
2005/06/05(日) 02:14:00察するに、やはり新しいのには push_back が入っているっぽいですね
時期がくるまで、str1+='!'; で凌ごうと思います。
レスありがとうでした
0896デフォルトの名無しさん
2005/06/05(日) 02:21:1721.3
0897デフォルトの名無しさん
2005/06/05(日) 02:34:55VC++6.0
0898デフォルトの名無しさん
2005/06/05(日) 03:14:38$ gcc test1.c
/usr/lib/gcc-lib/i686-pc-cygwin/3.3.3/../../../../i686-pc-cygwin/bin/ld: cannot
find -luser32
collect2: ld returned 1 exit status
というエラーがでます。
同じような過去スレを拝見してlibuser32.aを用意すればとアドバイスされてたのですが
自分にはそれさえよくわかりません誰か詳しく教えて下さい。
0899デフォルトの名無しさん
2005/06/05(日) 03:16:070900デフォルトの名無しさん
2005/06/05(日) 04:16:300901デフォルトの名無しさん
2005/06/05(日) 04:47:40private:
void outer_function();
class inner {
void inner_function(void) {
outer_function(); // エラー
}
};
};
このようなソースで、入れ子のクラスからprivateの外側の関数を呼び出したいのですが
他所では、friendを用いて外側の変数を呼び出すサンプルソースがよくありますが
関数を呼び出そうとなると、どうやってもうまくいきません。
解決方法がありましたら、どなたか宜しくお願いします。
一応、環境はvc7です。
0902デフォルトの名無しさん
2005/06/05(日) 05:05:251. まず下記ディレクトリでlibuser32.aを探す。
/lib/w32api
2. 存在しなければCygwinインストール時に必要物チェックし忘れてないか調べる
3. 存在すれば下記コマンドを試す。
gcc test1.c -I/usr/include/w32api -L/lib/w32api -luser32
ていうかuser32使うようなソースって>>898のコマンドだけでリンカまで行く??
0903デフォルトの名無しさん
2005/06/05(日) 05:05:26そのouter_functionはどのインスタンスに対して呼んでる?
C++のインナークラスはjavaでいうstaticなインナークラスになります。
0904デフォルトの名無しさん
2005/06/05(日) 05:30:16「privateの外側の関数」、という表現が誤解を招いてしまったようですね。
単に、クラスinnerから、クラスouterにあるouter_functionを呼び出したい、ということです。
的外れでしたらごめんなさい。
0905デフォルトの名無しさん
2005/06/05(日) 05:53:22とりあえず>>901ではouter_function()の呼び出しに必要なouterのインスタンスが存在しないからエラーで当然。
outer_function()をstaticにするか、どこかでouterのインスタンスを与える必要がある。
0906903
2005/06/05(日) 06:32:27class inner {
outer* out;
void inner_function(void) {
out->outer_function();
}
0907デフォルトの名無しさん
2005/06/05(日) 06:57:00intel c++ compiler for linux non commercialのtar.gzファイルを解凍すると
rpmファイルがいくつか出てきますが、この内の
intel-icc_ide8-8.1-028.i386.rpm
intel-icc8-8.1-028.i386.rpm
の二つは、HDDの形式がIDEだったら前者を選ぶべきなんでしょうか?
それともここで言うIDEって総合開発環境の事ですか?
0908デフォルトの名無しさん
2005/06/05(日) 11:19:02関数名とその中身を書いたものに対しては呼べなくて
実体が無いと駄目ということですね。そしてその実体のことを
インスタンスと言う、でしょうか。
とにかく勉強になりました、ありがとうございます。
自分のコード内でも>>906で示して頂いたソースで解決できました。
0909デフォルトの名無しさん
2005/06/05(日) 12:00:54普通に考えて、HDDインターフェースとコンパイラが関係あるとは思えないが。
0910デフォルトの名無しさん
2005/06/05(日) 17:19:11どうにもうまいやり方とは思えません。
どのようにすれば、もっと良いものになるか、ご指導お願いします。
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/502.txt
0911デフォルトの名無しさん
2005/06/05(日) 17:38:47うまいどうかは分からないけれども。C++でわざわざレガシーC文字列を
持ち出す意図が分からないから、とりあえずstd::stringに読み込んでる。
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
int main()
{
std::ifstream in("test.txt");
std::string line;
while (std::getline(in, line))
{
if (!line.empty())
{
std::istringstream temp(line);
int num;
std::string mes1, mes2;
temp >> num;
temp.get(); // '\t'消費
std::getline(temp, mes1, '\t');
std::getline(temp, mes2, '\t');
std::cout << num << ':' << mes1 << ':' << mes2 << std::endl;
}
}
return 0;
}
0912デフォルトの名無しさん
2005/06/05(日) 17:57:57そういうクラスを使うのがはやくね?
0913デフォルトの名無しさん
2005/06/05(日) 18:15:51お手本のプログラムを理解するのに、多少時間がかかってしまいました・・・
レスが遅れて申し訳ないです。
>>910 のプログラムでつっこみどころが多いかと思いますが、それはただ単に
知っている範囲で強引に作ったからです。
しかし、ずいぶんすっきり出来るものなのですね。ご教示ありがとうございました。
0914898
2005/06/05(日) 18:39:00なんとかコンパイルできるようになりました。
特に902さん、どもでした。
0915デフォルトの名無しさん
2005/06/05(日) 19:28:46char c=25;
cout<<c;
ってやると文字で25に対応するのが出力されますよね?
そうじゃなくてこのときの出力で25を出すにはどうしたらいいですか?
Cなら
printf("%d",c);
ってやれば出せるようなのをcoutを使って出せるのか?
ってことなんですけど、
どうやって調べればいいのかわからないので教えてください。
0916デフォルトの名無しさん
2005/06/05(日) 19:33:34sprintf(c, "%d", 25);
cout << c;
0917デフォルトの名無しさん
2005/06/05(日) 19:44:30std::cout << static_cast<int>(c);
0918デフォルトの名無しさん
2005/06/05(日) 19:47:56できました。
ありがとうございました。
0919デフォルトの名無しさん
2005/06/05(日) 21:27:15で行けなかったっけ?
0920デフォルトの名無しさん
2005/06/05(日) 21:30:51何その混在コード
0921デフォルトの名無しさん
2005/06/05(日) 21:34:23おや、、よくわからないんですが、こういうのはイクナイん?
0922デフォルトの名無しさん
2005/06/05(日) 21:38:31C++の入門書とか読んだ事あるか?
std::は要らないけど、static_cast<int>はC++形式のキャストだぞ。
0923デフォルトの名無しさん
2005/06/05(日) 21:38:50C++ではC++のキャスト使え。
ということで>>917
0924デフォルトの名無しさん
2005/06/05(日) 21:40:33cout << static_cast<int>(c);
より
cout << (int)c;
の方が簡潔でいいじゃん。
0925デフォルトの名無しさん
2005/06/05(日) 21:41:24なるほど。C++はお勉強途中なので、
独自のキャストがあるとは知りませんでした。
どうもありがとう。
あと、>>915さん、嘘書いちゃってごめんねー。
0926デフォルトの名無しさん
2005/06/05(日) 21:49:17目立つようにわざと長ったらしくなっている。
0927デフォルトの名無しさん
2005/06/05(日) 21:56:23テキストファイルの中身をメモリ上に展開して、
あらかじめ確保している文字列とチェックする関数を作りたいんですが
#メモリに展開・ファイル読み込みはじめてやるもので。
以下のようかんじで考えてるんですが、不備やもっと良いやり方があれば
ご教授願いたいです。
今、ちょっとパソコンに環境なくて試せていないので
(明日には試せそうですが)
申し訳ないのですがご教授ください。
void main(){
FILE *fp;
char *s;
s=(char *)malloc(256);
if ((fp = fopen("C:\\smpl.txt", "r")) == NULL) {
printf("file open error!!\n");
exit(1);
}
fgets(s, 256, fp)== NULL
fclose(fp);/
/*ここで、strcmpあたりで、あらかじめある文字列を、チェックする予定です。*/
}
0928デフォルトの名無しさん
2005/06/05(日) 22:17:03Windowsでウインドウの内部座標を取ろうとしてるんですが
GetWindowRect(hWnd,&rect);
でrectにWindowの座標を代入出来ますよね?
でもタイトルバーなどを含んだ外側なのですが
これをタイトルバーなど含まない完全な内側の座標を取得するには何か足りないのでしょうか?
0929デフォルトの名無しさん
2005/06/05(日) 22:21:39そういうときはMSDNでGetWindowRectを調べるんだ。
関連するAPIが見つかる場合があるぞ。
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/getwindowrect.asp
0930デフォルトの名無しさん
2005/06/05(日) 22:23:33Win32API質問箱 Build32
http://pc8.2ch.net/test/read.cgi/tech/1117271829/
0931デフォルトの名無しさん
2005/06/05(日) 22:27:220932デフォルトの名無しさん
2005/06/05(日) 22:32:46その「テキストファイル」の中身は1行しかなくてしかも255byte以下と
決まってるのか?そうでないと対応できないコードになってるが。
もしそうなら、わざわざmalloc()とか使う必要なし。ただの配列に読み込めばいい。
それと、
fgets(s, 256, fp)== NULL
は意味不明。
0933デフォルトの名無しさん
2005/06/05(日) 22:37:45とりあえず>>915は"Cで"と言っておるわけだが
0934デフォルトの名無しさん
2005/06/05(日) 22:48:06おれのモニタには「Cなら」と写っている。
0935927
2005/06/05(日) 22:52:00>その「テキストファイル」の中身は1行しかなくてしかも255byte以下と
>決まってるのか?そうでないと対応できないコードになってるが。
改行コードがあってもできるほうが良いですが、これではだめですか。。。
なにがいけないのでしょうか?
ファイルの大きさ分だけ動的に確保したかったのですが、わからず
255byte としました。
>fgets(s, 256, fp)== NULL
'==NULL'部分は間違えですね。fgets(s, 256, fp)が正しいです。
これで256byte分の読み込み仕様とおもってました。
0936デフォルトの名無しさん
2005/06/05(日) 22:54:38>printf("%d",c);
>ってやれば出せるようなのをcoutを使って出せるのか?
cout をつかって出せばよさそうなので C++ ではないかと。
あとさ、質問は
>どうやって調べればいいのかわからないので教えてください。
ってところだから誰もマトモに答えてないんだよね。
0937デフォルトの名無しさん
2005/06/05(日) 23:00:39釣りだよな?
0938デフォルトの名無しさん
2005/06/05(日) 23:09:05あとファイル大きいとメモリたんなくなる。
int main(){
FILE *fp;
char *s;
size_t siz;
if((fp=fopen("./sample.txt","r"))==NULL)
exit(1);
// -------- ファイルのサイズを得る
fseek(fp,0,SEEK_END);
if((siz=ftell(fp))<0)
goto error1;
fseek(fp,0,SEEK_SET);
// -------- サイズを確保
if((s=(char*)malloc(siz+1))==NULL)
goto error1;
// -------- 読み込む
if((siz=fread(s,sizeof(char),siz,fp))<0)
goto error2;
s[siz]='\0';
fclose(fp);
printf("%s",s);
//...
// -------- 後始末
free(s);
return 0; //成功
error2:
free(s);
error1:
fclose(fp);
exit(1);
}
0939デフォルトの名無しさん
2005/06/05(日) 23:11:46つまり俺は魚が欲しいんじゃなく、魚の釣り方を教えて欲しい、と言っているのか?
だとしたらあっぱれだな。見所がある。が、ちがうんじゃないカナ?
0940デフォルトの名無しさん
2005/06/05(日) 23:14:44fopen("./sample.txt","r")
"rb"だろ、ファイルは
0941デフォルトの名無しさん
2005/06/05(日) 23:27:44と思ったら初心者スレでしたよ
0942デフォルトの名無しさん
2005/06/05(日) 23:28:53fopen("./thxxx0.cpp","br") <- "rb" でなく
ってやってて、コンパイルは通ったがファイルが開けなかったん…
で、悩んだあげく送信。
orz
0943デフォルトの名無しさん
2005/06/05(日) 23:29:16改行コードが違うのは常識な。WindowsではCR+LF、UNIXではLF。
で、テキストモードでファイルを開いた場合(fopenで"b"を指定しなければ
テキストモードになる)は、UNIX風にファイルを\nで終端された
行の集まりに見せるために、Cランタイム側で細工をしている。
そういう事情もあって、テキストモードでのfseek()は、ftell()で得た
ポイントへの移動しかサポートされない。
0944927
2005/06/05(日) 23:44:14早急におしえていただき、ありがとうございました。
fseek()は、ftell()あたりは、まだちゃんと理解できていないので
ググッて勉強してきます。
0945928
2005/06/05(日) 23:46:25GetClientRect(winsys->hWnd,&rect);
POINT point;
ClientToScreen(winsys->hWnd,&point);
rect.left = point.x;
rect.right += point.x;
rect.top = point.y;
rect.bottom += point.y;
rectに内部のスクリーン座標を入れようとしてみたのですが
これでは何故か上手く座標が設定されないんですがどうすれば良いでしょうか?
0946デフォルトの名無しさん
2005/06/05(日) 23:47:55>ClientToScreen(winsys->hWnd,&point);
何を期待してるんだ?
0947デフォルトの名無しさん
2005/06/05(日) 23:50:48と
POINT point
は違うだろ
0948デフォルトの名無しさん
2005/06/05(日) 23:51:42ClientToScreenにもそのまま&rectを渡せ。
0949デフォルトの名無しさん
2005/06/05(日) 23:54:07クライアント座標をスクリーン座標に変換したかったのかと思われる。
winsysにシステムを色々と入れてるんだろうと予想して…
こういう事をしたかったんじゃないか?
rectでclientサイズ取得してpointでclientのscreen座標を求める。
それをrectに移してサイズ取得したのを代入すればclient内部のscreen座標が出るとでも。
どう期待したらこう思うのか良く解らないが。
0950デフォルトの名無しさん
2005/06/05(日) 23:58:04それだと
'ClientToScreen' : RECTからPOINT変換不可
が出てくると思う。
なので
ClientToScreen(winsys->hWnd,(POINT)&rect);か?
RECTとPOINTは違うけどいけたと思う。
0951デフォルトの名無しさん
2005/06/06(月) 00:00:11RECTとPOINTはそれで無理。
漏れが知ってる事でマジレスするとそのまま&rectは渡せない。
スマソ。初心者なので答えは任せる。
0952デフォルトの名無しさん
2005/06/06(月) 00:07:55マジレスするとPOINTの宣言後にPOINTの初期化がされてないから。
POINT point = {0,0};
で一応上手くいく。
更新して立ってなかったら次スレ立ててくるわ。
0953デフォルトの名無しさん
2005/06/06(月) 00:13:34次スレ
http://pc8.2ch.net/test/read.cgi/tech/1117984322/
0954デフォルトの名無しさん
2005/06/06(月) 00:20:16スレタイから環境依存OKを外したのは意味があるのか?
あと、 Ver が vol に変わってるのも意味がわからん。
0955デフォルトの名無しさん
2005/06/06(月) 00:23:26今までvolと思っていて見直したらverだったんで凹む。
やっぱスレ立てたの間違いだったorzマジスマソ
0956デフォルトの名無しさん
2005/06/06(月) 05:51:49どっちかっつとWin32APIスレ行きな質問だな。
GetWindowRectとGetClientRectで自前計算できようが
0957デフォルトの名無しさん
2005/06/06(月) 07:27:11pointにrectのleft,top入れるべし、、、ってどうせゼロだから0入れればいいけど。
んで、rectの4つすべてに足して平行移動しないと。
API以前の話だな
0958デフォルトの名無しさん
2005/06/06(月) 14:49:210959デフォルトの名無しさん
2005/06/06(月) 14:50:110960デフォルトの名無しさん
2005/06/06(月) 19:50:47F1キーを押す、みたいな関数って無いんでしょうか。
調べてもキーが押されているかどうかを調べるようなのは色々あるようなのですが。
環境はVC++です。
0961デフォルトの名無しさん
2005/06/06(月) 20:04:110962デフォルトの名無しさん
2005/06/06(月) 20:14:11SendMessageでメッセージをウィンドウに送ればいいかと
VK_F1だっけか
0964デフォルトの名無しさん
2005/06/06(月) 20:50:07VC++でWindowsのアプリしか作れないのか?
0965デフォルトの名無しさん
2005/06/06(月) 20:54:000966デフォルトの名無しさん
2005/06/06(月) 21:00:49ま、半分飾りだが。
0967デフォルトの名無しさん
2005/06/06(月) 21:46:200968デフォルトの名無しさん
2005/06/06(月) 21:49:080969960
2005/06/06(月) 23:18:29で思ったような動作はしたのですが、どうも遅い気がします。
何か遅くなるような原因とかあるんでしょうか…?
0970877
2005/06/06(月) 23:34:10char **name;
というのを使おうとしているのですがうまくいきません。
どうすればよいのでしょうか?
int main()
{
char *str1 = "aaaa"; //とりあえず2つ
char *str2 = "bbbb";
char **name;
for(i=0; *str1!='\0'; i++){
name[0][i] = *str1;
str1++;
}
for(i=0; *str2!='\0'; i++){
name[1][i] = *str2;
str2++;
}
実行するとメモリアクセスエラーが発生します。
0971デフォルトの名無しさん
2005/06/06(月) 23:35:200972デフォルトの名無しさん
2005/06/06(月) 23:55:36メモリを割り当てるというのは
mallocを使うと言うことでよろしいのでしょうか?
0973デフォルトの名無しさん
2005/06/06(月) 23:56:260974972
2005/06/07(火) 00:00:17ありがとうございました。
0976デフォルトの名無しさん
2005/06/07(火) 05:33:59そりゃBROADCASTしてりゃ重くなるわ
0977デフォルトの名無しさん
2005/06/07(火) 05:35:51ネットワークのMACアドレス問い合わせパケットじゃねぇんだからよ、
ある特定のアプリの窓にメッセージ送るのにいちいちBROADCASTするなんてただの阿呆だぞ。
目的のアプリの窓のハンドル取得して直接送れ
0979デフォルトの名無しさん
2005/06/07(火) 15:59:18FindWindow()
0980デフォルトの名無しさん
2005/06/07(火) 17:12:39それはプログラムのスキルが足らないんじゃなくて検索のスキルが足らないな
おまえさんに必要なのはC/C++のことよりもWin32APIのことだし、
今後わからないならWin32APIスレで聞くとよい
0981デフォルトの名無しさん
2005/06/07(火) 17:28:420982デフォルトの名無しさん
2005/06/07(火) 17:35:010983デフォルトの名無しさん
2005/06/07(火) 17:46:360984デフォルトの名無しさん
2005/06/07(火) 19:32:29だれかこんな僕に優しくわかりやすく教えてください
0985デフォルトの名無しさん
2005/06/07(火) 19:44:00どんな風にわからないのか、優しくわかりやすく説明してくれ。
0986デフォルトの名無しさん
2005/06/07(火) 20:09:300987デフォルトの名無しさん
2005/06/07(火) 21:16:120988デフォルトの名無しさん
2005/06/07(火) 21:23:260989デフォルトの名無しさん
2005/06/07(火) 21:25:34throw ぬるーり;
}
0990デフォルトの名無しさん
2005/06/07(火) 21:41:18のときに配列に1を代入したいのですが
なぜか0が代入されてしまいます。
どこが間違ってるのか教えてください。
さっぱりわかんねorz
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/510.txt
0991デフォルトの名無しさん
2005/06/07(火) 21:49:32x == 0 のとき、a[0][1] は 1 になるが、
x == 1 のとき、a[0][1] はどうなる?
0992デフォルトの名無しさん
2005/06/07(火) 22:04:02throwするんかい
0993デフォルトの名無しさん
2005/06/08(水) 01:07:32>/*構造体型struct edgeの宣言*/
言われんでも見りゃわかるわw
「何をしてるのか」じゃなくて「何をしたいのか」をコメントしような
この場合なんのつもり(何に使うつもり)で構造体edgeを宣言
したのかを書いてくれ
ちなみにxを使ったループが外にあるせいで
毎回結果が上書きされてx==9の場合の結果しかaに入ってないが
それが意図した操作なのか?根本から間違ってるように見える
0994デフォルトの名無しさん
2005/06/08(水) 01:20:19VBのstrtocnvみたいな便利な関数は無いですか?
0995デフォルトの名無しさん
2005/06/08(水) 01:33:150996デフォルトの名無しさん
2005/06/08(水) 02:22:52今だと Xbox360 (PowerPC) とか。
0997デフォルトの名無しさん
2005/06/08(水) 14:30:010998デフォルトの名無しさん
2005/06/08(水) 14:36:19実際に使用が開始された時点で確保されているようなのですが、そういうものなのでしょうか?
OSはSuse Linux、gcc4.0.0、メモリ使用量はtopコマンドで見ました。
0999デフォルトの名無しさん
2005/06/08(水) 14:39:47そういう動きをしているのなら、そういうものなのでしょう。
1000デフォルトの名無しさん
2005/06/08(水) 14:50:2610011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。