【初心者歓迎】C/C++室 Ver.9【環境依存OK】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGただしその場合、質問者は必ず、環境を書きましょう。
【歴代スレ】
1:http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
2:http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
3:http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
4:http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
5:http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (html化待ち)
6:http://pc5.2ch.net/test/read.cgi/tech/1082182233/(html化待ち)
7:http://pc5.2ch.net/test/read.cgi/tech/1086373839/(html化待ち)
8:http://pc5.2ch.net/test/read.cgi/tech/1091264964/l50
【ラウンジ】質問、回答が長い時はココを使うと見やすい
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
関連スレは>>2-5ぐらい
0153デフォルトの名無しさん
NGNGそうかなあ、>149はちゃんと正しく書いてるのに。
int*が4と覚えられたらまずいと思うな。
0154デフォルトの名無しさん
NGNG正しくないよ。
>size = sizeof(a);//コンパイル時に size = 100;になる
size = intのサイズ*100になる
0155デフォルトの名無しさん
NGNGほんとだ
0156143
NGNGC解説サイトに書いてました。なんとなく腑に落ちたような。
int*が4とは限らないというのは一応知っているつもりですが。いちおう...
>>148
確かにそういう風に思ってたかも。でも、演算子ってなんなんだ
って逆に思ってしまった。なんだか、キリがないですね。すみません。
0157デフォルトの名無しさん
NGNGという感じかな?
だから
>int a[100];
>int* p = a;
>size = sizeof(p);
sizeof(p)はsizeof(a)ではなくsizeof(int*)と同じになる。
0158デフォルトの名無しさん
NGNGint a[100], *p; とあったとき、aとpは全然別物。
似たような使い方ができるだけであって、特別に何かをしているわけじゃない。
0159デフォルトの名無しさん
NGNGclass hoge
{
private:
int i;
int j;
foo myfoo(i,j);//エラー
public:
hoge();
};
hoge::hoge()
{
i=100;
j=200;
}
のように、hogeオブジェクト生成時にそのメンバ変数を引数として
fooオブジェクトを作成することはできないのでしょうか。
上のような書き方ではエラーでコンパイルできませんでした。
引数を取らずにfoo myfoo();と定義すれば
うまくいくようなのですが、これでは別の場所でhogeのi,j値を
渡さないといけないので面倒くさいしなんかかっこ悪いです。
ですがそうしないといけないものなのでしょうか。
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNG0162デフォルトの名無しさん
NGNGfoo myfoo(); では、foo型のオブジェクトを返すmyfooという名前の関数の
宣言になってしまう。
0163159
NGNGなんか見たことの無い書き方で
何がどうなってるのか分からないんですが
普通に整形したらどういう感じになるんでしょうか…
0164デフォルトの名無しさん
NGNGconstructorでのmember/base classの初期化構文。
0165デフォルトの名無しさん
NGNGclass foo {
double i, j;
public:
foo(double x = 0, double y = 0) : i(x), j(y) {}
void printfoo() const { std::cout << std::fixed << i << ", " << j << std::endl; }
};
class hoge {
int i;
int j;
foo myfoo;
public:
hoge(int x = 100, int y = 100) : i(x), j(y), myfoo(i, j) {}
void printfoo() { myfoo.printfoo(); }
};
int main()
{
hoge h;
h.printfoo();
}
0166159
NGNGありがとうございます。
度々申し訳ないのですが、↓のような感じの書き方はできないんでしょうか?
慣れてないものでシンプルな書き方じゃないとよく分からないのです。
試したらエラーがでましたが、>>165とは意味が違ってきてしまうのでしょうか。
class hoge{
private:
int i;
int j;
foo myfoo;
bublic:
hoge();
}
hoge::hoge()
{
i=100;
j=200
myfoo(i,j);
{
0167デフォルトの名無しさん
NGNG意味が違うからエラーが出るに決まってんじゃン。
>>165が正しい書き方なのでこれを理解して覚えること。
メンバの初期化に引数つきコンストラクタを呼ぶにはこうするしかない。
メンバ初期設定リストで調べてみ。
0168デフォルトの名無しさん
NGNG検索語句も示されてるのに
知障か?
0169デフォルトの名無しさん
NGNG何度もいいますようにmyfoo(i, j);というのは関数の呼び出しです。コンストラクタの
呼び出しではありません。そしてmyfoo(int, int)という関数が宣言されていないので
エラーになるのだと思います。
どうしても初期化リストではなくコンストラクタ内からコンストラクタを呼び出すので
あれば、newの配置構文(placement-new)を使うか、単純にfoo型の一時オブジェクト
を作って代入してやればよいです。
class hoge {
int i;
int j;
foo myfoo;
public:
hoge() {
i = 100;
j = 200;
myfoo = foo(i, j); //foo型の一時変数を代入
// new (&myfoo) foo(i, j); //こちらでもよい
}
void printfoo() const { myfoo.printfoo(); }
};
0170デフォルトの名無しさん
NGNGどうもうまくいかなくて行き詰ってしまったので助けてください><
#include<iostream>
using namespace std;
void CalcTemp(float, float,float&);
int main()
{
float tempCel,
float tempFahr,
CalcTemp(tempCel);
cout << "Enter celcius Temperature ==> ";
cin >> tempCel;
cout << "tempCel Celcius Degree = tempFahr Degree Fahrenheit ";
return 0;
}
void CalcTemp(float tempCel);
{
tempFahr = 9/5 * tempCel + 32 ;
}
0171デフォルトの名無しさん
NGNGvoid CalcTemp(float tempCel);
{
tempFahr = 9/5 * tempCel + 32 ;
}
じゃなくて、
void CalcTemp(float* tempCel)
{
tempFahr = 9/5 * tempCel + 32 ;
}
CalcTemp(tempCel);
じゃなくて、
CalcTemp(&tempCel);
0172デフォルトの名無しさん
NGNGusing namespace std;
float CalcTemp( float );
int main()
{
float tempCel;
float tempFahr;
tempFahr = CalcTemp( tempCel );
cout << "Enter celcius Temperature ==> ";
cin >> tempCel;
cout << tempCel << " Celcius Degree = " << tempFahr << " Degree Fahrenheit ";
return 0;
}
float CalcTemp(float tempCel)
{
return 9/5 * tempCel + 32 ;
}
0173デフォルトの名無しさん
NGNG0174デフォルトの名無しさん
NGNG>>172さん
レスありがとうございます。起動までこぎつけることができました。感謝感激です!
ただ、実際に数字を入れてみると-1.07e+008みたいな感じになってしまいます。
これはどうしたら直せますか?ご教授お願いします。
0175デフォルトの名無しさん
NGNGstd::setiosflags( std::ios::fixed )
0176デフォルトの名無しさん
NGNGソースをもっとよく見直せ。いったい何を計算してるんだ?
cinから貰ったtempCel の値で tempFahr を求めるんだろうが。
0177デフォルトの名無しさん
NGNGレスありがとうございます。
float CalcTemp(float&);
float CalcTemp(float& tempCel)
に変えてみたのですが同じような結果になってしまいました。
根本的に勘違いしてるところがあると思うのでもしよろしければ
教えて頂けませんか?
0178デフォルトの名無しさん
NGNGcout << "Enter celcius Temperature ==> ";
cin >> tempCel;
tempFahr = CalcTemp( tempCel );
cout << tempCel << " Celcius Degree = " << tempFahr << " Degree Fahrenheit ";
0179デフォルトの名無しさん
NGNG> // new (&myfoo) foo(i, j); //こちらでもよい
よくねーよ。
0180デフォルトの名無しさん
NGNG理由は?
0181デフォルトの名無しさん
NGNGありがとうございます!!できました。
つまりcinで数値を入れた後に計算するようになってなかったのが
原因と理解しましたが合ってますか?
0182デフォルトの名無しさん
NGNGお前もしかしてplacement new構文を知らないんじゃないか?
もう一度よく勉強してみろ。
0183デフォルトの名無しさん
NGNGすでにデフォルトコンストラクタで構築されたmyfooが解体されずに
新たに配置newでコンストラクトしてる。
だと思う。
0184デフォルトの名無しさん
NGNGそれはおかしい。myfooのデフォルトコンストラクタはいつ呼ばれているというんだ。
0185デフォルトの名無しさん
NGNGhogeのコンストラクタが呼ばれる前だよ。
あるクラスのコンストラクタが呼ばれるときには、基底クラス・メンバの構築は完了してる。
0186デフォルトの名無しさん
NGNGこれやってみ。aがデフォルトコンストラクタで構築された後、解体されずにまた構築されるから。
struct A {
A() { cout << "A::A()" << endl; }
A(int) { cout << "A::A(int)" << endl; }
~A() { cout << "A::~A()" << endl; }
};
struct B {
A a;
B(int i) {
cout << "B::B()" << endl;
new(&a) A(i);
}
};
B b(10);
0189デフォルトの名無しさん
NGNG0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
NGNGいくらで買ってくれますか?
0192デフォルトの名無しさん
NGNGfunction1とかfunction2と明示してやんないとダメみたいです。
0193デフォルトの名無しさん
NGNGそれは「使える」に入らないのか?
0194デフォルトの名無しさん
NGNG入らない。
struct C{
template<class T>
void apply(boost::function<T> fn){ fn(); } };
3行で書けるものがfunctionの引数に応じたapplyのオーバーロードを書かなあかん。
それによって悪い悪臭を放つ。
0195デフォルトの名無しさん
NGNGdelegateとして使うなら引数の型と個数は静的に決定されてるんだから
そんな屁理屈が出てこないはずなんだが。
0196164
NGNG0197194
NGNG漏れはおととい出直してくるわ。
0198デフォルトの名無しさん
NGNGアスキーに変換csvに出力するにはどうしたらいいでしょうか?
0199デフォルトの名無しさん
NGNGそんな仕様書じゃ作れません
0200デフォルトの名無しさん
NGNG0201デフォルトの名無しさん
NGNGは
”!((a==1)&(b==2))”
でいいのでしょうか?
0202デフォルトの名無しさん
NGNGいいえ。駄目です。
0203デフォルトの名無しさん
NGNG0204デフォルトの名無しさん
NGNG>>203
どうすればいいのでしょうか?
0205デフォルトの名無しさん
NGNG!((a == 1) && (b == 2))
(a == 1) && (b != 2)
ご注文はどっち?
0206デフォルトの名無しさん
NGNG!((a == 1) && (b == 2)) の方でした
&が二ついるんですねw
ありがとうございました
0207デフォルトの名無しさん
NGNG例えば、ファイルの先頭から12 byte目の情報を調べたい時です
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGレスありがとうございます
seekについて調べてみたのですが使い方が載っていませんでした
よろしければ使い方も教えてください
0211デフォルトの名無しさん
NGNG「seek ファイル」で検索してみたのですがCのseekについては見つかりませんでした
0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNGfseekでヒットしました
これから読んできます
ありがとうございました
0214フフフ
NGNGコマンドラインからDirectXのサンプルプログラムをコンパイル
したのですがコンパイルエラーが出てしまいます。
リンカの設定をしないとダメだと聞いたので
bcc.cfgファイルに
-I"C:\DX90SDK\Include"
-L"C:\DX90SDK\Lib"
ilink32.cfgファイルに
-L"C:\DX90SDK\Lib"
と追加したのですが
Fatal: オプションが必要 :LC:\DX90SDK\Lib
と、コンパイルエラーが出てしまいます。
どうしたらいいのか教えてください。
0215デフォルトの名無しさん
NGNGタダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50
0216デフォルトの名無しさん
NGNGどうすれば下3桁だけを比較できるのか全く検討がつきません。
どうすればいいか教えてくださいお願いします。
0217デフォルトの名無しさん
NGNGlong long int x;
x = 100100;
として
下三桁は x - x / 1000
0218デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNG嘘
long long int tmp;
も宣言
tmp = x / 1000;
x - x * 1000;
0220216
NGNGがんばってみます。
0221デフォルトの名無しさん
NGNG何も考えないで書くとこんなのになるんですが・・・。
int x = 0x80000000;
int count = 0;
while (x) {
x >>= 1;
count++;
}
0222デフォルトの名無しさん
NGNGint count = sizeof(int)<<3;
それとも最大整数値?
int count = ~(1<<((sizeof(int)<<3)-1));
int型って32bitCPUと64bitCPUで有効桁数変わったっけ?(うろ覚え
0223デフォルトの名無しさん
NGNG0224デフォルトの名無しさん
NGNG>>221のプログラムも見ずに聞き返すなよ
0225デフォルトの名無しさん
NGNGsizeof(int)*8
0226デフォルトの名無しさん
NGNGだな
0227221
NGNG>>221で言った有効桁数ってこういう意味でいっていました。
整数値 = 桁数
0x00000001 = 1
0x00000002 = 2
0x00000004 = 3
0x00000008 = 4
0x00000010 = 5
・・・
0x80000000 = 32
ようは立っているビットの最上位ビットの位置のことです。
言葉の使い方がわるかったです、スミマセン。
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG0230デフォルトの名無しさん
NGNGint log2(int arg)
{
int r;
__asm {
mov eax, -1;
bsr eax, arg;
inc eax
mov r, eax;
}
return r;
}
int main()
{
int testvalues[] = { 0x00000000, 0x00000001, 0x00000002, 0x00000004, 0x00000008, 0x00000010 };
int i, max = sizeof(testvalues) / sizeof(int);
for(i = 0; i < max; i++)
{
printf("%08X = %d\n", testvalues[i], log2(testvalues[i]));
}
getchar();
return 0;
}
0231デフォルトの名無しさん
NGNGこんな感じの場合の配列aの個数です。
int i;
int a[] = {1,2,3,4};
for(i=0;i<aの配列の個数;i++){
}
0232デフォルトの名無しさん
NGNG#include<stdio.h>
main(){
int a[] = {1,2,3,4};
printf("%d\n",sizeof(a)/4);
return 0;
}
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNGあほか。アホか。阿呆か。
0236デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG#define NUMOF( array ) ( sizeof( ( array ) ) / sizeof( ( array[ 0 ] ) ) )
なんていう糞マクロ見たっけなあ
0238231
NGNGΣ(゚Д゚;≡;゚д゚)
どれが一番ポピュラーな方法なんでしょうか??
こんな感じですか??
int i;
nt a[] = {1,2,3,4};
int size = sizeof (a)/sizeof(a[0]);
for(i=0;i<size;i++){
}
0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG有名なマクロだよ。
Cでは良く使われるし糞とは言えない。
C++だったらテンプレートでやるべきだけど。
0241デフォルトの名無しさん
NGNG「べき」なんて言えないよ。
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGとかそういう話?
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNGテンプレートの話はひとまず置いておいたほうが混乱させなくてよいとおもうぞ。
インタプリンタ系言語だと、a.countとかa.indexみたいな感じで配列の要素数一発で調べられたりするからね。
初心者さんにはつまずきやすいところではあるな。
0247デフォルトの名無しさん
NGNGお前のレスのほうがよっぽど混乱させる文だな
0248デフォルトの名無しさん
NGNGそれは私が別スレで取り上げたのと同じやつ^^;
0249デフォルトの名無しさん
NGNGマクロは結局単なる置き換えに過ぎないし、コンパイラの機能ではないから、
マクロでエラーが発生したときにエラーメッセージからどこが問題かを判断し
にくいということがある。
良くある間違いは置き換えであることを忘れて-つまり関数と勘違いして-
マクロを書いてしまうと括弧を付け忘れたりして予想もしない計算結果になること
もある。
具体的にどうすれば良いかと言うと、配列の要素数を求める計算自体は
それほど複雑でもないので、
o 配列を宣言したすぐ後で要素数を入れる変数を用意しておくか、
o その場その場でsizeof(array)/sizeof(array[0])を実行するか、
した方が良いと思う。
0250デフォルトの名無しさん
NGNGそうすりゃ計算結果が狂うなんてまずないし。
0251デフォルトの名無しさん
NGNG汎用マクロにしたら配列とポインタを混同してしまう危険があるだろ。
ポインタで渡してもエラーにならないし。
0252デフォルトの名無しさん
NGNG#define max(n, m) (n > m ? n : m)
c=max(++a, ++b);
みたいなのだな。numofマクロならそんな事はないだろうけど。
■ このスレッドは過去ログ倉庫に格納されています