トップページ⇒tech
1001コメント316KB

【初心者歓迎】C/C++室 Ver.7【環境依存OK】

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。

【初心者歓迎】C/C++室【環境依存OK】
http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
【初心者歓迎】C/C++室 Ver.2【環境依存OK】
http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
【初心者歓迎】C/C++室 Ver.3【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
【初心者歓迎】C/C++室 Ver.4【環境依存OK】
http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
【初心者歓迎】C/C++室 Ver.5【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (html化待ち)
【初心者歓迎】C/C++室 Ver.6【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1082182233/l50

【ラウンジ】質問が長い時はココを使うと便利
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html
0002デフォルトの名無しさんNGNG
2
0003デフォルトの名無しさんNGNG
【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part12
http://pc5.2ch.net/test/read.cgi/tech/1083585833/l50
C++Builder相談室 Part9
http://pc5.2ch.net/test/read.cgi/tech/1080541814/l50
GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/l50
Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/l50
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/l50
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/l50
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50
■ VisualC++(MFC限定)相談室 MFC10.dll■
http://pc5.2ch.net/test/read.cgi/tech/1074104008/l50
0004デフォルトの名無しさんNGNG
【関連スレ(その他)】
C言語なら俺に聞け! Part 81
http://pc5.2ch.net/test/read.cgi/tech/1085806791/l50
C++相談室 part31
http://pc5.2ch.net/test/read.cgi/tech/1086185282/l50
C/C++の宿題は私におまかせくださいませ 23代目
http://pc5.2ch.net/test/read.cgi/tech/1085149383/l50
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/l50
プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/l50
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/l50
C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50
くだらない質問でもべっちょ偉そうに聞いていいスレ
http://pc5.2ch.net/test/read.cgi/tech/1069530956/l50
0005デフォルトの名無しさんNGNG
>>1
乙
0006デフォルトの名無しさんNGNG
C#がわからないかわいそうな人たちのスレ
0007デフォルトの名無しさんNGNG
>>1
�dクス
0008デフォルトの名無しさんNGNG
>>1
乙かれ〜
0009デフォルトの名無しさんNGNG
void hoge(int &num, ...);
try{} catch(...) {}

引数の「...」には何か意味があるのでしょうか?
書籍とかで調べたのですがのってないです。
0010デフォルトの名無しさんNGNG
>9
「C C++ 可変個 引数」とかで検索してみな
0011デフォルトの名無しさんNGNG
>>9
catch(...)ですべての例外を補足することになる。
C++で不定引数を使う場面はこのcatchぐらい。
0012デフォルトの名無しさんNGNG
>>9
...は、放っておくとコンパイラが勝手に3文字入れて補完してくれます。
「まんこ」なんて文字が当てはめられる事も。
0013デフォルトの名無しさんNGNG
>>12 ウソはよくないね
これは throw ... を捕捉するためのものね
0014デフォルトの名無しさんNGNG
BMPからRGB値を取り出して表示させる物が作りたいのですが
どうすればいいでしょうか?
0015デフォルトの名無しさんNGNG
>>14
RGB値の定義が不明だが、BMPを走査してRGBを取り出して表示すればいいんじゃないの?
0016デフォルトの名無しさんNGNG
その走査のやり方が分からない初心者なんです
どこか簡単な解説サイトか何かありませんか?
0017デフォルトの名無しさんNGNG
ここはどうだろう
ttp://black.sakura.ne.jp/~third/system/winapi/win117.html
0018デフォルトの名無しさんNGNG
int (1), (2), (3);
(1) = 1*hoge;
(2) = 2*hoge;
:

という、ふつー通らないだろと思うコードがあったんだが
これ通るコンパイラって存在したりする?
とりあえず手持ちの、C for AIX(版不明)とgcc 2.95/3.3、VC6(SP6)で
通らなかった。

#だがC++でコンパイルすると宣言だけは通るっぽい。なーぜーだー

0019デフォルトの名無しさんNGNG
C++で宣言が通るのは int(x)ってのができるから
int(1), (2), (3); → 1, 2, 3;
になるからなんじゃないかな。
0020デフォルトの名無しさんNGNG
gmpライブラリを使っての質問なのですが、
base expともにgmp数でbase^expを計算させたいとき
expがgmp数のままでbase^expを計算する方法はありませんか?
expがgmp数のままでbase^expを計算しようとすると
warning: passing arg 3 of `__gmpz_pow_ui' makes integer from pointer without a cast
と叱られてしまいます。

もしくは、gmp数をunsigned intに戻す方法をおしえていただけませんか?
0021デフォルトの名無しさんNGNG
http://www.swox.com/gmp/manual/
002220NGNG
unsigned long int mpz_get_ui (mpz_t op)
Return the value of op as an unsigned long.

に書いてあるのだろうということは分かっているんですが、
どう使ったらいいのかわからないんです。

unsigned long int mpz_get_ui (mpz_t amari);
としても、
warning: passing arg 3 of `__gmpz_pow_ui' makes integer from pointer without a cast
としかられて困ってるんです。
0023デフォルトの名無しさんNGNG
http://www.swox.com/gmp/manual/Integer-Exponentiation.html
0024デフォルトの名無しさんNGNG
#include <stdio.h>
#include "gmp.h"
int main()
{
mpz_t a, b, c;

mpz_init_set_ui(a, 2UL);
mpz_init_set_ui(b, 128UL);
mpz_init(c);

mpz_pow_ui(c, a, mpz_get_ui (b));
mpz_out_str(stdout, 10, c);
printf("\n");

mpz_clear(a);
mpz_clear(b);
mpz_clear(c);
return 0;
}
0025デフォルトの名無しさんNGNG
スレ誘導してくださった方ご迷惑をおかけしてすいません。
2回もスレ違いな質問してしまってまたここで質問するのも恐縮なのですが、

C言語で ファイルにカキコミを行う際、
c:\\test\\test.txt
のようにするとTESTというフォルダがある場合はうまくいくのですが、
もともとTESTというフォルダがない場合の書式はどのようにすればよろしいのでしょうか?
当方BCC++を利用しております。
できればUNIXの環境での書式も教えていただけたら幸いです。

あ〜マルチのようで本当に申し訳ない。
0026デフォルトの名無しさんNGNG
#include<stadio.h>
main()
{
  printf("Hello World\n");
  return 0;
}

ビルドできません
fatal error C1083: インクルード ファイルがオープンできません。'stadio.h': No such file or directory
というエラーが出ますが、どうしてでしょう?
初歩的な質問ですがよろしくおねがいします。
0027デフォルトの名無しさんNGNG
そりゃ出来ないだろう。
#include <stdio.h>
int main()
{
  printf("釣られた?\n");
  return 0;
}
0028デフォルトの名無しさんNGNG
>>27
それでできました。
main()の前にintが必要だったんですね
0029デフォルトの名無しさんNGNG
C言語を無料で公開してるサイト教えれ
0030デフォルトの名無しさんNGNG
>>25
>スレ誘導してくださった方ご迷惑をおかけしてすいません。
いや漏れが悪い。たらいまわしのようにしてしまってスマン...orz

Windows下では単純に
  BOOL bRtn = ::CreateDirectory("C:\\test\\test", 0);
なのだが...
0031デフォルトの名無しさんNGNG
#include<stadio.h>
int main()
{
  printf("こんにちは\n");
  return 0;
}

中の文字を変えてやってみたらさっきとおんなじエラーが出ました。
fatal error C1083: インクルード ファイルがオープンできません。'stadio.h': No such file or directory
今度はmain() の前にintをつけているのにどうしてでしょうか?
0032デフォルトの名無しさんNGNG
>>25
boost::filesystem で出来ると思う
0033デフォルトの名無しさんNGNG
>>31
さようなら。
0034デフォルトの名無しさんNGNG
>25
_mkdirってダメだっけ?

int nRtn = _mkdir("C:\\test\\test");
0035デフォルトの名無しさんNGNG
>31
二段構えの釣りかよ
003631NGNG
自己解決しました

satadio.h→stdio.hのところでした

なんか非常にばかな間違えでした
これじゃ釣りに見えても不思議じゃない
0037デフォルトの名無しさんNGNG
include <stdio.h>
void main()
{
int i;
for(i=0;i<1000;i++)
{
printf(">>31氏ね");
}
}
003831NGNG
何で1000回と一定回数にするんだろう? while(1)使えよ低脳w
0039デフォルトの名無しさんNGNG
>>30さま
>>32さま
>>34さま
ヒントどうもです。
これからいろいろ調べてみようと思います。
どうもお世話になりました。
0040デフォルトの名無しさんNGNG
あ、あの…
PCを去年の6月に初めて購入した者ですが
プログラミングって何から始めればよいのでしょうか…
0041デフォルトの名無しさんNGNG
>>39
力になれなくて申し訳ないでつ
気を落とさずにまた来てくださいでつ
0042デフォルトの名無しさんNGNG
>>40
プログラムの文法よりも
アルゴリズムを学べ
0043デフォルトの名無しさんNGNG
>>41
まずは、自分がどうしてプログラミングを勉強したいのか、
(あるいは、本当に勉強したいのか) よく考えてみるところから
始めてみてはどうでしょうか。
004443NGNG
>>41 でなくて >>40 でした。
失礼しました。
0045デフォルトの名無しさんNGNG
>>39
最初にスレ違いと言った手前、一応補足。
Unixにはmkdir()がある。Windowsでも_mkdir()が使えるはずなので、それを使うのも手。
いずれにしても、両OSで共通のソースにしたいなら喩え中身が
CreateDirectory()やmkdir()だけでもそれだけで関数にしておくことをお勧めする。
いっそ、その他のOS依存関数もまとめておくと尚いいかと。
0046デフォルトの名無しさんNGNG
>>40
このスレ的にはC/C++を学びたいと思っていることを前提にすべきかもしれんが、
もし貴方がExcel使いならマクロを登録してVBAから始めるのがいいかも。
0047デフォルトの名無しさんNGNG
>>45
MkDir系の関数はなんで処理系依存になって、
言語実装されなかったんですかね。
そんな抽象化の難しいもんじゃないような気がするんですが...
MkDir系がダメならOpen系(fopen)もダメだと思うんですが。
0048デフォルトの名無しさんNGNG
全てのファイルシステムが階層ディレクトリをサポートしているわけじゃないから。
0049デフォルトの名無しさんNGNG
参りますた。逝ってきます・゚・(ノД`)・゚・
0050デフォルトの名無しさんNGNG
どうでもいいんだが、size_t 型の t って何だ?
0051デフォルトの名無しさんNGNG
typoだろ
0052デフォルトの名無しさんNGNG
size_tanasin
0053デフォルトの名無しさんNGNG
VisualStudio.Netです。
MFC C++でダイアログベースでアプリを作ってるのですが、
CStirngに格納されたデータ(\r\n入り)を印刷するときに、
DrawTextを使って印刷してるのですが、
複数枚にわたる印刷が出来ません。
どうしたらいいのでしょうか?
0054デフォルトの名無しさんNGNG
他のとこでも聞いてますがここでも教えて下さい。

キーボードから5人分の年齢身長および体重を繰り返し構文を用いて年齢は1次元配列(age)身長と体重は2次元配列(date)
に読み込み以下の二つの条件を同時に満足するもののデータ(出席番号・年齢・身長・体重)と人数を画面に表示するプログラム
を作成せよ。
条件
1 身長が全員の平均値よりも高い。
2 体重が全員の平均値以下である。

と言う問題なんですが厨房のオレにはさっぱりで
数値や変数の型などは自由で良いみたいなので模範解答みたいのをお願いします。
よろしくお願いします。
0055デフォルトの名無しさんNGNG
(´ι _` )アッソ
0056デフォルトの名無しさんNGNG
>>54
#define SUTADIO <stdio.h>
#include SUTADIO
#define mein main
#define mosi if
#define boid void
#define faibu 5
#define wan 1
#define tuu 2
boid mein(){
float caunto;
float age[faibu];
float date[faibu][tuu];
int tincyo_heikin;
int taijuuu_heikin;
for(caunto=0; caunto<faibu; caunto=caunto=caunto+=wan){
printf("年齢 身長 体重? ");
scanf("%f %f %f",&age[(int)(char)(int)caunto],&date[(int)(char)(int)caunto][0],&date[(int)(char)(int)caunto][1]);
}

tincyo_heikin=taijuuu_heikin=tincyo_heikin=taijuuu_heikin=0;
for(caunto=0; caunto<faibu; caunto=caunto=caunto+=wan){
taijuuu_heikin+=date[(int)(char)(int)caunto][1];
tincyo_heikin+=date[(int)(char)(int)caunto][0];
}
taijuuu_heikin=tincyo_heikin=taijuuu_heikin/faibu;
tincyo_heikin=tincyo_heikin=tincyo_heikin/faibu;

for(caunto=0; caunto<faibu; caunto=caunto=caunto+=wan){
mosi(tincyo_heikin<date[(int)(char)(int)caunto][0] && taijuuu_heikin>date[(int)(char)(int)caunto][1]){
printf("年齢%f 身長%f 体重%f\n",*&age[(int)(char)(int)caunto],*&date[(int)(char)(int)caunto][0],*&date[(int)(char)(int)caunto][1]);
}}}
0057デフォルトの名無しさんNGNG
>>56
出席番号は?(w
0058デフォルトの名無しさんNGNG
>>53
EndPage
StartPage
005953NGNG
>>58 さん
もうちょっとヒントください
0060デフォルトの名無しさんNGNG
ちっとは検索するとか、自分で頭ひねって考えるとか
してみようとは思わんのかね、まったく・・
趣味グラマにしても、これから勉強始める素人にしても
駄目すぎだろ、それじゃ・・
0061デフォルトの名無しさんNGNG
MFCはスレ違いだから
006253NGNG
>>60
MSDNひっくり返してみてるんですがね、、、
検索も試したんですが、いいのが当たらなくて
"VC++" 印刷
でいいんですよね?
0063デフォルトの名無しさんNGNG
>>62
だから、スレ違いだって。
VCスレか、MFCスレに逝け。>>3
0064デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int i=32,n=0;
printf("ASCIIコード 10進数 16進数 の順に表示します\n");
while(i<=126)
{printf("%c %-3d (0x%x) ", i, i, i);
i+=1;
n++;
 
  if (n>=5)
{printf("\n");
  }
 }
}

これを改造して、ひらがなのASCIIコード

http://www.unicode.org/charts/PDF/U3040.pdf

をだしたいのですが、
int i=12353
while(i<=12447)
でやってもうまくいきません。
どうすればいいのでしょうか?
それと、アルファベットのASCIIコードと、ひらがなのASCIIコードを一緒に表示したい場合、
int i=32
while(i<=12447)
となるのでしょうか?
0065デフォルトの名無しさんNGNG
>>64
>ひらがなのASCIIコード

そんなものはない
0066デフォルトの名無しさんNGNG
Cの初心者向けの本で勉強しています。

#include <stdio.h>
int main(void)
{
char shimei[] = "Tarou";
printf("%s\n",shimei);

return (0);
}

「printf関数の中の配列shimeiは、全要素を一度に
扱うので、添え字は不要」となっており、
これはなんとなく分かるのですが、
では、このプログラムを

#include <stdio.h>
int main(void)
{
int shimei[] = {1,9,3};
printf("%d\n",shimei);

return (0);
}

と、配列をint型に作り変え、同じように
添え字を省略して、一度に表示できるのでは?と
したのですがうまくいきません。
どうしてなんでしょうか。よろしくお願いします。
0067デフォルトの名無しさんNGNG
>>66
そんないい加減な本は使うな。
0068デフォルトの名無しさんNGNG
>>64
int main(void)
{
int i=12353,n=0;
setlocale( LC_ALL, "Japanese");
wprintf(L"ASCIIコード 10進数 16進数 の順に表示します\n");
while(i<=12447)
{
wprintf(L"%c %-3d (0x%x) ", (wchar_t)i, i, i);
i+=1;
n++;
if((n%5)==0)
{
wprintf(L"\n");
}
}
}
006968NGNG
アスキーコードでは無いな
0070デフォルトの名無しさんNGNG
>>68
setlocaleつかうんですか。
もう、初心者向けの本だけじゃダメですね。
リファレンス買わなきゃ。

LSI-C試食版じゃ動かないので、まだ確認はできませんが、
どうもありがとうございました。
0071デフォルトの名無しさんNGNG
windowsのLightCっての使ってるんですけど、
これってコマンドプロンプトでCのプログラムが実行されちゃうんですけど
不便なんで
メモ帳かどっかに実行結果が出るようになりません?
コピペできる方法でも結構です。
0072デフォルトの名無しさんNGNG
コマンドプロンプトからコピペ汁
0073デフォルトの名無しさんNGNG
>hello.exe > out.txt
0074デフォルトの名無しさんNGNG
>>68
>>69
ひらがなじゃないですよね?
0075デフォルトの名無しさんNGNG
>>74
文字コードの勉強をし直せ
0076デフォルトの名無しさんNGNG
0077デフォルトの名無しさんNGNG
>>75
ごめんなさい。勉強します。
0078デフォルトの名無しさんNGNG
コンストラクタをオブジェクト生成時以外に呼び出して
初期化をするって方法が、あったような気がしたのですが
なかったでしょうか?

検索して手持ちの本も探してみましたが見つからなくて
javaをちょっとかじってたので勘違いかもしれないのですが
0079デフォルトの名無しさんNGNG
今手元にパソコンがないので調べられないのですが、
int a;
a=5;
1/2*a;
と、
int a;
a=5;
1/2.0*a;
では計算結果は異なるのでしょうか?
0080デフォルトの名無しさんNGNG
>>79
上はint型下はdouble型
008179NGNG
>>80
ということは計算結果は、2と2.5になるという事ですね!
ありがとうございました!
0082デフォルトの名無しさんNGNG
>>79
さらにいうと

上  int型  0

下 double型 2.5

1/2=0

1/2.0=0.5
008379NGNG
ただの1/2やっただけでも、計算結果は0.5じゃなくて0になるんですね……(汗
うーむわかりにくいですねぇ(笑
0084デフォルトの名無しさんNGNG
式の評価を優先的にする括弧()の事をなんて言うんですか?
本で調べた所、演算子では無さそうなんですが。
あと、()の中は他の演算子よりも最優先に評価されるのでしょうか?
例えば、
*(pDest++)=*(pSrc++);
のような場合、どの順で評価されるのですか?
0085デフォルトの名無しさんNGNG
よくある勘違いだが () は結合順位を指定するもので評価順を変えるものじゃないぞ
0086デフォルトの名無しさんNGNG
素朴な質問を書かせていただきます…
int x;
x=5;
0.5*x;
この場合は計算結果はどのようになるのでしょうか?
0087デフォルトの名無しさんNGNG
>>86
やってみればいいじゃん。
0088デフォルトの名無しさんNGNG
>>86
手元にパソコンがないのでできないんですよ(汗
解答よろしくお願いします…
008988NGNG
>>86 ×
>>87 ○
0090デフォルトの名無しさんNGNG
keyword 算術変換
float * int → float * (float)int = float
0.5 * 5 → 0.5 * 5.0 = 2.5
009188NGNG
>>90
ありがとうございました!
0092デフォルトの名無しさんNGNG
適当な初期値を代入した整数型3行3列の行列A,Bに対して、
A+B、A-B,AB、BAを求めよ。
ただし、A、Bの初期値を変えた場合も利用できるプログラムであること。
という問題なんですが・・・
C言語始めたばかりの俺にはさっぱりです。良い例をください。
お願いします。
0093デフォルトの名無しさんNGNG
>>90
doubleだろ。
0094デフォルトの名無しさんNGNG
>>92
int a[3][3]とint b[3][3]を用意して、そいつに初期値を定義。
あとは普通に行列の計算。
0095デフォルトの名無しさんNGNG
>>92
すっとぼけた回答をするなら、
まずはHello worldからはじめて、徐々にステップアップしようよ。
マジレスするなら、
宿題スレへ逝け。

「さっぱり(わからない)」なんてキーワード使う奴は、叩かれて当然。
0096デフォルトの名無しさんNGNG
「初心者です」、「いまいち」も叩きたくなる。
(>>92に言ってるわけじゃないよ)
0097デフォルトの名無しさんNGNG
>>24さん
返事が遅くなりましたがありがとうございました。
とっても助かりました
感謝感謝です
0098デフォルトの名無しさんNGNG
86>この場合は計算結果はどのようになるのでしょうか?
計算結果は捨てられます。
0099デフォルトの名無しさんNGNG
>>85
結合性のことすっかり頭に無かったです。。。
レスありがとうございました!
0100デフォルトの名無しさんNGNG
結合性というとまた別の意味に。。。
0101デフォルトの名無しさんNGNG
質問です。
unixでCかC++で文字コードを変換(SJIS<->EUC)したいんですけど)
どうすればいいですか?
nkf使ってsystemで動かすのもナンセンスっぽいし・・・
いいライブラリとかありませんか?
0102デフォルトの名無しさんNGNG
man 3 iconv
0103デフォルトの名無しさんNGNG
>>102
あっさり解決しました。
感謝です。
0104デフォルトの名無しさんNGNG
printf("%0X",hex_value);
に相当する処理をiostreamを使ってやりたいんだけどどうしたらいいですか?
(0x0F -> 0f, 0xFF -> FFみたいに表示させたい)

std::cout << 他の出力 << 16進表示
のように使いたいんでprintfは使いたくないので…
0105デフォルトの名無しさんNGNG
>>104
int n = 0xff;
std::cout << std::hex << n;
0106デフォルトの名無しさんNGNG
以下のプログラムをbcc32でコンパイルして
コマンドプロンプトで実行したのですが、
現在の時刻 22:02:45.36
新しい時刻を入力してください :
と出てきます。なぜでしょうか?

同じソースをgccでコンパイルした場合は
きちんと実行できました。

#include <time.h>
#include <stdio.h>
int main(void)
{
time_t time1, time2;
long l;
time(&time1);
for (l=0; l<100000000; l++);
time(&time2);
printf("空ループ1億回の時間: %f秒\n", difftime(time2,time1));
return 0;
}
0107デフォルトの名無しさんNGNG
>>106
C> time /?
0108デフォルトの名無しさんNGNG
>>107さん
なにもかわりませんが・・・
0109デフォルトの名無しさんNGNG
>>108
あー、もしかしてtime.exeって名前にしてない?
0110デフォルトの名無しさんNGNG
>>109さん
そうですが・・・なにかあるんですか?
0111デフォルトの名無しさんNGNG
>>110
timeはWindows標準のコマンドなんでtimeって打ってもtime.exeは実行されない
0112デフォルトの名無しさんNGNG
>>111さんありがとうございます
time.exeからtimer.exeに名前を変えたらうまくいきました
�dくすです
0113104NGNG
>>105
それだと n = 0x0fの時に 0f ではなく f と表示されちゃうんで困ってます。
0114デフォルトの名無しさんNGNG
%02x
0115デフォルトの名無しさんNGNG
>>113
<< std::setw(2) << std::setfill('0')

とりあえず表示されるようにはなるだろうけど、たぶん罠に嵌るだろう。
0116デフォルトの名無しさんNGNG
>>113
とりあえず、マニピュレータ/処理子を使って書式を指定するってことさえ分かれば、
あとは開発環境のマニュアル読むなりC++の教科書見るなり、いくらでも調べられるやん。
当然、桁揃えを指定するマニピュレータもあるわな。
0117デフォルトの名無しさんNGNG
>>104
boost::formatとかがお勧め
0118デフォルトの名無しさんNGNG
vc .net 2003で
stlPort-4.6.2をnmake -f vc71.makでビルドするとき、
_STLP_NO_OWN_IOSTREAMSのコメントを外しているとエラーが出てビルド完了しません。
なんとかする方法ありませんか?
0119デフォルトの名無しさんNGNG
>>118
そのエラーってのが何かわからないと誰も答えようがないだろ?
0120118NGNG
エラーとは
.\dll_main.cpp(86) : error C2084: 関数 'void __cdecl _STL::__stl_throw_range_erroor(const char*)' はすでに実体を持っています。
.\dll_main.cpp(86) : error C2084: 関数 'void __cdecl _STL::__stl_throw_out_of_range_erroor(const char*)' はすでに実体を持っています。
・・・のようなものがたくさん出てきます

0121109NGNG
ちっ、指摘しただけじゃ感謝されないかw
0122デフォルトの名無しさんNGNG
同一人物だと思っていると思われ。
(かといって同一人物のとき両方にレスされると
全部漏れなワケだが...となるワケだが)
0123デフォルトの名無しさんNGNG
>>122さんのいうとおりです
同じ方だと思っていました
>>109さん>>111さんありがとうございました。
0124デフォルトの名無しさんNGNG
俺も今読んでて同一人物だと思ってた。
0125デフォルトの名無しさんNGNG
MFCで初めてプログラミングしているのですが、
超初心者的な質問をさせてください。

ダイアログベースでウインドウを作っているのですが、
もうひとつのダイアログを呼び出すにはどうしたらいいのでしょう?

それと、ボタン押下でアプリケーションを終了させるときは、
DestroyWindowでよいのでしょうか?
0126デフォルトの名無しさんNGNG
>>125
>>61-63
0127デフォルトの名無しさんNGNG
最近Cの勉強をはじめました。
本を買って、一つ一つ例題を解いているのですが、scanfの例題をやった所、
本に書いてあるようにはなりません。

#include <stdio.h>
int main(void)
{
inta;

printf("整数を入力してください\n");
scanf("%d\n",&a);
printf("%dが入力されました\n",a);
return 0;
}

にした所、整数を入力した後「○○が入力されました」が表示されません。
なにかまたキーを押すとやっと表示されます。
「scanf」でググったりもしたのですが、要領を得ません。
なぜでしょうか?ご回答いただけたらありがたいのですが。
環境はXPHome LSI-C試食版を使用しています。
0128デフォルトの名無しさんNGNG
>>127
int a;
0129デフォルトの名無しさんNGNG
>>127
インタ君
0130デフォルトの名無しさんNGNG
つーか、標準入力のバッファリングの話だろ?
0131127NGNG
>>128さん >>129さん
ソースではちゃんと int a; になってました;;

>>130さん
「標準入力 バッファリング」で検索をかけて調べた所、回答がでました!

>scanf() では、正しく入力しても最後の改行文字はバッファの中に残るため、おかしな動作になるときがあります。

とあったので、 scanf("%d",a); と改行を外したら上手く行きました!

本当にありがとうございました。
0132デフォルトの名無しさんNGNG
int32型って
printf 出力するとき
%d で良いのでしょうか?
0133デフォルトの名無しさんNGNG
>>132
VCの__int32なら正式には%I32dらしいけど、大きさが同じなんだからただの%dでいいんじゃないの。
0134デフォルトの名無しさんNGNG
main()
{
int fib[20],i; /*・・・・☆*/

fib[1] = 0; fib[2] = 1;
for (i = 3; i < 21; i++){
fib[i] = fib[i-1] + fib[i-2];
}

for (i = 1; i <21; i++){
printf("fib[%d]=%d\n", i, fib[i]);
}
}

上記☆のfib[20]がどういった効果を持つのか良く分かりません
なぜ20だけで良いのでしょうか?fib[i]と書きそうなものですがこっちだとエラーが出ました。
0135デフォルトの名無しさんNGNG
ここあたりでも
http://homepage1.nifty.com/toshio-k/prog/c/
0136デフォルトの名無しさんNGNG
あれ?
fib[20]と宣言したときの要素はfib[0]...fib[19]までだよな?
なんかあぶなっかしいな。
0137デフォルトの名無しさんNGNG
char型の配列(char str[256]とか)をstd::stringに変換するにはどうしたらいいのでしょうか?
0138デフォルトの名無しさんNGNG
string(str)
0139デフォルトの名無しさんNGNG
>>138
char str1[256]を string str2にコピーしたいとき、どうすればよいのでしょうか。
string(str)というのがstr2(str1)という意味かと思いやってみましたができませんでした。
0140139NGNG
ごめんなさい!できました。ありがとうございました。
0141デフォルトの名無しさんNGNG
ところで条件とか指定しないループ書くとき
for (;;)
って書く奴と
while (1)
って書く奴といるけど違いは何?
好みの問題?
0142デフォルトの名無しさんNGNG
>>141
うん。
0143デフォルトの名無しさんNGNG
>>142
なんだやっぱそっかー。
thx
0144デフォルトの名無しさんNGNG
while(1) だと条件式が定数なので、賢いコンパイラだと警告されることがある。
0145デフォルトの名無しさんNGNG
>>141
http://pc5.2ch.net/test/read.cgi/tech/1085806791/889-
0146デフォルトの名無しさんNGNG
>>144
それって賢いのか?(w
0147141NGNG
>>144
へーそうなんだ。レスアリガトサン。

>>145
あーあったのか

>>146
初心者がドヂったの注意してくれる点では賢い罠。
確かにそんなの警告出されちゃおせっかいっちゃおせっかいだが。
ま、for(;;)でいっか。
0148デフォルトの名無しさんNGNG
for(;;)はOKでwhile(1)はNGってなんか変な仕様ですね。
0149デフォルトの名無しさんNGNG
クラスについてよく分からんのです。
(LPSTR) CHoge::Hoge
という感じにするとHogeの文字列が戻るとして
MessageBox(NULL,CHoge::Hoge,"hoge",MB_OK);
と確認するとしっかり文字列が表示されるんですが、
もう一度
MessageBox(NULL,CHoge::Hoge,"hoge",MB_OK);
とやると、何も表示されないか全く別の文字が出てきます。

何で続けて呼び出すと文字列が出てこないんでそか。
0150デフォルトの名無しさんNGNG
>>149
>(LPSTR) CHoge::Hoge
>という感じにするとHogeの文字列が戻るとして
ここが怪しい。ソース晒せ。でないと誰にも分からん。
0151デフォルトの名無しさんNGNG
C++相談室から来ました。向こうであまり相手にされなかったので
こちらにきました。その時の質問をコピペしますが、許してください。
誰か簡単なサンプルソースを作ってもらえないでしょうか?

・ある物の状態を監視
・その状態を表示
といった単純な事がやりたいのですが、その状態を表すクラスを↓のように定義して
class Status{
public:
Status() : dat(0){};
virtual ~Status(){};
void set(int i) { dat=i; }
int is() { return(dat); }
private:
int dat;
};
メイン関数では↓のように作りました。
Status st;
// 監視側
if(ある物の状態==true){
st.set(1);
}
// 表示側
if(st.is()==1){
表示;
}
が、これだと表示側からもdat.set()が呼べてしまうので危険です。
現状ではfriendを使ってやってるのすが、すっきりしません。
こういう場合、普通は(オブジェクト指向的に?)どのように作るものなのでしょうか?
0152デフォルトの名無しさんNGNG
Statusを監視するだけのクラスを作る
そいつにStatusのポインタを持たせる

以上
0153デフォルトの名無しさんNGNG
これか。http://pc5.2ch.net/test/read.cgi/tech/1086185282/254
「あまり相手にされなかった」って、お前、レスもらっといて無視してんじゃねぇか。
0154デフォルトの名無しさんNGNG
確かにレスは頂いて、ちょっとソースを書いて貰うように再度お願いしたのですが
その後何も音沙汰なかったので。加えて周りの方の話題が私にとって
ちょっと高度なので場違いなのかと思いまして・・・
0155デフォルトの名無しさんNGNG
>>151
> 現状ではfriendを使ってやってる
とりあえずこいつをコンパイルできる状態で晒せ。
あと、どうすればお前が「すっきり」するのかも明記しる。
0156デフォルトの名無しさんNGNG
>>154
ソース書いてと言われて素直に応じる奴はここにはいないと思う。
0157デフォルトの名無しさんNGNG
そーっすね
0158デフォルトの名無しさんNGNG
>とりあえずこいつをコンパイルできる状態で晒せ。
今手元にコンパイルできる環境がないのでソースは晒せません。
申し訳ないです。要はset()関数を呼ぶクラスに対してfriend宣言してるだけです。

>あと、どうすればお前が「すっきり」するのかも明記しる。
いくつかのクラスで共有したいデータがあって、そのデータを管理するクラスを作りました。
そのクラスを使って外にデータを公開したいのですが
単純にis()とかset()とか作るだけでは、ライトを許可したくない
クラスからもライトされる可能性があるので、それを禁止するような作りにしたいのです。
friendを使いたくないのは、ライトするクラスが変わったりすると修正が必要だし
公開したくないメンバまで公開してしまうのに抵抗があり、すっきりしないのです。
0159デフォルトの名無しさんNGNG
>>158
C++ならconstで万事解決するんじゃね?
0160デフォルトの名無しさんNGNG
>>151
Status::set()をこんなふうにしてみては?

void Status::set(const ACertainClass& ある物, int i)
{
  if (ある物.状態())  // == true は嫌 (CのFAQ参照)
    dat = i;
}
0161デフォルトの名無しさんNGNG
>>151 >>158
なんかイマイチやりたいことがわからんが、
>いくつかのクラスで共有したいデータがあ
るんだったらデータを管理するクラス一個作ってほか「いくつかのクラス」とやらは継承したら?
そゆことじゃなくて?
>>159 もいいと思う

・・・っていうかやっぱ漠然としすぎてて良く分からん
もうちょっとでいいから具体的なソース晒せ
0162160NGNG
ちょっと補足。

>>160だとsetterを呼ぶのは勝手だけど「ある物の状態」がtrueじゃないと
Status::datの値は変更できなくなるでしょ?

メイン関数は
  Status st;
  // 監視側
  st.set(ある物, 1);  // set_if()って名前にした方が良かったかな
  // 表示側
  if (st.is() == 1) {
    表示;
  }
ってなります。
0163デフォルトの名無しさんNGNG
#include<stdio.h>

struct test{
char name[100];
};

int main(){
struct test i;
char buf[]={'a','b','c'};
i.name=buf;
}

test.c: 関数 `main' 内:
test.c:8: error: incompatible types in 代入

とエラーが出るのですが8行目のどこがいけないんでしょうか?
C言語です。
0164デフォルトの名無しさんNGNG
>>163 Cでは配列型の代入はできない。
0165デフォルトの名無しさんNGNG
>i.name=buf;
多分
strcpy(i.name,buf);
でしょ!?
0166デフォルトの名無しさんNGNG
>>165
char buf[] = "abc";
ならそれでもいいんだけどな。
0167165NGNG
>char buf[] = "abc";
>ならそれでもいいんだけどな。

へ?何が違うの?:(*゚Д゚)
0168デフォルトの名無しさんNGNG
'\0'忘れてるからでわ
0169デフォルトの名無しさんNGNG
>>168
本当だ!こりゃ大変だ!!
0170デフォルトの名無しさんNGNG
>>163
ネタだな。
0171デフォルトの名無しさんNGNG
クラスの継承って意味はあるんでしょうか?,
親クラスを変更したくない時、仮想関数を使うとき、MFCで作るとき、くらいしか意味のある使い方が思い付かないんですが…,
わざわざ継承しなくても、同じクラスに機能を追加すればいいんじゃないかと思うんですが、どうなんでしょう?
0172デフォルトの名無しさんNGNG
>>171
君はクラスの多様性(ポリモフィズム)を知らないの?
クラスAを継承したクラスABは、クラスAとしても使用できる。

ゲームで利用するなら
スプライトを扱うクラスSPRがあり、それを継承した2Dキャラクラを扱うクラスCHARACTER2Dと
ポリゴンで構成された3Dキャラクタを扱うクラスCHARACTER3Dの二つがあるとする。
親クラスであるクラスSPRにはDrawとMove等のメソッドが用意されている。
もうお分かりだが、継承した二つのクラスをSPRクラスとして使用すれば2Dキャラクタと3Dキャラクタの
違いを吸収してくれるため、双方ともただのスプライトとして扱える。
0173初心者NGNG
const char * から char に変換できないんでしょうか?
0174初心者NGNG
const char * から char * に変換できないんでしょうか?
0175デフォルトの名無しさんNGNG
>>174
できるけど多分君は危険な事やろうとしてるから教えない。
0176デフォルトの名無しさんNGNG
いきなりすみません;

二次元配列のメモリの確保のしかたを教えて欲しいんですが…
0177デフォルトの名無しさんNGNG
>>171
http://mikata.curiocube.com/oop/index.php
0178初心者NGNG
>>175
初心者なので、なぜ危険なのかもわかりません。
よろしくお願いします。
0179デフォルトの名無しさんNGNG
>>178
なぜconstが付いてるかよーく考えろ
0180デフォルトの名無しさんNGNG
>>175
const char*x="ABC";
char*y=x;
これだとコンパイルエラー(当たり前だが)
でも、
const char*x="ABC";
char*y=(char*)x;//キャストね。
これだとコンパイルエラーにならないし実行も出来る。
だけどむしろ、んなことする意味がない。
だってconstで宣言したってことは最初から

変 更 し た く な い か ら だ ろ !
0181デフォルトの名無しさんNGNG
↑おっと>>175っつーか>>178だった(汗
175と179はいいこと言ってる。
0182デフォルトの名無しさんNGNG
>175 まぁちょっとしたアドヴァイスだが、いぢって欲しくないんだconstにした意味
constはずしちゃうと警告とかされずにいぢれちゃうだろ?
0183初心者NGNG
調べたら初期化は出来ても代入は出来ないということみたいなんですが。
0184182NGNG
おっと>175っつーか>178だった(W
0185デフォルトの名無しさんNGNG
>>183
だから何?
0186初心者NGNG
弄れる方法はあるんですよね?
0187デフォルトの名無しさんNGNG
あるよ
0188デフォルトの名無しさんNGNG
でも弄ったら高確率でバグの元になるぞ
0189デフォルトの名無しさんNGNG
>>184
オモロイ(W
0190デフォルトの名無しさんNGNG
constなものに代入するな。
代入したくなったら、それは間違っている。
なぜなら、代入されたくないからconstなのだ。
そう肝に銘じとけ>初心者
0191初心者NGNG
わかりました。諦めます。
0192デフォルトの名無しさんNGNG
むしろ174でconst char*からchar*に変換したくなって191で諦めた初心者さんが
いったいどういうシチュエーションでそんなことをしたくなったのかが知りたい。

気まぐれでage
0193デフォルトの名無しさんNGNG
std::stringからCStringに変換するにはどうしたらいいですか?
CString⇒stringはできるのですが・・。
0194デフォルトの名無しさんNGNG
>>193
std::string ⇒ char* なら
std::string::c_str()
0195デフォルトの名無しさんNGNG
そうだね。いっかいchar*に変換すればあとは煮るなり焼くなり好きにできるね。
0196デフォルトの名無しさんNGNG
CとC++の勉強をしたいのですが…
ボーランドCとビジュアルCでは構文が違いますか?

読んだほうがいい本も教えてください。
0197デフォルトの名無しさんNGNG
>>196
コメントの書き方
VC ---> /*コメント*/ あるいは //コメント
他 ---> /*コメント*/ のみ
0198デフォルトの名無しさんNGNG
( ゚д゚)…
0199デフォルトの名無しさんNGNG
VC++6.0、WinMeにて。
ソースコードを修正中、デバッグしようとしたら
'C:\WINDOWS\SYSTEM\KERNEL32.DLL' をロードしました、合致するシンボル情報は見つかりませんでした。
例外処理 (初回) は bt_hoge.exe にあります: 0xC0000005: Access Violation。
というエラーが出ました。
ブレークポイントを挿入すると、どうやらただのforループで止まってしまっているの
ですが、何か思いつく原因はありますでしょうか。
0200デフォルトの名無しさんNGNG
>>197
bcc でも gcc でも
//コメント
書いてますが何か?
0201デフォルトの名無しさんNGNG
>>199
ソースさらしてーーーーー!!!!
0202デフォルトの名無しさんNGNG
/* C/C++のコメント */
// C++とC99のコメント

なわけだが。
0203デフォルトの名無しさんNGNG
へ〜そうなんだ。
Cしか使えない状況に陥ったこと無かったから知らなかった。
ん?ってかC99っていったい何すか?
0204デフォルトの名無しさんNGNG
>>196
金がないならフリー版の前者。
金があるなら後者。
おいらは金がないのでVC++はもってない&よくわからん。
が、知人はVC++でプログラム作ってると謎のエラーが多いと言っていた。
いやコンパイルエラーとかランタイムエラーじゃなくて、
VC++自体が固まっちゃうとか・・・。
どうもM$の製品は時に我われの期待を裏切る挙動をするらしい。
0205デフォルトの名無しさんNGNG
>>196
文法は基本的に同じ。
固有の拡張もあるが、これからはじめる奴が気にする必要は無いだろう。
0206デフォルトの名無しさんNGNG
>>203
ttp://www.google.co.jp/search?q=C99&ie=UTF-8&hl=ja&lr=
0207デフォルトの名無しさんNGNG
すいません、部活全員で悩んだんですが知識0でわからず・・・
サイト検索してもその意味がわからず・・・・。。
「VineLinux2.6r4(i386)の環境」ってかいてあったんですが、
これはCPUがインテル386ということなのでしょうか・・・
それとも全く関係ないのでしょうか・・・とつぜん申し訳ありません、
VineLinuxというの自体がわからず、とりあえずプログラミング関係の
サイトだったのでここにこさせていただきました。。
0208デフォルトの名無しさんNGNG
CPUがインテル386ということ
VineLinuxというのはOS

スレ違い
0209デフォルトの名無しさんNGNG
Cなんですが宿題をやってもらえませんか?
0210デフォルトの名無しさんNGNG
>>209
嫌です。

こっちに逝く
ぼるじょあがC/C++の宿題を片づけますYO! 24代目
ttp://pc5.2ch.net/test/read.cgi/tech/1086612317/l50
0211デフォルトの名無しさんNGNG
>>208
普通はインテル386「以降」って言うよな
>>207
とりあえずLinux板がある
0212sageNGNG
207です。。申し訳ありません。。そちらのほうへ行ってきます
0213デフォルトの名無しさんNGNG
CreateWindowExで作ったウィンドウにフォームビューダイアログを貼り付けたいんですが、
ウィンドウのwidth/heightとフォームビューリソースのwidth/heightが合いません。
どうやって合わせたら良いんでしょうか。
0214デフォルトの名無しさんNGNG
>>213
フォームビューをCreateするときnIDに AFX_IDW_PANE_FIRST を
指定するとMFCが勝手にリサイズ処理をしてくれまつ
0215151NGNG
具体的な例で話をすると
・キーボードからの入力を監視するクラス
・入力されたデータを管理/保持するクラス(インスタンスは1つとする)
・そのデータを表示するクラス
みたいな物を作りたいとします。

問題はデータを管理するクラスの設計で
setterをコールできるクラスを制限したいのですが・・・
setするクラスを別に定義するのが普通なのかなぁ。

↓晒せと言われたので一応(擬似)ソースです。長くてすんません。

#include <iostream>
using namespace std;

//----- dat.h -----
class Dat
{
public:
char is(){return(key);}
void set(char c){key=c;}
private:
char key;
};
extern Dat DAT;
0216151NGNG
//----- main.cc -----
#include "dat.h"
class Watch
{
public:
void exec()
{
char key=キーボードからの入力をみる();
if(key){
DAT.set(key);
}
}
};

class Disp
{
public:
void exec()
{
if(DAT.is()){
cout << DAT.is() << endl;
}
}
};
0217151NGNG
Dat DAT;
main()
{
Watch *w = new Watch;
Disp *d = new Disp;
while(1)
{
w->exec();
d->exec();
}
delete w;
delete d;
}
0218デフォルトの名無しさんNGNG
>>215
> extern Dat DAT;
これが元凶。こんなのあったらアクセス制御のしようが無い。
0219デフォルトの名無しさんNGNG
>>151etc.
>218の言うとおり。
そして>160で解決でしょう。
あともし継承つかうなら、
1. class Dat の中の set() を virtual にする
2. class Dat の中の key を static にする
3. class Watch と class Disp は Dat を継承
4. class Watch の中で set をオーバーロード
でどうでしょう?
要は Disp で set() を呼び出せないようにしたいと解釈したんだけど。
0220デフォルトの名無しさんNGNG
↑オーバーライドだった
0221デフォルトの名無しさんNGNG
鍵はconstのような希ガス。
0222デフォルトの名無しさんNGNG
>>214
サンクス
んでもスンマソ、現状MFC使わずにやってるんで、このまま使わずにやってみたいんですわ。
0223デフォルトの名無しさんNGNG
オーバーライダー
0224デフォルトの名無しさんNGNG
>>172
ポリモフィズム・・・。ポリモーフィズムって覚えてたよボク・・・。
なんかコンピュータ用語って「−」をryすけど、これってどうゆうこと?
>219のオーバーロードなんてオバロドじゃん。
あ、英語のスペルで書いたときrのせいで伸びちゃうやつだけryすの?
そういやコンピュータはコンピュタじゃないな。
とふと思ってぐぐってみたよ。
ポリモフィズム の検索結果 約 856 件中 1 - 10 件目 (0.20 秒)
ポリモーフィズム の検索結果 約 1,930 件中 1 - 10 件目 (0.24 秒)
ポリモーフィズムのが多いね・・・。
この辺の事情に詳しい人いますかぁ?
0225デフォルトの名無しさんNGNG
ポリモルフィズムって勢力もあるよ。

あとはこの辺
http://www2u.biglobe.ne.jp/~standard/faq/faq505.htm
0226デフォルトの名無しさんNGNG
>>225
勉強さすていただきましたー!!
0227デフォルトの名無しさんNGNG
少し長いので大分省略して書きますが、
class Base{
friend class Hoge;
protected:
virtual void Draw(引数);
};

class A:public Base{
friend class Hoge;
private:
void Draw(引数);
あといくつかの関数と変数
};

class Hoge{
public:
A a[64];
Base *base[256];
};

みたいなかんじで書いて
Hogeのなかで

base[0]=&a[0];

と、したときに
base[0]のvfptrがNULLになってしまい
Drawを呼べなくなってしまいます
解決法をご教授願います
0228デフォルトの名無しさんNGNG
>>227
Hogeのなかで

base[0]->Draw(引数);

でちゃんと呼べたけど…(gcc 3.3.1 cygwin)
他のところで間違ってるんじゃない?
0229デフォルトの名無しさんNGNG
linuxとgccを使ってプログラムを作っているのですが、プログラムの中から自分自身が置かれているディレクトリのフルパスを取る方法を教えてください。

実行する時のカレントディレクトリは実行ファイルが置かれているディレクトリではないです。

簡単なのかも知れませんが本当に困っているのでよろしくお願いします。
0230デフォルトの名無しさんNGNG
システムコールにあるのかもしれないが、
popen("type -p argv[0]","r");
こんなアプローチでどうだろう?
0231デフォルトの名無しさんNGNG
>>229
シンボリックリンクを通して実行した場合はどうするの?
やっぱりシンボリックリンクが示す本体の場所が知りたいの?
0232デフォルトの名無しさんNGNG
>>231
今のところシンボリックリンクから呼び出されることはない予定です。
0233デフォルトの名無しさんNGNG
>>232
じゃあ>>230でいいんじゃないかな。
ただしargv[0]は置き換えて。
0234デフォルトの名無しさんNGNG
>>230-233
Windowsで229とおんなじことしたい場合も同様にできるんですか?
それともAPIがあるんでしょうか?
0235デフォルトの名無しさんNGNG
みんなコンパイラ何使ってる?
0236227NGNG
>>228さんありがとうございます。
他のところも一応調べてみたのですが
どうも間違ってるようには感じられませんでした。
あいまいな聞き方かもしれませんが
vfptrがNULLになってしまう、考えられる要因を
教えていただけませんでしょうか。
後、遅れましたが環境はVC++6.0です。
0237デフォルトの名無しさんNGNG
一回、同様の現象が起こるはずのミニマムなソースを書けば?
それで起こらなかったら確実に元ソースが悪い。デバッグで追っていくか差異を調べる。
もし起こったらおそらくどっちのソースも悪い。そのソースをここに貼って指摘を待つ。
0238デフォルトの名無しさんNGNG
ターゲットが95の場合、ビルドも95じゃないとダメ?
0239227NGNG
すいません、解決しました。
クラスの初期化の方法に問題があったようです。
0240デフォルトの名無しさんNGNG
string型をchar*に変換するには何をつかえばいいんですか?
0241デフォルトの名無しさんNGNG
>>240
おそらくあなたが望んでいるのは c_str()でしょう。
もちろん入門書の類は持ってますよね。
あとは索引からc_strのページを見つけて、読んでください。
0242デフォルトの名無しさんNGNG
C言語でコンソールアプリを作っているのですが、
ディレクトリの存在を確認する方法ってありますか?
OSはXPです。system関数などでDOSのコマンド使っても
いいのですが。batファイルなんかだとif exist ....
ってのがありますが、これはsystem関数からは使えない
ようです。C言語の標準にも確認する関数はないですよねぇ?
できるんでしょうか。
0243デフォルトの名無しさんNGNG
chdir
0244242NGNG
mkdirやchdirで、在る無いにかかわらず無理やりやる
方法もあると思いますが、その場合、存在しないと
エラーでシステムからメッセージが表示されちゃうん
ですよね・・・。エラーださないで、チェックだけを
する方法ってないもんですかねぇ。
0245デフォルトの名無しさんNGNG
VC++スタンダード使っているけど、空のデフォルトコンストラクタが律儀に呼ばれてしまいます。
オプティマイザの付いているVC++Professionalだとちゃんと抑制されるんでしょうか?
その他、あまりにバカなコード生成に泣きたい思いです。
0246デフォルトの名無しさんNGNG
>>245
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/l50
最適化付Pro版が手に入る
0247デフォルトの名無しさんNGNG
>>244
漏れなら、標準にこだわらず素直にWin32 API使う。そもそもchdirも
nkdirも標準じゃないんだし。

>>245
VS2003だと、debugだと呼ばれて、releaseはきれいになくなったよ。
0248デフォルトの名無しさんNGNG
>>242
GetFileAttributesはどう?
ファイル名を指定して失敗したら-1を返す。ただし符号なしのDWORD型w

#include <windows.h>
#include <stdio.h>
int main(int argc, char **argv)
{
  if (GetFileAttributes(argv[1]) == (DWORD)-1)
    printf("ファイルはない");
  else
    printf("ファイルはある");
  return 0;
}
0249242NGNG
みなさんレスどうもです。
やはりファイルシステムは処理系依存だから標準では
どうにもならんですか。素直にAPIとか使うしかないですね。
ちなみに
system("mkdir");
system("cls");
で、もしディレクトリ既存のエラーがでても一瞬出てすぐ消せますね(w。

余談ですが、C++のBoostにfilesystemってのがあるようですが、あれだと
チェックができてなおかつ移植性があったりするんですかね・・・。
0250デフォルトの名無しさんNGNG
ディレクトリも扱えないコンパイラってどんなの?
見たことないな
0251デフォルトの名無しさんNGNG
>>242
バッチコマンド使いたかったらcmd.exe経由で動かせばsystem()からでも使えなくはないけど…
APIで事足りるならそのほうがいいと思います。
つーか、system()使うとそれだけでDOS窓開くしねぇ。
0252デフォルトの名無しさんNGNG
>>249
エラー出力のリダイレクト
http://homepage2.nifty.com/winfaq/c/hints.html#548
system("mkdir 〜 2> NUL")
でも俺のWin98では無理だった……
他には一時的に文字の色を背景色と同じ色に変更してmkdirを使うとかw
0253デフォルトの名無しさんNGNG
* MAKEDIR.C: _mkdir 関数を使用して、ディレクトリを作成後、
 * _rmdir 関数を使用して、ディレクトリを削除します。*/

#include <direct.h>
#include <stdlib.h>
#include <stdio.h>

void main( void )
{
   if( _mkdir( "\\testtmp" ) == 0 )
   {
      printf( "ディレクトリ '\\testtmp' が正常に作成されました。\n" );
      system( "dir \\testtmp" );
      if( _rmdir( "\\testtmp" ) == 0 )
         printf( "ディレクトリ '\\testtmp' が正常に削除されました。\n"  );
      else
         printf( "ディレクトリ '\\testtmp' が削除できません。\n" );
   }
   else
      printf( "ディレクトリ '\\testtmp' が作成できません。\n" );
}
0254デフォルトの名無しさんNGNG
unixのc++でスレッド書いてるんだけど
windowsのWaitForSingleObject
みたいに休止できるできるやつってありますか?
pthread_cond_waitとかはなんか違うっぽいし・・・
0255デフォルトの名無しさんNGNG
オススメはpollかなあ
0256151NGNG
レスが遅くてすいません。

>>218
確かにそうですが、まぁ例と言うことで。

>>219
>4. class Watch の中で set をオーバーロード
は 「class Dispの中で」での間違いでしょうか?
Watchの中でオーバーライドするとDAT.set()が呼べないと思うのですが・・・

>要は Disp で set() を呼び出せないようにしたいと解釈したんだけど
その通りです。
0257229NGNG
家に帰ってから>>230の中にあったシステムコールというキーワードで調べたら
http://x68000.startshop.co.jp/~68user/unix/pickup?realpath
という所が見つかって無事に目的を達成できました。

皆さんどうもありがとうございました。
0258デフォルトの名無しさんNGNG
>>257
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/realpath.3.html
↑ここには、「この関数は決して使わないこと。」なんて書かれてるな。
0259デフォルトの名無しさんNGNG
>>234
Windowsなら、GetModuleFileName(NULL,... でいける。
0260234NGNG
>>259
ありがとうございます!
実は密かにけっこう前から謎だったんで助かりました!!
0261219NGNG
>>256
>Watchの中でオーバーライドするとDAT.set()が呼べないと思うのですが・・・
えーと、いちおう Dat DAT; ていう変数自体使わない方向性で継承の手順書いて見たんだなぁ。
ちょっと言葉がたりなかったかな?(反省)
set 呼ぶときは Watch::exec() のなかで
>DAT.set(key);
の部分をただ単に
set(key);
って書く感じ。(オーバーライドしてあれば書けるでしょ?)
そうすると、set は Watch の中で「敢えて」オーバーライドしない限り使えない。
→つまり Disp の中では使えない。
っていうのが実現されるかなぁと。

もし Watch クラスの方は逆に Dat の key を読めないようにしたいなら、継承するとき private にするなり、Dat::is() を virtual にして Disp でオーバーライドするなり微調整してみては?

だいたい継承使わなくても>160+>162の方法じゃ納得いかないの?
結局アクセス制御の点では似たようなことになると思うんだけど。
0262218NGNG
>>256
> 確かにそうですが、まぁ例と言うことで。

突っ込まれて「例と言うことで」で済むようなソース晒しても意味無いだろうが。
何で「ソース晒せ」と言われたかわかってんの?
0263160 and 162NGNG
>>215-217の例だと該当部分はこうなるのかな。

//----- dat.h -----
class Dat {
public:
  char is() const { return key; }
  void set(char c) { if (c) key = c; }
private:
  char key;
};

//----- main.cc -----
#include "dat.h"
class Watch {
public:
  void exec()
  {
    char key = キーボードからの入力をみる();
    dat_.set(key);
  }
private:
  Dat dat_;
};


ちなみに>>215-217だと>>151でいう「ある物の状態」の「ある物」と
Dat::set()の引数が同じだけど本物でもそうなの?
0264263NGNG
ちょっと訂正&追加

//----- main.cc -----
#include "dat.h"
class Watch {
public:
  void exec(Dat& dat)
  {
    char key = キーボードからの入力をみる();
    dat.set(key);
  }
};
class Disp {
public:
  void exec(const Dat& dat) const { if (dat.is()) std::cout << dat.is() << std::endl; }
};

int main() {
  Watch w;
  Disp d;
  Dat dat;
  while(1) {
    w.exec(dat);
    d.exec(dat);
  }
  return 0;
}

0265デフォルトの名無しさんNGNG
VC++ .net 2003です。
switch文のラベルにマクロを使うと、
「error C2143: 構文エラー : ':' が ';' の前にありません。」
となりコンパイルが通りません。

例)
#define UM_TEST (WM_USER+1);
(中略)
switch(message)
{
case WM_COMMAND:
break;
case WM_CLOSE:
case UM_TEST: ←この行でエラー
default:
return ....
}

なお、ラベルのUM_TESTをWM_USER+1と記述すると正しく動きます。
0266デフォルトの名無しさんNGNG
>>265
ネタ?

> #define UM_TEST (WM_USER+1);
↑の末尾のセミコロンを取り除け。
0267デフォルトの名無しさんNGNG
>>266
ほ、ほんとだ・・・
寝ぼけてました。
すみません。
出直してきます。
かなり恥ずかしいですね・・・
0268デフォルトの名無しさんNGNG
glibc2ならrealpathは使っても大丈夫なんじゃない
0269151NGNG
>>261
class Watch : public Dat
class Disp : public Dat
と継承するという事ですよね?

>そうすると、set は Watch の中で「敢えて」オーバーライドしない限り使えない。
>→つまり Disp の中では使えない。
ここが意味が分からないのですが・・・
継承してるならオーバーライド「しない」状態でDat::set()が使えると思うのですが。

>Dat::is() を virtual にして Disp でオーバーライドする
同様に↑もよくわかりません。
私が何か勘違いしてるんでしょうか。

>>262
実際はDATにシングルトンパターンを使っているので
それ程大きな問題にはならないと思っています。
(#define DAT Dat::instance()とかしてる)

>>264
コンパイルできる環境がないので試せないのですが
constを付けるとDisp::exec()でdat.set()は呼べなくなるという事ですか?
0270デフォルトの名無しさんNGNG
>>269
>class Watch : public Dat
>class Disp : public Dat
>と継承するという事ですよね?
そうそう。

>継承してるならオーバーライド「しない」状態でDat::set()が使えると思うのですが。
また説明足らなかった・・・。混乱さしてスマソ。
virtual にして =0 つけないと意味無かったね。
純粋仮想関数っていうんだっけ?オーバーライドしないと使えない奴。
まあ継承ってのはちょっとした思い付きで言っただけだから、
>すっきり
は組めないかもね。

>>>264
>コンパイルできる環境がないので試せないのですが
>constを付けるとDisp::exec()でdat.set()は呼べなくなるという事ですか?
そうだよ。まー>264はキレイな回答だとおもうしこれで
>すっきり
したらいいんじゃない?ダメなら継承も考えてみるけど。
0271270NGNG
あ、今思ったけど純粋仮想関数ってオーバーライドしなきゃいけないんだったっけ。
そうすると Disp::set() も書かなきゃいけないから、定義のしかたで書き換えできないようには出来るけどかなり微妙だな・・・。
こりゃすっきりしないかもね。すっきりするにはコーディングの変更が多そうだ。やっぱ264にしといたら?
0272デフォルトの名無しさんNGNG
>>271
>あ、今思ったけど純粋仮想関数ってオーバーライドしなきゃいけないんだったっけ。
をい、んなこと当たり前じゃない毛。おまえレベル低すぎ。
0273151NGNG
>>270
>そうだよ。まー>264はキレイな回答だとおもうしこれで
これが本当ならかなりビックリです。
コンパイラがメンバ関数の中身まで見てるとは思えないのですが・・・
明日試してみます。 

>あ、今思ったけど純粋仮想関数ってオーバーライドしなきゃいけないんだったっけ。
了解です。そもそもDatをWatchに継承するのはfriendを使うより抵抗があります・・・
0274デフォルトの名無しさんNGNG
>コンパイラがメンバ関数の中身まで見てるとは思えないのですが・・・
コンパイラはメンバ関数の宣言を見ている。
char is() const ←これ
void set(char c) ←こっちは const がない
そうすると Disp::exec の引数 const Dat& のインスタンスは is を呼べても set を呼べない。
0275デフォルトの名無しさんNGNG
>>269
> 実際はDATにシングルトンパターンを使っているので

アクセス許可の観点からは、externと同レベルだと思うんだけど。
0276264NGNG
>>273
>>そうだよ。まー>264はキレイな回答だとおもうしこれで
>これが本当ならかなりビックリです。

もしかしてネタで書いたコードだと思われてたのか?
そうか、だからスルーされ続けてたのか。
0277151NGNG
>>275
それはその通りですね。

>>274
なるほど!謎が解けました。
実際やってみましたが、set()を呼ぶとエラーになりました。

>>276
無視してたわけじゃなくて、正直理解できなかったんです。申し訳ない。
ただ実際にはexec()の引数にはできないので
もうちょっと工夫してみます。
ありがとうございました。
0278デフォルトの名無しさんNGNG
以下のようなプログラムを組みました。
-20%7の出力結果を1にしたいのですが
どうやったらいいのでしょうか?

#include <stdio.h>
int main(void)
{
int t;
unsigned int s;
t = -20%7;
s = -20%7;
printf(" signed unsigned\n");
printf("-20%%7=%d -20%%7=%d\n",t ,s);
t = 20%7;
s = 20%7;
printf(" 20%%7=%d 20%%7=%d\n",t ,s);
return 0;
}
0279デフォルトの名無しさんNGNG
わりざんできますか?
0280デフォルトの名無しさんNGNG
>>279
???
なんのこっちゃ?
0281デフォルトの名無しさんNGNG
>>280
20 ÷ 7 = 2 あまり 6
0282デフォルトの名無しさんNGNG
あってんじゃん
-20/7=-2 あまり 1だけど?

マイナス20なんですけど・・・
0283デフォルトの名無しさんNGNG
余りの定義って、常に正数なの?
0284デフォルトの名無しさんNGNG
正数で割った時はそうだす
だから困ってんです。
Cでもあまりは正で出力されるとばかり思ってたから・・・
0285デフォルトの名無しさんNGNG
>>282
-20 = 7*(-3) + 1
だから -3 余り 1 じゃね?

余りは常に正と言うんなら(t+7)%7で求まると思うが。
0286デフォルトの名無しさんNGNG
すまんかった
-20=7*-3 + 1だ
-2じゃ、なかたよ
いちいちif文書くのめんどくさっておもったんだ
cの規格に何とかする方法があればそっち使いたいなーって
0287デフォルトの名無しさんNGNG
整数除算
ttp://seclan.dll.jp/c99d/c99d05.htm#dt19990607

俺の環境では、非C99の場合 -20 % 7 == 6
0288デフォルトの名無しさんNGNG
>>281-282
お前らちゃんとCの勉強してから文句言え
0289デフォルトの名無しさんNGNG
こいつらすげーあほだ・・・。
0290デフォルトの名無しさんNGNG
< おれもおまえもなああああぁぁぁぁぁ!!
<
  ∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨∨


         |:\             |:\
         |::: \           |:::: \
         |::::  ヽ          |::::::: │
         |:::::::  丶――⌒゙゙^ ̄ ̄    │
        /:::::::      _,,,,__,_,  U  , , ,,,丶
      /::::::::::::   z-/^   丶  // ̄ ̄\|
     /:::::::::::::::::: ..彡│   ● |l ‖   ● |
   /::::::::::::::::::::  人i‖      》  |      |
  {:::::::::::\\J     .\_,,,,,u= ⌒ \_,,,,,__/\
  |::::::::::::::::::)  (          ⌒        |
  |::::::::::::::::/ /∩ // ̄ ̄\,,,,,____,,,\.  |
  {:::::::::::::::    |  |\/┘┘┘┘┘┘|/| .│ .|
  |:::::::::::::::      |lllllllllllllllllllllllllllllllllllllllllllll| |    |
  |:::::::::::::::      | ⌒\⌒\llllllllllllllllllll| |    |
  {:::::::::::::::      |.    \    |lllllllllll| |   |
   |:::::::::::::::  |   |     ヽ   |lllllllll| |   |
   \::::::::::::::: │   |     │   |lllllll| |  |
    \:::::::::::::: \  |∧    │   |lllllll| |  |
    /:::::::::::::::  \ \\       \∧.  |
  /::::::::::::::    :::\ \\┐┐┐┐┐ \ \
/:::::::::::::::     ::::::::::::\  ゙゙^^¨゙゙^^¨^゙゙¨¨゙゙¨^゙) \

0291デフォルトの名無しさんNGNG
div()
0292デフォルトの名無しさんNGNG
フォームビューを複数作ってそれらを複数一緒にメインウィンドウに貼り付けるのは無謀な行為でしょうか。
ウィンドウ全体にかかるフォームAと
その一部がその他のフォームでも使用されるフォームB.
両方ともWinMainでCreateDialogすると、CreateDialogの順番によって動作が変わり、
Aが表示されてBが見えずAB両方にアクセスできる場合と、
ABともに表示されてBにアクセスできない場合とに分かれます。
(BはAやその他で使うカラーテーブルのフォームで、Bの操作でAの動作が変わるように考えてます)

自分としては、AにBがそのまま乗るような動作を期待してるんですが、どうもうまくいきません。
この場合、どうしたらいいんでしょうか。
0293デフォルトの名無しさんNGNG
>>292
スレ違い。
WinAPIスレあたりで聞いてみたら。
0294デフォルトの名無しさんNGNG
LinuxでSIGSEGVやSIGFPEなどのエラーシグナルが発生した場合に、C++の例外を送出したいのですが、どうしたらいいでしょう?
シグナルハンドラの中から例外を出してもうまくいきませんでした。。。

0295デフォルトの名無しさんNGNG
Red Hat Linux 9でプログラムをしているのですが(C言語)
cc test.c
gcc test.c
とするのではなにが違うのでしょうか?
0296109NGNG
>>295
コンパイラが違う。
0297デフォルトの名無しさんNGNG
ccはgccへのリンクだろ
0298デフォルトの名無しさんNGNG
public継承ばかり使っています。
protected/private継承の使い分けを教えてください

0299デフォルトの名無しさんNGNG
>>298
既存のクラスを実装に利用したい時に使える。
class deck : private deque<card> {...}; // デッキ(トランプの)を実装するのにdequeを利用する。
これとほぼ同じ事が、privateメンバ変数としてそのクラスの
員ん洲箪笥をを持つ事によって実現できるから、あまり使われない。
protected継承は基本的にprivate継承と同じ使い方をするが、この場合deckからさらにクラスを派生させたくて、
そこからもdequeを利用できるようにしたい時に使える。
これはdeckのprotectedメンバ変数としてdequeを持つのに似ている。
0300デフォルトの名無しさんNGNG
というか、Effective C++とMore Effective C++位読もうや>>Public/Private継承
0301デフォルトの名無しさんNGNG
CGod //1つしかインスタンスを作れないクラス
CMan //沢山のインスタンスを作れるクラス、かつ全員が同じCGodにアクセスできる
CMan a;
とやるだけでどこかにCGodが1人作られる
その後はCManが何人作られようがCGodは一人
CGodはCManを介さないとアクセスできない
CManが一人も居なくなるとCGodは勝手に消滅する
グローバルオブジェクトを使わずに、こんなことをクラスで構築可能ですか?
0302デフォルトの名無しさんNGNG
class CMan {
public:
CMan() {
if(!_godref) {
_pgod = new CGod();
}
_godref++;
}
~CMan() {
_godref--;
if(!_godref) {
delete _pgod;
}
}
private:
CGod* _pgod;
static int _godref;
};
int CMan::_godref = 0;
0303デフォルトの名無しさんNGNG
>>302
_pgod は static じゃなくていいの?
だってさー、

int main() {
CMan * saishonohito = new CMan;
CMan * tsuginohito = new CMan;
delete saishonohito;
delete tsuginohito;
return 0;
}

のとき tsuginohito のデストラクタは何を delete するんだ?
っていうか>>301の言う CGod はどうやって定義するつもり?
>1つしかインスタンスを作れないクラス
っての無茶じゃね?
0304デフォルトの名無しさんNGNG
叔母加算
0305デフォルトの名無しさんNGNG
>>304
omaemona-
0306デフォルトの名無しさんNGNG
普通にシングルトンだな。
手っ取り早くCManの中にstaticでCGod詰め込んどけ。
0307デフォルトの名無しさんNGNG
神は己の中に居る。
0308デフォルトの名無しさんNGNG
叔父減算
0309デフォルトの名無しさんNGNG
>>306
>CManが一人も居なくなるとCGodは勝手に消滅する
0310デフォルトの名無しさんNGNG
ヒトの都合で神が消滅するとはこれいかに?
0311デフォルトの名無しさんNGNG
ヒトが神を作り出すから、ヒトが消滅すれば神も消滅する。
0312デフォルトの名無しさんNGNG
ナルヘソーヽ(´ー`)ノフワーア
でも言えてるな・・・。
0313デフォルトの名無しさんNGNG
ある負の数をprintf関数で16進数や8進数として出力しようとすると、
でたらめな値が出てくるんだけれど、なぜだろう?
0314デフォルトの名無しさんNGNG
>>313 ソース見なきゃわからん。
0315デフォルトの名無しさんNGNG
>>313
%x,%X,%o、それにlやhをつけたものは符号無し整数を相手にする。要するに%uの16,8進数版。
0316294NGNG
>>294
0317デフォルトの名無しさんNGNG
>>315
負の値として出力することはできない?
0318デフォルトの名無しさんNGNG
>>317
「2の補数」で検索するといいかもしれない。
0319デフォルトの名無しさんNGNG
文字列(CSVデータ)をカンマ区切りに分解して、配列にコピーしようと考えています。
とりあえず、文字列の先頭から1文字ずつ","か"\n"をチェックして文字数分だけループさせるソースを書いたのですが、
もっと簡単な方法は無いでしょうか。

環境はVC++で、MFCは使っていません。

0320デフォルトの名無しさんNGNG
>>319
strtok()
0321デフォルトの名無しさんNGNG
>>319
boost::tokenizer使えばあっちゅーまだよ?
インストールがめんどくさいだけだが
0322デフォルトの名無しさんNGNG
ちょっとスレ違いかもしれませんが質問
Linux+Intel compilerとWinXP+VC6でコンパイルしたオブジェクトファイルを組み合わせてリンクすることは可能でしょうか?
0323デフォルトの名無しさんNGNG
対応したリンカならできるかもな
そんなのが存在するか知らんが。
0324デフォルトの名無しさんNGNG
下記のクラスの定義でエラーが出ました。何かがまずいようなのですが、何がまずいのか分からないのです。
コンストラクタで、文字列を解析するつもりです。
lpszBuffには、文字列のアドレスを受け渡してるつもりです。

class DbCardBase{
public:
DbCardBase(LPSTR lpszBuff);
};

DbCardBase::DbCardBase(LPSTR lpszBuff){
char *szBuff;
szBuff = lpszBuff;
};
0325デフォルトの名無しさんNGNG
出ないけど。
0326デフォルトの名無しさんNGNG
最近CとC++を始めました。
ポインタはなんとなく理解出来始めたのですが
文字列の扱いに未だ疑問があります。

文字列("abcde")はchar*の変数と同じような働きをしている?というような解説をどこかで見たので、
自分でも色々と試してみました。

cout << *("abcde") << endl;
この実行結果は a になりました(理解しました。)

cout << "abcde"[3] << endl;
この実行結果は d になりました(理解しました。)

cout << &("abcde") << endl;
私の理解ではこれで文字列"abcde"を指すポインタのアドレスが出ると思ったのですが
文字列がそのまま出てしまいます。
私の理解の仕方がおかしいのでしょうか?
0327デフォルトの名無しさんNGNG
>325
出ないんですか _| ̄|○
となるとエラー箇所が他なのですね。研究します。
0328デフォルトの名無しさんNGNG
CかC++でURLエンコードできるやつってないですか?
0329324NGNG
すみません、もう1つ。構造体やクラスのポインタを、
関数の引数として受け渡しするとき、受け側の型は何にすればよいのでしょうか?
0330デフォルトの名無しさんNGNG
const T&
0331デフォルトの名無しさんNGNG
>>326
ポインタが理解できているなら文字列も理解できるはず。
逆をいうと・・・(ry
0332デフォルトの名無しさんNGNG
>>326
うちの環境はアドレス出すなぁ。
0333デフォルトの名無しさんNGNG
>>332
失礼しました。
私はVC++6.0を使っているのですが、
お手数でなければ貴方の環境を教えて頂けないでしょうか?
0334デフォルトの名無しさんNGNG
>>303
> _pgod は static じゃなくていいの?
ほんとだ。すたてぃっくじゃなきゃだめです。
間違い。
0335デフォルトの名無しさんNGNG
>>333
俺も初心者なんだけどprintf使ってやってたらアドレス出た。つーかポインタに&ってどうなの?エロイ人
0336デフォルトの名無しさんNGNG
>>335
こんなのどうよ?

#include <iostream>

void f(char *buf) {
std::cout << buf << " f-1\n";
}

void f(const char (*buf)[5]) {
std::cout << *buf << " f-2\n";
}

int main() {
f("abcd");
f(&"abcd");
return 0;
}
0337デフォルトの名無しさんNGNG
クラスの内部で宣言された構造体変数はいつまで有効ですか?
たとえば

class test{
kouzoutai a;
}

int test::pointer{
return(&kouzoutai);
}

int main{
kouzoutai *a;
test test1;
a = test1.pointer;
}

はできますでしょうか?
0338デフォルトの名無しさんNGNG
>>337
クラスと同じ
0339337NGNG
>338
ありがとうございます。クラスが解放されるまでは参照可能ということでしょうか?
あと、構造体のアドレスの渡し方って、>337で大丈夫でしょうか??
0340デフォルトの名無しさんNGNG
>>339
コンパイルできないだろ?
0341デフォルトの名無しさんNGNG
char a[3][3];
で宣言して
a++;
ってしたらアドレスが3つすすんだんだけど常識?
0342デフォルトの名無しさんNGNG
>>337
そもそも、クラスメンバの非constな参照/ポインタを返すのはやめとけ。
激しく推奨されない。
0343デフォルトの名無しさんNGNG
>>342
理由は?
0344デフォルトの名無しさんNGNG
>>341 a は char[3] を1つの要素とする配列だから。
0345デフォルトの名無しさんNGNG
a++なんてできないだろ。
0346デフォルトの名無しさんNGNG
typedefで循環参照やりたいんだけど
どうやって宣言したらいいのですか?
これではおこられます・・・
先行宣言みたいなことできますか?
typedef struct
{
 int n;
 HogeHoge* pHogeHoge;
} Hoge;

typedef struct
{
 int n;
 Hoge Hoge;
} HogeHoge;
0347デフォルトの名無しさんNGNG
文字列の中の改行の個数を数えるのってどうしたらよいでしょう?
0348デフォルトの名無しさんNGNG
DOS窓上で、タイマーを作りたいのですが、その場で時・分・秒を変化させることはできないんですか?
デスクトップの向かって右の時計みたいに。
0349デフォルトの名無しさんNGNG
>>346
typedef struct
{
 int n;
 struct tag_HogeHoge* pHogeHoge;
} Hoge;

typedef struct tag_HogeHoge
{
 int n;
 Hoge Hoge;
} HogeHoge;
0350デフォルトの名無しさんNGNG
>>348
バックスペースの'\b'を出力するか、
Win32コンソールプログラムならSetConsoleCursorPosition
本当のDOSプログラムならANSIエスケープシーケンスで位置を動すとか
0351デフォルトの名無しさんNGNG
>>348
改行の代わりに'\r'を出力してみれ。
0352デフォルトの名無しさんNGNG
クラスの宣言の中で、
char abc!=(クラス名 aaa) const
となっているのは、どういう意味ですか?。
abcになにか入れる?。constは定数にするとの意味ですよね。
0353デフォルトの名無しさんNGNG
うろ覚えで書かないで、ただしく引用して来い
0354デフォルトの名無しさんNGNG
>>352
abcには'operator'が入るとしたら、演算子!=の意味を規定する関数。
class test{
int _i;
public:
test(int i) : _i(i) {}
char operator!=(const test &t){return _i != t._i ? 't': 'f';}
};

test a(0), b(1), c(0);
std::cout << a != b << a != c << b != c << '\n'; // tftと表示される。
0355デフォルトの名無しさんNGNG
すみません。ついでになんですが
ポインタでなければエラーになるみたいなんですが
実態を持つにはどうすればいいのですか?
これだと怒られちゃいます
typedef struct
{
 int n;
 struct tag_HogeHoge HogeHoge;
} Hoge;

typedef struct tag_HogeHoge
{
 int n;
 Hoge Hoge;
} HogeHoge;
0356デフォルトの名無しさんNGNG
>>355
お前は無限個のint変数を使いたいのか?
0357デフォルトの名無しさんNGNG
>>350
>>351
おお!\rでできた!
どうありがとうございました。
0358デフォルトの名無しさんNGNG
>>354
bool operator!=(const test &t) const {return _i != t._i;}
の方がいいんじゃない?
0359デフォルトの名無しさんNGNG
XP Home のDOSだと、エスケープシーケンスはうまく動作しないですね。
0360デフォルトの名無しさんNGNG
DOSじゃないもん。
0361デフォルトの名無しさんNGNG
>>360
そういえばそうでしたね。
0362デフォルトの名無しさんNGNG
>>355
不可能。
struct a; struct b;
struct a { int n; b _b; };
struct b { int n; a _a; };
これで a, bのサイズがいくつになるかよーく考えてみ。
0363へろへろ ◆Md2683u98. NGNG
教えて欲しいんですが、IRCのCHOCOAのCCAPIを使いたいのですが、
C/C++のサンプルってありますでしょうか?

VBのサンプルは配布元にあるのですが、、、

よろしくお願いします。
0364デフォルトの名無しさんNGNG
>>355
Hoge
├int n
└struct tag_HogeHoge HogeHoge;
  ├int n;
  └Hoge(また?)
    ├int n
    └struct tag_HogeHoge HogeHoge;(これもまた?)
      ├int n
      └Hoge(あれ???)
        ├ …
って具合に実態を直接持つと永遠に続いて構造体の大きさを決定できないから無理。
0365デフォルトの名無しさんNGNG
しかし、クラス(構造体)間の循環参照ってFAQだな。
0366デフォルトの名無しさんNGNG
それこそFAQだからな。
0367デフォルトの名無しさんNGNG
>>359
当然,ANSI.SYSは組み込んであるんだろうな?
0368デフォルトの名無しさんNGNG
関数内で宣言したクラスを、他の関数からも参照するにはどうしたらいいでしょうか。
0369デフォルトの名無しさんNGNG
>>368
関数外へ移動。
0370デフォルトの名無しさんNGNG
>369
移動というと、宣言してる行を動かせば良いのでしょうか??
0371デフォルトの名無しさんNGNG
>>370=368
他の関数からも使いたいなら関数外で宣言しろって事だ。
スコープを考えろ。
0372デフォルトの名無しさんNGNG
超初心者です。
素数を求めていくプログラムを作ったのですが、
素数じゃない数も吐き出してしまいます。
何が悪いのかわからないので教えてください。

#include <stdio.h>
main()
{
int s,a,b,c;
printf("何個まで求めますか?\n");
scanf("%d",&c);
s=1;a=1;b=0;
while(1){

if(b==c){break;}
else if(s==a){printf("%d・",s);
++s;a=2;++b;}
else if(s%a==0){
++s;}
else if(s%a!=0){
++a;}}
printf("\n\n何か入力すると終了します");
scanf("%d",&c);
return 0;
}
0373デフォルトの名無しさんNGNG
14行を書き換え
++s;} → ++s; a=2;}
0374372NGNG
>>373
なるほど、初期値に戻すのを忘れてたんですね。
ありがとうございました。
0375デフォルトの名無しさんNGNG
CとかC+で関数のことをメソッドって呼んでいる人がいますけど、
メソッドというのは正式な呼び方なんですか?
0376デフォルトの名無しさんNGNG
正式な呼び方って決まってるの?
0377デフォルトの名無しさんNGNG
メソッドとは言わない。
メソッドを使うのはVBあがりとかだろう。
0378デフォルトの名無しさんNGNG
複数のファイルのドロップソースになりたいのですが、
フルパスのITEMIDLISTから、デスクトップのIShellFolderを使い
GetUIObjectOfをすればいいんですか?
それとも、やっぱりIDataObjectを実装しないとならないのでしょうか?
0379デフォルトの名無しさんNGNG
失礼しました、誤爆です。
0380デフォルトの名無しさんNGNG
複数のファイルのドロップソースになりたいのですが、
フルパスのITEMIDLISTから、デスクトップのIShellFolderを使い
GetUIObjectOfをすればいいんですか?
それとも、やっぱりIDataObjectを実装しないとならないのでしょうか?
0381378=379=380NGNG
、、、
ホントごめんなさい。なんでこんなやっちゃうんだろorz
0382デフォルトの名無しさんNGNG
>>378-381
ドンマイ
0383デフォルトの名無しさんNGNG
今までCOBOLをやってたのですが、この度Cを始めました。
そこで、構造体・クラス・ポインタ・引数というような壁にぶつかりました。
本当に基礎的な部分は入門書のような本を読んだのですが、
ちょっと難しい使い方されてるようなものになるとさっぱりです。
クラスについてはさっぱりで、ポインタ・引数は無駄なくできているのか分かりません。
初心者でもある程度できるような、良い勉強法等合ったら教えてください。
0384デフォルトの名無しさんNGNG
CUIばっかりじゃつまらんのでWindowsプログラミングってのをちょっと見てみた

訳分からん型いっぱい・・・
0385デフォルトの名無しさんNGNG
>>383
俺はポインタは絵に描いて覚えた
大き目の紙をメモリ領域だと想定して
線引いたりしてポインタの働きを視覚的に学んでみた
0386デフォルトの名無しさんNGNG
>>385
絵に描いて、ですか。
確かに、分からない時には良さそうですね、ありがとうございます。

しかし、構造体の中に構造体へのポインタをいれるような
リンクリスト(うろ覚え)のようなものになると、イメージも曖昧に…
0387デフォルトの名無しさんNGNG
>>386
その程度のことをイメージできないようじゃこの先つらいぞ。
0388デフォルトの名無しさんNGNG
>>386
データ構造も絵に描いて覚えましたが何か?


ポインタは頭の中でだけで考えるとまとまりつかない(少なくとも俺は)んで
エクセルの図表使ったりもした
他人には見せられない幼稚な学習法だけどなー

俺の友達なんかは本屋でポインタの解説本、
フィーリングがあったのにぶつかるまで片っ端から立ち読みしてたけど

俺はかなりパーなんでこんなことしながら覚えたけど他の人はもっと上手くやってると思う。
0389デフォルトの名無しさんNGNG
>>383
>クラスについてはさっぱりで

Cにクラスはない
クラスがあるのはC++
0390385NGNG
>>387-388
かなり危機的な状態っぽいですが、
絵に描くなりして、分かるまで色々やってみます。
意見ありがとうございます。
0391383=385NGNG
>>389
一応Cから入って、C++もやるつもりだったので…
説明不足でした、すいません。
0392デフォルトの名無しさんNGNG
>>377
メソッドはオブジェクト指向の用語だよ。
だからC++のメンバ関数のことを普通にメソッドという。
0393デフォルトの名無しさんNGNG
馬鹿だね。
C++のスペックではメソッドなんて言い方は使っていないよ。
だからC++では「関数」が正しい言い方。
0394デフォルトの名無しさんNGNG
だからオブジェクト指向の用語って言ってるやん。
C++におけるメンバ関数はオブジェクト指向言語一般の用語では
メソッドにあたるってこと。
0395デフォルトの名無しさんNGNG
ttp://www.itmedia.co.jp/dict/programming/object/03629.html
0396デフォルトの名無しさんNGNG
>>383
猫でものサンプルとかいろいろいじると感覚つかめるよ。
ちなみに漏れもCOBOLやってたけど
いまだに判定の比較間違うときあるよ・・
COBOLとCの判定は逆だからきをつけな。
0397デフォルトの名無しさんNGNG
多角形の内外判定のCのプログラムサンプルありませんかぁ?
理論はわかるんですが、プログラムが;;

線分の交差判定でやるやつです。
0398デフォルトの名無しさんNGNG
>>397

理論がわかるなら、
その理論を紙などに日本語で書いて、
それを C のプログラムに翻訳するだけだろ?
0399デフォルトの名無しさんNGNG
>>397
ここは言語のスレなんで、実装する上で言語上の疑問点が出てきたら
ここで聞いても良いが、宿題丸投げなら宿題スレに逝け。

つか、ちょこっとググっただけで参考になりそうなサイトがいくつか出てきたぞ。
0400デフォルトの名無しさんNGNG
コンストラクタから呼び出しちゃいけないメンバ関数は、
自身のクラスの仮想関数だけだったっけ?
親クラスのは呼び出してもいいんだよな
0401デフォルトの名無しさんNGNG
プログラムを起動すると、システムに常駐して
どこかでファイルがクローズされると、その旨をメッセージで表示するような
ものをC言語で作りたいのですが、難しいでしょうか。
環境はRed Hat Linux9 + gcc-3.2.2です。
相当難しいようならば、もうちょっとLinuxの知識をつけてから作りたいと思います。
0402デフォルトの名無しさんNGNG
Cだけじゃむり
0403デフォルトの名無しさんNGNG
つーか、「もうちょっと」じゃ絶対無理。
0404デフォルトの名無しさんNGNG
closeシステムコールの中に書き込む。
0405デフォルトの名無しさんNGNG
>>401
まずviおぼえれ
0406デフォルトの名無しさんNGNG
>>400
そんなルールは無い。
0407デフォルトの名無しさんNGNG
>>406
コンストラクタが完走するまでvtblの構築って終了しないんじゃなかったっけ?
ctor
vtbl-make
vtbl-dele
dtor
って順番なのかなーと
0408デフォルトの名無しさんNGNG
あるクラスのコンストラクタが実行されるときには、そのクラスの基底クラスの構築は完了している。
0409デフォルトの名無しさんNGNG
×そのクラスの基底クラスの
○そのクラスの

0410デフォルトの名無しさんNGNG
>>407
基底クラスの初期化リストの後なら問題なく呼び出せる。
ただしコンストラクタ自身のクラスよりも派生したクラスでオーバーライドされたものは呼ばれない。
0411デフォルトの名無しさんNGNG
カスタムアロケータってのを書いてみたいのですが
allocator::allocateは以下のように書けばいいのでしょうか?

pointer allocate(size_type n, const void *hint)
{pointer p = malloc(sizeof(T) * n);
for (size_type i = 0; i < n; i++)
new(p+i) T;
return p;
}

MSDNを見たところ、operator new(n)を呼び出せとあるので
コンストラクタの実行はしなくてもいいのかなって思ったりもしてるんですが。
0412デフォルトの名無しさんNGNG
>>411
コンストラクタの実行はしちゃいけない。
0413デフォルトの名無しさんNGNG
>>412
そうみたいですね、ありがとうございました。

しかし、コンパイルが通らないのでどこが悪いか分からずサンプルを検索して
http://www.josuttis.com/cppcode/allocator.html
このサイトに行き当たったのですが、
どなたかVC6+STLPortでこのサンプルコンパイルできているひと居ませんか?

自作のアロケータでも、ここのでも同じエラーがでてるので、
VC6じゃカスタムアロケータ対応できないのかなとは思っているのですが。
0414デフォルトの名無しさんNGNG
書き忘れました、コピーコンストラクタはもちろん修正して、です。

C:\Program Files\Microsoft Visual Studio\VC98\Include\stlport\stl/_alloc.h(503) : error C2784: 'class _STL::allocator<_T
p2> &__cdecl _STL::__stl_alloc_rebind(class _STL::allocator<_Tp1> &,const _Tp2 *)' : 'class _STL::allocator<_Tp> & 用のテ
ンプレート引数を 'class MyLib::MyAlloc<int>' から減少できませんでした。
C:\Program Files\Microsoft Visual Studio\VC98\Include\stlport\stl/_alloc.h(502): クラス テンプレートのメンバ関数 'int *__t
hiscall _STL::_STLP_alloc_proxy<int *,int,class MyLib::MyAlloc<int> >::allocate(unsigned int)' のコンパイル中
C:\Program Files\Microsoft Visual Studio\VC98\Include\stlport\stl/_alloc.h(503) : error C2228: '.allocate' : 左側がクラス、
構造体、共用体ではありません。
C:\Program Files\Microsoft Visual Studio\VC98\Include\stlport\stl/_alloc.h(502): クラス テンプレートのメンバ関数 'int *__t
hiscall _STL::_STLP_alloc_proxy<int *,int,class MyLib::MyAlloc<int> >::allocate(unsigned int)' のコンパイル中

こういうエラーがてるんです。
0415デフォルトの名無しさんNGNG
この度RedHat7.3(�@)からRedHat9(�A)へ移行したのですが、
�@で問題なく動作していたCGIが�Aの環境で一部動作しなくなりました。

//環境
�@RedHat7.3
gcc-2.96-113
apache-1.3.27-2

�ARedHat9
gcc-3.2-2-5
httpd-2.0.40-21.9

原因を調べていくとどうも日付計算部分がエラーを起こしているようです。
一般的な日付計算ですが何が問題なのか検討もつきません。
(ググッたのですが・・わかりませんでした。。gccが原因??)
どなたか教えていただけないでしょうか?よろしくお願いいたします!!

/*-----ソース一部抜粋------*/
#include <stdio.h>
#include <time.h>

struct tm*ptr;
time_tlt;
intNowYY, NowMM, NowDD;

lt = time(NULL);
ptr = localtime(<);
NowYY = ptr->tm_year + 1900;
NowMM =ptr->tm_mon + 1;
NowDD = ptr->tm_mday;

/*----------------------*/
0416デフォルトの名無しさんNGNG
Visual C++ で DLL を作成しています.
MFC は使っていません.

元は C プログラマではないのに,C で DLL を作っているので
頓珍漢な事を聞いているのかもしれませんが,お願いします.

やりたい事は,ある関数のコールバックを待つ,という事なのですが
どのように待てばいいのかがわかりません.
コールバック関数は,

//set end callback
DLL_SetEndCallback(stream, endcallback, 0);
DLL_Stream_Play(stream);
// ここで待ちたい
// コールバックが発生したら,
// 終了処理にいきたい.

といった感じになるのですが,

ここで endcallback を待つために,どのように待たせればいいのかが
わからないのです.


何かヒントでもいいので頂けないでしょうか?
0417デフォルトの名無しさんNGNG
>>415
デバッガ使えばわかるだろ
0418デフォルトの名無しさんNGNG
>>415
最低限、コンパイルが通るソース貼れや
0419デフォルトの名無しさんNGNG
>>418
通らないか?
まぁ、<がhtmlで不等号に化けてるからそのままコピペしたら通らないが。
0420デフォルトの名無しさんNGNG
>>419も化けてますねw
0421デフォルトの名無しさんNGNG
何かと思ったら、&lt という変数のアドレスだったのか。
0422デフォルトの名無しさんNGNG
スレ違いだったらスマソ
g++でコンパイルしてarでまとめた静的ライブラリが複数あるんだけど
これを1つの静的ライブラリにまとめるにはどうやったらいい?
0423デフォルトの名無しさんNGNG
>>422
arで展開して、纏めなおし。
やり方はman arしろ。
#tarに似ていると言えば見当つくかな?
0424デフォルトの名無しさんNGNG
>>423
展開してからやらなきゃ駄目なのかぁ。
やってみます。ありがとう。
0425415NGNG
>>421
そうなんです。そのまま貼り付けたら文字が変換されてました。
ソース全部は長いのでおかしな部分(ここをはずすと正常にCGIが動きます)
のみ貼り付けました。
コンパイルはエラー無く通るのでTime関数のバグかな?と思ったんですが。。
apacheのバージョンが原因なのか、gccのバージョンが原因なのか検討つきません。
0426デフォルトの名無しさんNGNG
>>416
何を待ちたいのか書け 
0427デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=102

にソースを貼りました。

コメント部分が正しいかどうかの判定をお願いします。

それと、いくつかわからないところがあります。

struct tm *tm_now;
は何のために宣言?

now = time(NULL);
は以下のどっちが正しいのですか?
/* 現在時刻を取得 */
/*秒数形式の時刻*/

tm_now = localtime(&now);
は以下のどっちが正しいのですか?
/*now を構造体 tm型の変数に変換する*/
/*時刻形式へ*/
0428デフォルトの名無しさんNGNG
>>427
> struct tm *tm_now;
> は何のために宣言?

tm_now = localtime(&now);
この関数で使ってるじゃん

now = time(NULL);
/*万国標準時(UCT)の1970年1月1日の00:00:00からの経過時間(秒単位)*/

tm_now = localtime(&now);
/*環境変数TZにより現地時刻に変換(UTC秒→tm型構造体)*/
0429デフォルトの名無しさんNGNG
>>428
ありがとうございます。

>tm_now = localtime(&now);
>この関数で使ってるじゃん

そうでした。暑さのせいでおかしくなってます・・・



tm_now = localtime(&now);
は
time関数が返す形式の時刻が代入されたnowから、値を読み出し、
ローカルの時間に変換する。

で良いんですよね?
0430デフォルトの名無しさんNGNG
環境依存なのか何なのかまったくわからないのですが
windows2000 bccの環境で
-----------------------------
#include <stdio.h>
main(){
int a[100000], i, j, jmax,n;
n = 100000;
for (i = 2; i < n; i++)
printf("%6d", i);
}
}
---------------------------
として実行すると問題なく動くにも関わらず
a[500000] と宣言すると何も出てきません
配列に何か制限でもあるのでしょうか?
(65535とかならなんとなく納得できたのですが・・・)
0431デフォルトの名無しさんNGNG
スタックが足りてないだけじゃないの?
0432430NGNG
最後の}が余計でした。
printf("%6d", i);
}
---------------------------
で実行した場合です
0433デフォルトの名無しさんNGNG
ファイルにデータをバイナリーとして書き込むにはどうすれば良いでしょうか?

ofstraam outClientFile ( "MyFile.dat", io::****);
while ( cin >> Mydata ) { outClientFile << Mydata; }

見たいな感じで出きるんでしょうか? よろしくお願いします。
0434デフォルトの名無しさんNGNG
>>430
オプションに-lS:200000をたしてみたらどう?
数値はsizeof(一番でかい変数)を16進法にしたもの+αぐらいに
0435デフォルトの名無しさんNGNG
>>429
に加えて、

tm_now->tm_year+1900
の部分について
現地時間をtm構造体に定義されている各要素に参照渡ししている
というのはわかるのですが、なぜ値(2004)が得られるのかがわかりません。
tm_yearはただの変数ですよね?
0436デフォルトの名無しさんNGNG
>>435
localtimeがtm_nowのメンバをnowを元にセットしているんだ。
そのnowにはtime(NULL);のところで現在の日付・時刻が入っている。
localtimeはtm_yearには1900年からの経過年数を入れるようになっていて、
今は2004年だから104が入ることになる。
だからtm_now->tm_year+1900で2004が得られる。
0437デフォルトの名無しさんNGNG
>>436
nowが日本時間であったら、localtimeは日本時間をセットするってことですよね?
0438デフォルトの名無しさんNGNG
>>437
>>428を声に出して10回読むべし
0439デフォルトの名無しさんNGNG
>>427
で、時刻を表示するところについての質問です。

for(;;){
if(kbhit()){
break;
}

now = time(NULL);

if(prev == now) /* */
continue; /* */
prev = now; /* */

tm_now = localtime(&now);
printf("現在の時刻は %2d時%2d分%2d秒\r", tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);


/* */の3行部分が無くても表示できるのですが、カーソルの動きがちょっとおかしくなります。
この部分は、prev(初期値-1)とnowが同じならば、prev = now;を実行しないという命令ですよね?
この部分が無いことで、なぜカーソルの動きがおかしくなるのかがわかりません。
0440デフォルトの名無しさんNGNG
>>439
continueの意味を理解してる?
その3行をコメントアウトすると、ループが回るたびにprintfを実行するようになる。
カーソルが常に移動してるから、ちらついて見える。
0441デフォルトの名無しさんNGNG
>>440
直下の処理のみをスキップするのではなく、
continue以降の処理全てをスキップするんですね。
やっとわかりました。
0442何度も質問してすいません。NGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=106

>>427
のコメント抜きです。

staticを使うのはなぜでしょうか?
0443デフォルトの名無しさんNGNG
なくても特に動作は変わらないような……。
0444デフォルトの名無しさんNGNG
>>442
初期化が最初お一回しか行われないからだろ。
0445デフォルトの名無しさんNGNG
>>444
×最初お一回
○最初の一回
0446デフォルトの名無しさんNGNG
>>442
static const char * const week[] = { /* ... */ };
にしておきたいところだね。
で、staticにしないとmain()の実行時に無駄なコピー作業が発生する。
0447デフォルトの名無しさんNGNG
>>428から>>446で質問に答えてくださった皆さん。
どうもありがとうございました。
とりあえず、一段落つけます。
まだ疑問が残ってますが、そちらは自分で考えてみます。

0448デフォルトの名無しさんNGNG
>無駄なコピー

気にするな(w
0449デフォルトの名無しさんNGNG
>>446
何回も呼ばれる関数ならまだしも、mainなら別に問題はないような。
0450デフォルトの名無しさんNGNG
>>448
これはたまたまmainだからだろ。
質問への回答は446で良いし、448は単なる厨発言じゃねぇかよ。
0451デフォルトの名無しさんNGNG
>>442はmainなのになぜ?という意味で聞いているのでは。
0452デフォルトの名無しさんNGNG
>>451
そうかもしれないが、「mainなのに」とは一言も書いてない。
おまえはなぜそう思ったんだ?
0453デフォルトの名無しさんNGNG
コンソールアプリケーションからやれと言われて、やってる漏れは手遅れか?
0454デフォルトの名無しさんNGNG
別に。
0455デフォルトの名無しさんNGNG
すみません。
gcc3.4とgprof-2.15(binutils-2.15)を入れて、実行ファイルのプロファイルを
取ろうとしました。gcc hoge.c -pgとしてa.outを実行すると、
gmon.outが生成されました。もちろんexit()で抜けています。

そこで、gprofを実行すると、
gprof: gmon.out file is missing call-graph data
といって刎ねられます。何が不味いのでしょうか。gccあるいは
binutilsをインストールする時に、なにか特別なライブラリとかを
configureしておかなければならないのでしょうか?
0456455NGNG
あ、libc_p.aとかとリンクしないとだめっぽいですか?
glibcを入れようとして構築できなかった気が。
すくなくともgcc-2.95とか使ってたときはgprofは使えてました。
0457デフォルトの名無しさんNGNG
>>455
これは違う?
http://sources.redhat.com/binutils/docs-2.15/gprof/Compiling.html
0458デフォルトの名無しさんNGNG
出力した文字列を一行だけ消す方法はありますか?
C++です
0459デフォルトの名無しさんNGNG
出した=画面に表示した なら、ない。
\rとスペースとか、^Hを出力した文字数分とか出力すると
消えたように「見える」端末もあるかもしれないけど、
根本的に出したものは消せない。
0460デフォルトの名無しさんNGNG
>>459
できないのですか・・・
コンソールアプリで作るのは諦めるべきですか?
0461デフォルトの名無しさんNGNG
なにをだよ
0462デフォルトの名無しさんNGNG
>>461
タイマー(´・ω・`)
0463デフォルトの名無しさんNGNG
ttp://www.kumei.ne.jp/c_lang/intro/no_26.htm
こんなの?
0464デフォルトの名無しさんNGNG
boost:progress_displayのソースでも見たら?
0465デフォルトの名無しさんNGNG
>>463
おお!それだ!と思ったらちゃんとうごかない
printf("\x1b[12;10H");
cout << "\x1b[12;10H";
どっちも同じ
\x1bは┘みたいなのになって
その先が普通に表示されます
0466デフォルトの名無しさんNGNG
>>465
Windows2000以降はANSIエスケープシーケンスは働きません。
boost:progress_displayのソースのようにやりましょう。
0467デフォルトの名無しさんNGNG
>>466
なんですか?それ
0468デフォルトの名無しさんNGNG
boost::progress_displayは戻ってないよ。
0469458NGNG
boost::progress_displayはわかったのですがよくわかりませんでした
>>468
*を追加していってるだけってことですか?
0470デフォルトの名無しさんNGNG
そうだよ
0471デフォルトの名無しさんNGNG
以下のようなプログラムを組みました
コンパイルはできるのですが実行すると

Segmentation fault (Core dumped)

と出てしまいます。なぜなんでしょうか?

#include <stdio.h>
#include <gmp.h>

int main(void)
{
unsigned int i;
mpz_t array[10];
mpz_init(array[10]);
for(i=0;i<=9;i++){
mpz_set_ui(array[i], 10);
}
for(i=0;i<=9;i++){
mpz_out_str(stdout, 10, array[i]);
putchar('\n');
}
mpz_clear(array[10]);
return 0;
}
0472デフォルトの名無しさんNGNG
>>471
for(i=0;i<=9;i++){
mpz_init(array[i]);
}


for(i=0;i<=9;i++){
mpz_clear(array[i]);
}
0473デフォルトの名無しさんNGNG
>>472さん
ありがとうございます
無事に実行できました

gmpで配列を使う時は要素一つ一つについて
初期化・クリアーをしてやらないといけなかったんですね。
勉強になりました。
0474デフォルトの名無しさんNGNG
>473
そもそも定義、宣言でない array[配列の数] が明らかにあり得ないと気づけ。
0475デフォルトの名無しさんNGNG
gmpの説明の16ページ目に
mpz_t sum;
struct foo { mpz_t x, y; };
mpz_t vec[20];

という記述があったので大丈夫かと思いました

mpz_array_init (mpz t integer_array[], size t array_size,
mp size t fixed_num_bits)

これを使うとは思うのですが使い方がわからなかったので
何とか他の方法でできないかと思っていました。
0476デフォルトの名無しさんNGNG
>>474氏が言ってるのは
>mpz_t array[10];
>mpz_init(array[10]);
           ~↑~
         これのことでは?

0477デフォルトの名無しさんNGNG
あの、
class A
{
static long ID;
public:
・・・
};

 やった事がなかったもんで、試しにstaticのメンバー変数
作ってみたんですけど、コンパイルエラーになります。
どう使うんですか。
というか使えないんですか?
 入門書調べたけど載っていないもんですから。
0478デフォルトの名無しさんNGNG
まちがえてageてしまった・・・。
スマソ。
0479デフォルトの名無しさんNGNG
静的メンバ
http://black.sakura.ne.jp/~third/programming/cpp/cpp41.html
0480デフォルトの名無しさんNGNG
>>474さん>>476さん

最初に
mpz_t array[10]:
と宣言しましたから

mpz_init(array[10]);
で、arrayの要素がすべて初期化されると思ったんです。

>>そもそも定義、宣言でない array[配列の数] が明らかにあり得ないと気づけ

mpz_init(array[10])で
array[10]を初期化しようとしたわけではないです。

初期化・クリアーをするにはforをつかって一個一個してやるしかないんですか?

0481デフォルトの名無しさんNGNG
>>475の
>mpz_array_init (mpz t integer_array[], size t array_size, mp size t fixed_num_bits)
見れば gmpとやらを知らない俺でも

mpz_array_init(array, 10, 初期値);
って使うのかなという想像は出来るわけだが
0482デフォルトの名無しさんNGNG
>>480を読んで自分の頭が凝り固まってることを思い知った。
0483デフォルトの名無しさんNGNG
>>497
ありが�d
あれ?478でsageて
入れたはずなのに
ageてる?
0484デフォルトの名無しさんNGNG
そろそろ>>480氏には
「入門書きっちり読んでから出直して来い」
って言っていいかな?
0485デフォルトの名無しさんNGNG
>>484
「Cの入門書」って言わないとgmp周りを漁りそうな希ガス
0486デフォルトの名無しさんNGNG
今日その「Cの入門書」を探して紀伊国屋に行って来たんですが、参考書大杉で
どれが良いのかワカリマセンでした。 
幾つか見た感じだとこれ↓がヨサゲだったんですけど、どうですか?

http://page5.auctions.yahoo.co.jp/jp/auction/e38806429
0487デフォルトの名無しさんNGNG
C というかプログラム自体最近学び始めたんですけど
今読んでる入門書のサンプルプログラムにはprintf()という関数が頻繁に出てきます
どうやらこれはstdio.hとかいうファイルかその先にソースがあるようですけど
それには画面の右から何ドット目上から何ドット目*nを光らせて文字のようなものを
画面に表示させるとかいう根本的なコードが書かれてるんでしょうか
それとも画面に文字を表示させるというのはコンパイラに標準で備わった機能なのか
OSに標準で備わった機能なのかどうなんでしょう

それと似たような疑問ですが
コマンドプロントで動作するプログラムと
ウィンドウやダイアログにhello worldと表示させるプログラムとでは
根本的な違いというものはあるんでしょうか

ウィンドウやダイアログを表示するプログラムは
コマンドプロントで動作するプログラムを滅茶苦茶複雑にしたもの
と考えていいんでしょうか
それともコンパイラにはこれはコマンドプロント用 これはウィンドウ・ダイアログ用のソフト
と指示を与えてコンパイラはそれぞれ区別してコンパイルしているんでしょうか

初心者が知る必要のないことかも知れませんが
疑問に思い始めるとポインタの基本の章にも身が入りません
誰か教えてください
0488デフォルトの名無しさんNGNG
>>487
printfなどであれば、OSにホゲホゲという文字を出力してくれ、という風な事となる
その先は画面かプリンタかファイルかはどうでもいい事なので、OSまかせ。
ウインドウのプログラムのほうは、違ってるかもしれないし、同じかもしれない。
どのOSか等でしぼると答えやすいんだが。
0489デフォルトの名無しさんNGNG
>>488
ウィンドウズを使ってるのでウィンドウズの場合というこになります
OSによって違うのならそれも知りたいような気もしますが

>printfなどであれば、OSにホゲホゲという文字を出力してくれ、という風な事となる
>その先は画面かプリンタかファイルかはどうでもいい事なので、OSまかせ。

それはC言語に OSにホゲホゲという文字を出力してくれ という命令が関数としてではなく
コマンド?として存在しているということですか?
0490デフォルトの名無しさんNGNG
printfを例にすると、
まず、Cの規格で、printf関数は標準出力に文字列を出力する機能を持つことになっている。
なので、printf関数を書く人間は、その機能を満たすようにプログラミングするわけだが、
具体的にどのようにすれば出力できるか、というのは、OSやコンピュータによって千差万別なので、
その具体的な方法までは決められていない。

printf関数を書く人間は、そのコンパイラが動作する環境でprintfの仕様を満たす方法を調査し、
その方法をもとに関数を書く。

具体的に、文字を表示するのにOSの機能を利用するのかハードウェアを直接操作するのかは環境次第。
Windowsの場合、Windowsがそういった機能を持つシステムの関数を持っているので、
それを利用しているだろう。
0491デフォルトの名無しさんNGNG
>>489
文字だけなら
ttp://kasai86.ld.infoseek.co.jp/asm/asm2.htm
を見てごらん。ふいんき(<なぜか変換できない)は味わえるよ
0492デフォルトの名無しさんNGNG
>>490
ダウト。
0493デフォルトの名無しさんNGNG
「ふいんき」
不陰気、腑陰気、婦陰気
0494デフォルトの名無しさんNGNG
>>492
ダウト
0495デフォルトの名無しさんNGNG
printf()は仕様通りに動けば中身は問われないというのは分かりますが
OSのシステムの関数を使ったりハードウェアを直接操作したりするというのであれば
例えばウィンドウズではシステムの関数を使うということですが
ならハードウェアと直接操作することは出来ないのかそれともしないだけなのか

あーなんだろ その
printf()を書く人はC言語の仕様通りになるようにC言語で書くということになるわけで
えーハードウェアを直接操作するという機能は
C言語の仕様外の機能で
ということはC言語じゃないということないなるのかならないのか
頭が混乱してきましたね

今日は休んで疑問を整理します
0496デフォルトの名無しさんNGNG
>>495
>えーハードウェアを直接操作するという機能は
>C言語の仕様外の機能で

インラインアセンブラ
0497デフォルトの名無しさんNGNG
あほか
0498デフォルトの名無しさんNGNG
>>495
なんのためにOSがあるんだ?
OSの存在意義を考えろ
0499デフォルトの名無しさんNGNG
総資産を数兆円にするため
0500デフォルトの名無しさんNGNG
>>495
あとOSをどういう言語で書いたかも考えろ
0501デフォルトの名無しさんNGNG
> なんのためにOSがあるんだ?
> OSの存在意義を考えろ
綱引きする時に使う
0502デフォルトの名無しさんNGNG
今日Visual C++.netを買ってきたんですがうまくいきません
。一緒に入ってる入門書の
コードを入力してビルドするまではできてるんですが、デバッグしても
ウィンドウになにも表示されないんです。
シンボルが読み込まれていませんとでてるんですがどうゆうことなんでしょうか?
超初心者ですいません。
0503デフォルトの名無しさんNGNG
>>502
どういう質問なの?
デバッグが死体の?
ブレークポイント張った?
デバッグ実行した?
0504デフォルトの名無しさんNGNG
>501
掛け声は「そいや、そいや」でしたが?
0505デフォルトの名無しさんNGNG
>>504
ありがと。>>501の意味がやっとわかったw
0506デフォルトの名無しさんNGNG
同じclassでコンストラクタが複数あるばあい基本以外のコンストラクタにはvirtualを付けたほうがいいのでしょうか?
0507デフォルトの名無しさんNGNG
コンストラクタはvirtual宣言できまへん。
(デストラクタはできますが)
なぜならコンストラクトする時点で型が確定しているから。
(deleteは基底クラスのポインタ経由でできるからデストラクタ
はvirtual宣言できるが、new時には new CBase、new CDerived
と型を明示するからあいまいになりようがない)
0508デフォルトの名無しさんNGNG
>>507
お答えありがとうございます

class aaa{
public:
  aaa();
  virtual aaa(int bbb);
};
この場合もvirtualは必要ないということですよね?
0509デフォルトの名無しさんNGNG
>>508
いらないYO!
コンストラクタは特殊な関数なので、派生クラス
のインスタンスを初期化するとき、C++は
基底クラスのコンストラクタ→派生クラスのそれ
と順にコンストラクタをcallしてくれる。
0510デフォルトの名無しさんNGNG
>508
必要ないではなく、付けられない。
というか、何でおまえはvirtualを付けたがっているんだ?

複数のコンストラクタは単なる関数のオーバーロード。
0511デフォルトの名無しさんNGNG
つけられないことは無い
0512デフォルトの名無しさんNGNG
>>511
g++ 3.3.4だと
>error: コンストラクタは virtual 宣言できません
ってエラーになるけど?
0513デフォルトの名無しさんNGNG
C++Builderではエラーがでなくて普通にアレされるので・・
0514デフォルトの名無しさんNGNG
エラーが出ない=付けられる って考えはどうかと・・・。
0515デフォルトの名無しさんNGNG
よく関数にしてコールするとオーバーヘッドが気になる
と言う人がいますが、そんなに気になるほどの
オーバーヘッドってあるんですか?
どういう時に重要になるんでしょう?
0516デフォルトの名無しさんNGNG
>>515
アセンブラ勉強しろよ
0517デフォルトの名無しさんNGNG
汗ブラ
ハァハァ
0518デフォルトの名無しさんNGNG
>>516
要するにおまえは知らないから答えられないということだなw
0519デフォルトの名無しさんNGNG
http://tt.sakura.ne.jp/~suzu/asm/8.html
0520デフォルトの名無しさんNGNG
>>515
>どういう時に重要になるんでしょう?
その関数の中身が十分小さく、呼出回数が多い時。
プロファイルしてみるとシステム全体に占めるコストが分かる。
0521デフォルトの名無しさんNGNG
Cの勉強をしようとして、「新訂新C言語入門」とかいうのかってみたんですけど
ものすごくわかりにくいんで、ほかになんかいい入門書ありませんか?
0522デフォルトの名無しさんNGNG
>>521
分かりやすさは人それぞれ。
本屋に言って片っ端から立ち読みしろ。
0523デフォルトの名無しさんNGNG
>>521
推薦図書/必読書のためのスレッド PART 18
http://pc5.2ch.net/test/read.cgi/tech/1083665944/l50
0524デフォルトの名無しさんNGNG
すいません。質問させてください。
今、処理時間の表示できるCのフリーのコンパイラを探しています。
現在、使っている「Cmachine」では、処理時間の表示が
どうやらできなそうなのですが、
皆さんが使っているコンパイラで、処理時間表示ができるものがありましたら、
お教えいただけると嬉しいです。お願いします。


0525デフォルトの名無しさんNGNG
>>524
処理時間ってのはコンパイルする時間を表示させたいの?
それとも実行ファイルにある処理をさせてその処理時間を表示させたいの?
後者ならclock()またはdifftime()でできるけど?
0526デフォルトの名無しさんNGNG
>>525
質問内容が不十分ですみません。
実行ファイルの処理時間のことです。早々と回答いただきありがとう御座います。
ただ、clock()の使い方を、今ネットで勉強しています。
どのように書けば良いのかまだわかりませんが、勉強してみます。
本当にありがとう御座いました。
0527デフォルトの名無しさんNGNG
会話になってないな
0528デフォルトの名無しさんNGNG
今日は暑かったからな。
0529デフォルトの名無しさんNGNG
>>526
プロファイルでググレ
0530デフォルトの名無しさんNGNG
質問です。
WindowsのAPIで任意のアプリケーション(任意のウィンドウ?)のカレントディレクトリを取得する関数ってご存知の方いらっしゃいますか?
GetCurrentDirectoryだと自分自身のプロセスのカレントディレクトリしか取得できないみたいで、どうしていいのかわかりません。
方針としてはGetActiveWindowかGetForegroundWindowで取得したハンドルをもとに、そのアプリケーションのカレントディレクトリを取得してファイル操作などをしたいと考えています。
よろしくお願いします。
0531デフォルトの名無しさんNGNG
>>530
スレ違い。こっち
Win32API質問箱 Build20
ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/l50
0532デフォルトの名無しさんNGNG
>>530
フックしてフックプロシージャで取得し、
アプリケーションにプロセス間通信で送るとか
0533デフォルトの名無しさんNGNG
>>531
1読め。
ここは言語と環境の問題を切り分けられなかったり
判断のつかない人(や、面倒な人)用のスレだろ。
C++の話題限定なら相談室と統合してるよ。
0534デフォルトの名無しさんNGNG
>>533
>>1のどこに
>ここは言語と環境の問題を切り分けられなかったり
>判断のつかない人(や、面倒な人)用のスレだろ。
と書いてあるのだろうか?
そもそもここはC/C++言語の相談室で、特定の開発環境やライブラリの
操作に関しては専用スレに誘導するというスタンスが以前から続いているが?
0535デフォルトの名無しさんNGNG
Win32APIなどの環境依存な物でもOK。
0536デフォルトの名無しさんNGNG
環境依存なものでもOKだが、APIそのものの質問(C/C++とはなんの関係もない)は
より適切な場所で行う方がいいでしょ。
0537530NGNG
>>532
プロセス間通信に関してわかってないので、調べてみました。
すぐには理解できなさそうですが、フックプロシージャの中でなら情報をチラ見できるっていうイメージでしょうか?(ちょっと言葉が悪いですね・・・)
ただ、今まではインスタンスハンドルかウィンドウハンドルあたりを使ってAPI関数一発かなぁとか想像していたので、そう簡単にはうまくいかないということがわかっただけでも収穫です。
ありがとうございます。
>>531さんをはじめレスくれた方々も、気を悪くしないでください。失礼しました。
0538デフォルトの名無しさんNGNG
>>536
次スレのテンプレにはこれを明確にしておきましょ。
0539デフォルトの名無しさんNGNG
>>537
フックプロシージャは、フックを注入した各プロセス空間で動作することになる。

>>536 より適切な場所で行う方がいいでしょ

それは確かだけど、スレ違いというわけではない。
0540デフォルトの名無しさんNGNG
C/C++の初心者はとりあえずここに来い、ってすれでいいと思うが・・
0541デフォルトの名無しさんNGNG
スレタイトルに環境依存OKって思いっきり書いてありますが
0542デフォルトの名無しさんNGNG
C++のお勧めの本教えてください。
すぐにでも一通り使えるようになりたいので簡単なので良いのありませんか?
一応Cは分かります。
0543デフォルトの名無しさんNGNG
>>542
推薦図書/必読書のためのスレッド PART 18
http://pc5.2ch.net/test/read.cgi/tech/1083665944/
0544デフォルトの名無しさんNGNG
>>541
環境依存OKなC/C++の質問ね。
言語に関係しない質問はスレ違いだよ。
初心者は自分ではその区別がつかないことも多々あるが、
その場合、専用スレがあればそっちに誘導するということで
ずっとやってきているのに、いまさら蒸し返してどうする。
0545デフォルトの名無しさんNGNG
>>530
よく分からないけどShellExecuteでカレントを指定して立ち上げればいいのでは?
exeの場所が知りたいのならGetModuleFileName辺りを調べるといいかも。
0546デフォルトの名無しさんNGNG
>>543
ありがと、
テンプレ参考になりました。
0547デフォルトの名無しさんNGNG
>>542
ここ辺りから1冊どうぞ。
ttp://www.data-house.co.jp/seriestoppc.html
0548デフォルトの名無しさんNGNG
>>547
頭悪そうな本ばっかりだな
0549デフォルトの名無しさんNGNG
>>548
そんなに言うのなら頭悪そうじゃない本を薦めたら?
0550デフォルトの名無しさんNGNG
おいおい548は正論だろ
0551デフォルトの名無しさんNGNG
>>547
書籍名だけでも十分アレだが、
著者名も負けず劣らずだな。
0552デフォルトの名無しさんNGNG
まぁ542はすぐにでも分かりたいらしいから、
10分でわかる マンガハッカー 入門
かなぁ。C++かどうかは知らんが・・・
0553デフォルトの名無しさんNGNG
下記の実行結果になるプログラムを作成してください。
-9999を読み込むまで次々と整数値を読み込んでいき、合計値および
平均値を表示するプログラム。なお、最後に読み込んだ
-9999は合計には加えない。注)do while文を使用すること。
変数は下記を使用すること。
int i; int n; int sum;
<実行結果>
どんどん整数を入力してください。(ただし、-9999で終わります)
1個目:15
2個目:65
3個目:84
4個目:96
5個目:23
6個目:45
7個目:85
8個目:-9
9個目:57
10個目:-9999

合計:461
平均:51.22
0554デフォルトの名無しさんNGNG
>>553
ようかんマンがC/C++の宿題を片付けて見せます 26棹
http://pc5.2ch.net/test/read.cgi/tech/1088860889/
0555カメソライダーNGNG
0556デフォルトの名無しさんNGNG
推薦図書のスレから飛んでまいりました。
C++の超初心者です。
どなたかアドバイスお願いします。

あるデータをFFT処理をし、その結果が
メモ帳のテキストデータとして表示されるようになっています。
一行目に周波数、二行目にパワースペクトルが表示されるようになっているんですが、
このデータを周波数、スペクトルと分けてプログラムの中に読み込みたいのですが、
どうしたらよいのでしょうか?
0557デフォルトの名無しさんNGNG
>>556
このスレでも怪しいが・・・
fscanfで検索を。
0558デフォルトの名無しさんNGNG
>>556
初心者を超えたのなら甘えるなよ。
0559デフォルトの名無しさんNGNG
>>556
周波数、パワースペクトルは組込型(doubleなど)でいいなら
std::basic_ifstream使えばすむけど。
詳しいアドバイスが欲しければ、もっと具体的に質問すべし。
0560デフォルトの名無しさん NGNG
課題作成で作ってる自作プログラムで問題が起きたので質問です・・・。
拡張機能を入れたメモ帖を作成しているのですが、そこでかなーり困ってます。
具体的な処理として行いたいのが

スレッド特異的ホットキーを使いホットキー登録。
WM_HOTKEYが実行されたら以下の動作を実行

1.現在アクティブになっているウィンドウのハンドルを取得(これはGetActiveWindowを使う事で解決しています)
2.取られてきたハンドルを元に範囲指定してる文字列をクリップボードにコピー
3.クリップボードに保存されている文字列をメモ帖に張り付け(ここは自分のメモ帖のEDITコントロールにSendMessageでWM_PASTEを実行する事で出来ている)

2番目の処理がどうもうまく行きません・・と、言うよりもどの関数を利用するのか手持ちの資料じゃさっぱり・・・(TT
今の方式でもしハンドルを元に文字列を取ろうとすると、アプリケーションの種類で上手くいかない可能性もありますし。
例としてやってみたいアプリケーションでの処理を上げておきます

・IEで範囲指定した文字列を自作メモ帖で指定したホットキーを押した時にメモ帖に張り付け
・MSワードで範囲指定した文字列を自作メモ帖で(以下略

簡潔に言うと、外部アプリケーションで範囲指定した文字列をクリップボードに貼り付けて自分のメモ帖プログラムに貼り付けたいのです。
課題提出期限が明後日・・・誰か力貸して下さい_| ̄|○
0561560NGNG
作成環境書き忘れてましたorz
環境はWinXP/2000
使用ソフトはVC++6.0です
0562デフォルトの名無しさんNGNG
>>560
宿題スレに逝け。
0563560NGNG
>>562
激しくスレ違いスマンカッタ_| ̄|○
0564デフォルトの名無しさんNGNG
Windows のツールバーを作るために

TBBUTTON tbb[] = {
{ 0 , IDM_UME , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0} ,
{ 1 , IDM_MOMO , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0},
{ 1 , IDM_SAKURA , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0}
} ;

と宣言、初期化して BCC でコンパイルすると
「初期化の一部だけにカッコがついている」と警告を受けるのですが、
もっと正しい記述の仕方があるのでしょうか?
0565デフォルトの名無しさんNGNG
{ 0 , IDM_UME , TBSTATE_ENABLED , TBSTYLE_BUTTON , {0} , 0 , 0} ,
0566デフォルトの名無しさんNGNG
VC++.net2003ゲットしたんですけど VC++6.0で普通にコンパイルできる
#include <stdio.h>
main()
{
printf("hello world");
}
が2003ではコンパイルできません 
普通のC言語未対応になったんですかね?
0567デフォルトの名無しさんNGNG
(´-`).。oO(何が釣れるかな……)
0568デフォルトの名無しさんNGNG
         \   ∩─ー、    ====
           \/ ● 、_ `ヽ   ======
           / \( ●  ● |つ
           |   X_入__ノ   ミ   そんなエサで俺様がクマ――!!
            、 (_/   ノ /⌒l
            /\___ノ゙_/  /  =====
            〈         __ノ  ====
            \ \_    \
             \___)     \   ======   (´⌒
                \   ___ \__  (´⌒;;(´⌒;;
                  \___)___)(´;;⌒  (´⌒;;  ズザザザ
                               (´⌒; (´⌒;;;
0569デフォルトの名無しさんNGNG
>>566
.NETからは全く新しい言語体系に変わりました
今までの知識は全く役に立ちません。
0570デフォルトの名無しさんNGNG
         \   ∩─ー、    ====       普通のC
           \/ ● 、_ `ヽ   ======     #include <stdio.h>
           / \( ●  ● |つ           int main(void) /* 返却値の型を省略するとint */
           |   X_入__ノ   ミ   =======   {
            、 (_/   ノ /⌒l            printf("Hello World");
            /\___ノ゙_/  /  =====      return 0; /* C99では不要 */
            〈         __ノ  ====     }
            \ \_    \
             \___)     \   ======   (´⌒
                \   ___ \__  (´⌒;;(´⌒;;
                  \___)___)(´;;⌒  (´⌒;;  ズザザザ
                               (´⌒; (´⌒;;;
0571デフォルトの名無しさんNGNG
(´-`).。oO(エラーメッセージ読めば解決するのに……)
0572デフォルトの名無しさんNGNG
cout でdouble型を表示させると小数点5桁までしか表示されません、任意の桁数まで表示させることは出来ないのでしょうか?
printfの場合は%18.15fなどで出来たのですが・・・初心者質問で申し訳ありません。
0573デフォルトの名無しさんNGNG
cout 桁数 マニピュレータ
でググってみ
0574デフォルトの名無しさんNGNG
>>573
precisionですね、ありがとうございます。
0575デフォルトの名無しさんNGNG
Javaみたくヘッダで全ての関数定義しちゃだめなん?
0576デフォルトの名無しさんNGNG
別にダメじゃないよ
好きなだけヘッダに書きな
ふふふ
0577デフォルトの名無しさんNGNG
inlineをつければ平気かな
ふふふ
0578デフォルトの名無しさんNGNG
>>575
全てインライン関数指定になるからプログラムサイズがすごいことになってマジオススメ
0579デフォルトの名無しさんNGNG
>>578
インライン指定しても、実際にインラインになるかどうかはコンパイラにお任せ。
0580デフォルトの名無しさんNGNG
>>579
んなことくらい知ってるけど、それが何か???
0581デフォルトの名無しさんNGNG
>>578
んなことくらいわかるけど、それが何か???
0582デフォルトの名無しさんNGNG
>>581=575 なの?

じゃああなたは一体何が聞きたかったの?
0583575NGNG
>>578-579
自分で分けたほうが小さく出来るんだよね?
ヘッダで定義するのは雪駄下駄くらいにしとけてことでOK?

>>582
>>581はオレじゃないよ。
単に2ファイルにわけると保守がメンドイなと。
0584デフォルトの名無しさんNGNG
>>583
開発用、公開用とヘッダファイルを使い分けることができるのがミソなのな。
0585デフォルトの名無しさんNGNG
>>578
> 全てインライン関数指定になるから
またこういう大嘘をつくんだから ;-)
0586デフォルトの名無しさんNGNG
>>585
Javaみたくヘッダで全ての関数定義した場合で
インライン指定にならないケースを教えて貰えないかい?

結果的にインラインにならないとしてもインライン指定はインライン指定だよ。
0587デフォルトの名無しさんNGNG
>>586
class Hoge {
public:
void hoge() const;
};
void Hoge::hoge() const { std::cout << "hoge\n"; }
0588デフォルトの名無しさんNGNG
>>587
おまいさんそれをヘッダに書く気か?

本当に関数定義をヘッダに書きたいなら全部templateにするのがお勧め。
0589デフォルトの名無しさんNGNG
>>588
とりあえず、おまいはこれまでの流れを読み直してこい。
0590デフォルトの名無しさんNGNG
>>589
>>575-を読んでレスをつけたんだが、見当違いな事言ってるか?
良かったらどこがおかしいか指摘してくれるとありがたい。
0591デフォルトの名無しさんNGNG
>>587
はぁ・・・

ついでにもう一つ教えてもらいたいんだが、「Javaみたく」って字は読めないの?
0592デフォルトの名無しさんNGNG
>>591
> ついでにもう一つ教えてもらいたいんだが、「Javaみたく」って字は読めないの?
みんな読めてますね。
あなただけは、読んだ上でその文章の意味を間違えているようですが ;-)
0593デフォルトの名無しさんNGNG
>>592
読めてないじゃん。;-)

Javaは>>587のような記述が出来るようになってたのか? 


あと「みんな」だって。お前だけだよアホくさ。
0594デフォルトの名無しさんNGNG
>>593
> 読めてないじゃん。;-)
読めていないと書けないレスに向かってこんなこと書いても、
馬鹿を晒す結果になるだけですね :-P

> あと「みんな」だって。お前だけだよアホくさ。
いえ、俺だけ読めているわけではありません。みんな読めています。あなた以外 ;-)
(とか書くとまた馬鹿を晒してきそう)
0595デフォルトの名無しさんNGNG
>>594
バカ晒してるのはお前「も」だよ :-P

で、Javaは>>587のような記述が出来るようになってたのか?
0596デフォルトの名無しさんNGNG
>>595
> バカ晒してるのはお前「も」だよ :-P
いえ、あなたですね :-P

> で、Javaは>>587のような記述が出来るようになってたのか?
とか言ってるから「読めてない」という話になるわけです ;-)
0597デフォルトの名無しさんNGNG
age
0598デフォルトの名無しさんNGNG
>>596
はいはい、書けないでしょ。

つまり>>587は「Javaみたく」を満たしていない記述。


あと
>いえ、あなたですね :-P
ワザワザ「」を付けてあげたのに「も」が読めなかったの?
やっぱ読めてないのお前ジャンw
俺はバカ晒しているのを自覚してるよw
お前もちったぁ自覚しろ :-)
0599587NGNG
俺の知らないところで無益な争いが...
正直
>Javaみたく
の部分は読んでなかった。
「ヘッダで」じゃなくて「クラス定義の中で」って書いてくれれば
こんなことにはならなかった。

0600デフォルトの名無しさんNGNG
>>598
> つまり>>587は「Javaみたく」を満たしていない記述。
あなたの誤読の範疇の話をいくらしても意味無いですね ;-)

> ワザワザ「」を付けてあげたのに「も」が読めなかったの?
読めるのは当たり前では

> やっぱ読めてないのお前ジャンw
と、ここでも思い込みで頑張るわけですね :-P

> 俺はバカ晒しているのを自覚してるよw
なるほど。自覚しているわけですか。それなら、
> お前もちったぁ自覚しろ :-)
これが荒唐無稽な馬鹿発言なのもちゃんと理解しましょう ;-)
0601デフォルトの名無しさんNGNG
>>600
面白いw 
晒し上げられたから他のギャラリーがもっと乱入してきてグダグダになるまで頑張るかw


>>599 を見る限り、「みんな」じゃないなw

やっぱ読めてないのはお前だよ :-)
0602デフォルトの名無しさんNGNG
>>583の「単に2ファイルにわけると保守がメンドイなと。」を読めば、
575の「Javaみたく」は、「Javaみたく全てクラス定義の中に〜」ではなく
単にファイル分けの話、つまり「Javaみたく、ヘッダファイル一つに〜」という
意味であると解釈するのが自然だし、より厳密な態度をとるなら
「はっきりと言っていないから断定できない」とするのが適切なのは明白なんだけどね。

ここを読まず&考えずに、勝手にクラス定義に全部書くって話に解釈して、
そこから一歩も出ようとしないのが約一名いる。
0603デフォルトの名無しさんNGNG
>>601
> >>599 を見る限り、「みんな」じゃないなw
あなたと>>599、二名になりましたね ;-)

> やっぱ読めてないのはお前だよ :-)
いえ、あなたです :-P
0604デフォルトの名無しさんNGNG
>>602
エーw

「Javaみたく、ヘッダファイル一つに〜」

Javaってヘッダファイルないじゃんw
0605デフォルトの名無しさんNGNG
>>602
「単に」がポイントですね。
0606デフォルトの名無しさんNGNG
>>604
C++の話でしょ?
0607デフォルトの名無しさんNGNG
>>606
Javaにヘッダが無いってことは
Javaみたく、ってのは「ヘッダで全ての関数定義」にかかるわけじゃなくて
「全ての関数定義」にかかるだろ。かかんない?もうどっちでもいいよw


>>602
>そこから一歩も出ようとしないのが約一名いる。
そこから一歩出ると何に話が広がるのw?
0608デフォルトの名無しさんNGNG
>>604
言葉の使い方は575に突っ込んでくれ。俺としては、

575は要するに「hとcppに分けるのマンドクセ。hに全部書いちゃダメなん?」
って訊きたいだけだろう

ってのが言いたいことなんで。
0609デフォルトの名無しさんNGNG
>>607
> もうどっちでもいいよw
もう、というか、最初から絡みたかっただけでは? ;-)
0610デフォルトの名無しさんNGNG
>>608
保守がメンドイって言ってるんだから
宣言と定義を分けて、二箇所変更が起きるようなやり方はしないだろw

>>609
俺にはお前が絡みたかっただけに思えるんだがw :-)
0611デフォルトの名無しさんNGNG
>>610
でも、彼(彼女?)は「2ファイルにわける面倒さ」しか言ってないし。
0612デフォルトの名無しさんNGNG
>>610
> 宣言と定義を分けて、二箇所変更が起きるようなやり方はしないだろw
>>575がそれをするかしないか、の問題ではないですね ;-)
0613デフォルトの名無しさんNGNG
>>611
そこは>>575の意図がどうのという話ではないわけです ;-)
0614デフォルトの名無しさんNGNG
>>611
確かに、勝手に「Java出身なら宣言と定義を分けることにメンドクサさを感じるだろう」と勝手に思い込んでたってのはあるなw

本当はどうなのか>>575が出てきて言ってくれないかなw

>>612-613
じゃあ、どういう話だったのw?
お前の脳内ストーリーを書き込んでくれないかなw
0615デフォルトの名無しさんNGNG
>>614
> じゃあ、どういう話だったのw?
あとから出てきた人達の脳内の議題に関する話なわけですね ;-)

> お前の脳内ストーリーを書き込んでくれないかなw
ログを読めばいいのでは?
(俺の解釈はログと同じなので)
0616デフォルトの名無しさんNGNG
>>615
お前具体的には何も言ってないねw いや言えないんでしょw?  :-)
0617デフォルトの名無しさんNGNG
>>616
それが断末魔ですか ;-)
0618デフォルトの名無しさんNGNG
>>617
あはは そっくりお返ししようw 

「それが断末魔ですか ;-)」が断末魔ですか ;-)
0619デフォルトの名無しさんNGNG
いい加減もうヤメレ
0620デフォルトの名無しさんNGNG
HSPスレでやれ
0621デフォルトの名無しさんNGNG
 う わ ら ば 
0622デフォルトの名無しさんNGNG
そんなことより>587だと、
複数のコンパイル単位にインクルードされた場合、
リンク時に多重定義エラーが出ないか?

586じゃないけど、やっぱinline指定が必要な気が。
0623デフォルトの名無しさんNGNG
&はアドレス演算子とポインタの説明の所で書いてありますが、
int x=10;
scanf("%d",&x)の&xは、xは10をさしてる訳じゃなくて、
xのアドレスをさしていると言うことですか?それとも
ポインタの&とscanfで使う&は別物なんでしょうか?
0624デフォルトの名無しさんNGNG
>>623
別物ではない。
0625デフォルトの名無しさんNGNG
>>623
xの値は10だが、&xはxのアドレスを指す。
0626デフォルトの名無しさんNGNG
>>624>>625
ちゃんと分かりやすく説明しろや
馬鹿か!?おめーら(プッ
0627626NGNG
釣れないなぁ
0628デフォルトの名無しさんNGNG
1,2,3・・・10,20,30・・・100,200,300・・・って増やす方法教えてください。
0629デフォルトの名無しさんNGNG
int n = 1;
for(;;)
{
 n += (int)pow(10, floor(log10(n));
 printf("%d,", n);
}
0630デフォルトの名無しさんNGNG
#include <stdio.h>
int main()
{
int i,j;
for (j=1; j<=10000; j=j*10)
{
for (i=1; i<10;i++)
printf("%d,",i*j);
}
return 0;
}
0631デフォルトの名無しさんNGNG
>>629
エラーばっかりなんだけど
0632デフォルトの名無しさんNGNG
>>631
アルゴリズムは自分で考えたのか?
その実装方法をここで聞くくらいならいいが

自分で考える癖をつけないと使えない人間になるぞ
0633デフォルトの名無しさんNGNG
>>628
#include <stdio.h>

int main(void)
{
int hoge;
int moge;

for (hoge = 1; hoge <= 100; hoge *= 10)
{
for (moge = 1; moge <= 3; moge++)
{
printf("%d", hoge * moge);
if (moge < 3)
printf(",");
if (moge == 3)
printf("・・・");
}
}

puts("って増やす方法教えてください。");

return (0);
}
0634デフォルトの名無しさんNGNG
>>628
俺でも不恰好ながら出来た、がんがれ
0635デフォルトの名無しさんNGNG
このコードなんですが、出力が
0000000000000000000000・・・
になってしまいます。
なぜでしょうか?
VC6です。

#include "stdafx.h"

template< int count >
void hoge()
{
if( count < 10)
{
printf("%d", count);
hoge< count +1 >();
}
};

int main(int argc, char* argv[])
{
hoge< 0 >();

return 0;
}
0636デフォルトの名無しさんNGNG
VC6で関数テンプレート+即値はバグもち
0637デフォルトの名無しさんNGNG
>>636
635はそれ以前のような....
0638デフォルトの名無しさんNGNG
>>635
どうなって欲しいのですか?
0639デフォルトの名無しさんNGNG
>>637
hoge< count +1 >();これかw
0640デフォルトの名無しさんNGNG
>>635
真っ当なコンパイラなら、そのコードはエラーになるはず。
hoge<n>がhoge<n+1>を実体化しようとして、決して終らないからね。
0641デフォルトの名無しさんNGNG
C++でプロパティクラスが欲しいんですが、
プロパティクラスのインスタンスにsetter/getter/objの3つの値が必要で、
プリミティブ型ひとつひとつをプロパティ化すると、
オブジェクトのサイズが数倍に膨れ上がっちまいます。

なにか綺麗な解決方法ないですか?
0642635NGNG
すいません
なぜ駄目なのか全然わかりませ〜ん

>>if( count < 10)
これがストッパーになってhoge<9>以上は作られないんじゃないんでしょうか?


また、
template< int count >
void hoge()
{
printf("%d\n", count);
hoge< count +1 >();
};

void hoge<10>()
{
printf("%d\n", 10);
};

こうしたら出力が「10」になってしまいました。
訳がわかりません、バグでしょうか?
0643デフォルトの名無しさんNGNG
>>638
hoge< 0 >()から
hoge< 9 >()まで生成して0〜9を出力したいんです。
よろしくお願いします。
0644デフォルトの名無しさんNGNG
>>642
ifの条件判定は実行時に行われる(たとえコンパイル時に真偽が確定していても)。
だから>>642の様に特殊化で対処しないといけない。
g++3.3では、>>642の特殊化の定義の前にtemplate<>を付け加える事でうまく動作したから、
出力が「10」になるのはバグだと思われる。
0645デフォルトの名無しさんNGNG
>>644
了解しました、ありがとうございました。
また、ちなみにこういったことが可能な環境または言語ってあるんでしょうか?
0646デフォルトの名無しさんNGNG
>>644
642ではif( count < 10)をはずしているので,
>出力が「10」になるのはバグだと思われる。
は違うよ.出力が「10」になるのは正しい.

それはそうと,
関数テンプレートは規格上,特殊化できないんじゃなかったっけ?
私の勘違いだったら申し訳ない.
0647646NGNG
>>646
自己レス.
>関数テンプレートは規格上,特殊化できないんじゃなかったっけ?
これは部分的な特殊化の話だったようだ.
因みにModern C++の30ページ辺り.
0648デフォルトの名無しさんNGNG
>>646
いえ、スタートが

int main(int argc, char* argv[])
{
hoge< 0 >();

return 0;
}

ですので「10」では間違いです。

VC6だとクラステンプレートで正常動作を確認しました。
クラステンプレートが無難みたいですね。
0649デフォルトの名無しさんNGNG
>>645
>また、ちなみにこういったことが可能な環境または言語ってあるんでしょうか?
「こういったこと」と言うのが>>642のコードを動作させる事なら、
VC7.1かg++2.95(うろ覚え)以降を使うべし。

>>646
>642ではif( count < 10)をはずしているので,
>>出力が「10」になるのはバグだと思われる。
>は違うよ.出力が「10」になるのは正しい.
>>642でhoge<0>();を呼んだら出力は「0\n1\n2\n...10\n」になるはずだし、実際そうなった。(g++3.3)
0650デフォルトの名無しさんNGNG
>>649
いえ、
if( count < 10)
の部分です。
0651646NGNG
>>648
何か分からなくなってきた.
642で,うしろの方に書いてある
void hoge<10>()
{
printf("%d\n", 10);
};
は呼ばれないということでしょうか?
これでテンプレートの実体化がストップするのではないですか?

それはそうと,特殊化ってこうですよね.
template <> void hoge<10>()
{
printf("%d\n", 10);
};
0652646NGNG
>>650
すみません.何言いたいのか伝わってないので,
650で言いたい内容を書き直してもらえませんか?
よろしく.
0653デフォルトの名無しさんNGNG
http://www.fides.dti.ne.jp/~oka-t/cpplab-vc6-func-template-bug.html
これか?
0654デフォルトの名無しさんNGNG
2次元配列 a[8][5], b[8][10]があるとしてこれをある関数の引数として渡すときどのように仮引数を書けばいいのでしょうか
0655646NGNG
653みて分かった.646の
>>出力が「10」になるのはバグだと思われる。
>は違うよ.出力が「10」になるのは正しい.
は撤回.本当は
出力は「012345678910」になるのが正しい
とのつもりで書いたのだけど.
0656デフォルトの名無しさんNGNG
>>654
a[][5], b[][10]
0657デフォルトの名無しさんNGNG
>>656
すいません、説明不足でした。
a[8][5], b[8][10]だとして

hoge(a);
hoge(b);

と渡したいときのことでした。
0658デフォルトの名無しさんNGNG
>>657
Cではaとbを同じ関数に渡すのはむり。
C++なら
void hoge(int a[][5]) { ... } (型は適当に仮定)
void hoge(int b[][10]) { ... }
ってオーバーロード。
0659デフォルトの名無しさんNGNG
C99ならvoid hoge(unsigned size, int a[][size])
だけどむりだよな
0660デフォルトの名無しさんNGNG
>>650
C++の範囲内なら、無理。
0661デフォルトの名無しさんNGNG
>>656>>658-659
ありがとうございます。
0662デフォルトの名無しさんNGNG
クラステンプレートをテンプレートの引数として取るとき、どうやって書けば委員でしょうか

template<?>
class data
{
public:
?<int> get1() const;
?<float> get2() const;
}

data<std::vector> data1;
data<std::list> data2;

みたいにしたいのですが
0663デフォルトの名無しさんNGNG
とりあえずいくつか
template<template <typename,typename> class Cont>
struct Data1
{ 
    Cont<int,std::allocator<int> > get1() const; 
    Cont<float,std::allocator<float> > get2() const; 
};
template <typename T>
struct Data2{
    typename T::template apply<int> get1() const; 
    typename T::template apply<float>::type get1() const; 
};

struct Data2arg{
    template <typename T>
    struct apply{
        typedef std::vector<T> type;
    };
};

Data1<std::vector> data1
Data2<Data2arg> data2;

2つ目はboost::mplなんかで使われている方法。
1つ目は引数の数が少しでも違ってると動かない(デフォルト引数のことは考慮されない)。
つまり
template <template <typename> class Cont>
struct Data1{};
ではstd::vectorを受け取れない(vectorは2つの型を受け取るテンプレートクラスだから、2つ目は省略可能だけども)
・・・と思ったらMinGWでは動いた(VC7.1ではだめだったが)
0664デフォルトの名無しさんNGNG
質問です。
ttp://mikata.curiocube.com/oop/part3/ch02_encapsulation.html
でC++入門してるのですが、C++では、アクセッサを経由したメンバ変数の比較はできないのでしょうか。
上記サイトに記載されていた、Humanクラス(下記)をインスタンス化し、メンバ変数のAgeを、
if (intanceHuman.Age == 10)
というコードで比較しようとしたところ、
" error C2446: '==' : 'int (__thiscall Human::*)(void)' 型から 'const int' 型への変換ができません。"
というビルドエラーが出てしまいます。
アクセッサを経由しないで比較を行うとうまくいくのですが・・・
コードとしては、直感的なので、このコードが通らないのが不思議というか・・・

// class 宣言
class Human {
public:
// コンストラクタ
Human(int nAge=0 );
// 属性の取得:「年齢」
int Age() { return m_nAge; }
private:
// メンバ変数:「年齢」
int m_nAge;
};

0665デフォルトの名無しさんNGNG
>>664
if (intanceHuman.Age() == 10)
0666デフォルトの名無しさんNGNG
>>665 ありがとうございました。
なるほど、()を忘れてました・・・
これだと、関数から返される値ではなく、関数自体と定数を比較している・・・
という感じに解釈されそうですね・・・

ありがとうございました=]
0667デフォルトの名無しさんNGNG
intanceHuman.Age にカッコをつけないとメンバ関数のポインタ(関数の先頭のアドレス)になっちゃうよ。
ところでインタンスって・・・。
0668664NGNG
ありがとうございます=]

インタンス...orz
0669デフォルトの名無しさんNGNG
>>666
>関数から返される値ではなく、関数自体と定数を比較している・・・
>という感じに解釈されそうですね・・・
そんな馬鹿なことを考えるのはオマだけだ。もっと勉強しろ。
0670デフォルトの名無しさんNGNG
>>669
それは正しい考えじゃないの?
馬鹿なことだとしたら、正しくはどうなのさ?
0671デフォルトの名無しさんNGNG
>>670
>>667
0672デフォルトの名無しさんNGNG
>>670
関数自体って何?
関数ポインタなら分かるんだが。
0673デフォルトの名無しさんNGNG
>>672
関数への参照がそんな感じかな。
メンバ関数への参照はC++には無いが。
0674664NGNG
>>669 & >>672
"関数自体"としたのは、参照される値が、ポインタなのか、関数オブジェクト(C++にあるのか否かは知りません)なのか、はっきりしなかったためです。
あと、勉強中です。
0675デフォルトの名無しさんNGNG
>>674
関数オブジェクト使いたければboostをお勧め〜
基本のboost::function、boost::bindからboost::lambdaまで〜
ttp://www.kmonos.net/alang/boost/classes/lambda.html
というかboost入れないとSTLがのアルゴリズムかなり使いにくい気が・・・
あとC++だと関数自体の参照も受け取れる。

template <typename Ret,typename Arg1T>
void func(Ret (&arg)(Arg1T)){
    //...
}
0676デフォルトの名無しさんNGNG
void hoge(int count)
{
if( count < 10)
{
printf("%d", count);
hoge(count + 1);
}
};

int main(int argc, char* argv[])
{
hoge(0);

return 0;
}
0677664NGNG
>>675
Boostの関数型プログラミング系はあくまで、脇役なのかなと思っていたのですが、
なるほど、ワンライナーっぽく書けると、見通しもよくなりそうですね。
ありがとうございます:)
0678デフォルトの名無しさんNGNG
>>677
1つだけ注意する点があるとするならライブラリで無名関数をサポートしているのであって言語レベルでサポートしているわけではないこと。
そのためにコンパイルエラーメッセージがとても読めないものとなる(boost::lambdaは)。
その代わり言語の影響が少ないせいかクロージャをboost::lambda::valを使って実現できたりもする、もっとも変数の寿命はC/C++の規則に従うが。
0679678NGNG
>boost::lambda::val
boost::lambda::varだ。
0680デフォルトの名無しさんNGNG
int型の変数をMessageBoxで文字として表示したいのですが、
Basic環境のようにString型にキャストして表示するにはどうすればいいのでしょうか?

MessageBox(NULL,(CString)strNumber,"Test",0);

としてもキャストできませんでした
0681デフォルトの名無しさんNGNG
>>680
CString::Format
0682デフォルトの名無しさんNGNG
char mes[22];
sprintf("%d",num);
0683デフォルトの名無しさんNGNG
>>680
intからCStringへはキャストできない。
MessageBox(NULL, CString().Format("%d", strNumber), "Test", 0);
ところでstrNumberがintならプレフィックスおかしくないか?
0684デフォルトの名無しさんNGNG
なるほど、ありがとうございます
今までBasicかPerlしか触ったことが無かったので、
文字列の変換についても同じように考えていました。

ところで、プレフィックスがおかしいというのはどういう意味なのでしょうか?

0685デフォルトの名無しさんNGNG
>>684
strはCStringとかstd::string用でintならiとかnのはず
0686デフォルトの名無しさんNGNG
ハンガリアンの概念捨てろ
0687デフォルトの名無しさんNGNG
♪1・2・ハンガリアン
0688デフォルトの名無しさんNGNG
プログラム初心者です。質問なんですが、
たとえば毎日20040710.datとかファイルをバッチで取得してて、トラブルで取れなかった場合に、
その日を自動的に取得するっていう感じのプログラムってどんな感じですればいいですか?
アドバイスをお願いします。
0689デフォルトの名無しさんNGNG
>>688
毎日20040710.datとかファイルを取得してて、トラブルで取れなかった場合に、
その日を自動的に取得するプログラムを作ればいいです。
0690デフォルトの名無しさんNGNG
>>688
>>689の一言に尽きます。
ってか全く同じこと書こうとしてた
危うくケコーンするとこだった
0691デフォルトの名無しさんNGNG
>>688
こんな考え方はどうかな?
1、ディレクトリにあるファイルを全部取る
2,、取ったファイルはどこか別の場所へ移動
こんな考え方じゃだめ? 非常にシンプル・・・
0692デフォルトの名無しさんNGNG
>>688
あなたが自力でプログラミングするにはかなりの勉強が必要のようだ。
プログラミングの勉強が目的でないならオンラインソフトを探したほうが早い。
0693名無しさん@そうだ選挙に行こうNGNG
>>688
ファイルが取得成功したときとしなかったときで何が違うのか?
その日をどうやって取得するのか

そのあたりをハッキリしてみ
0694デフォルトの名無しさんNGNG
そんなことよりちょっと聞いてくれよ
金がないので未だVC6なんだが
namespace Name {
class A
{
static void X(void);
};
}//namespace Name

int main(void)
{
Name::A::X();
//using namespace Name;
//A::X();
return 0;
}
こんなコードが通ってくれやがります。
どうしましょう?
0695デフォルトの名無しさんNGNG
>>694
VC6捨てる
0696デフォルトの名無しさんNGNG
>>694
何か問題が?
0697デフォルトの名無しさんNGNG
>>696
少なくともprivateメンバにアクセスはできないはずですね。
0698デフォルトの名無しさんNGNG
そうですね
0699デフォルトの名無しさんNGNG
>>694
VC.NETならゴラァって言ってくれるの?
0700697NGNG
gccならエラーと警告が出るんだけどねぇ。
0701デフォルトの名無しさんNGNG
VC6のnamespaceおよびtemplateのへボサは言うまでもないと思ってたんだが。
0702702NGNG
int main()
{
double a1,a2;
int i,Nparameter,nsteps;
Nparameter=5;
nsteps=4;
double result_a1[100];
double result_a2[100];
double result_a3[100];

for(i=0; i<Nparameter; i++){
a1=3+0.1*i;
result_a1[i]=a1;

// for(i=0; i<nsteps; i++){
// a2=4+0.2*i;
// a3=5+0.8*i;
// result_a2[i];
// result_a3[i];
// }
}

for(i=0; i<Nparameter; i++){
cout << result_a1[i] << " " << endl;
}
// for(i=0; i<nsteps; i++){
// cout << result_a2[i] << " " << result_a3[i] << " " << endl;
// }
}
0703702NGNG
入れ子のforを使ってa2とa3を求めるにはどうすればよいのですか?
入れ子があるとa1が上手く求まりません。
あと、coutですが、エクセルみたいにa1、a2、a3をテキストファイルに
縦表示させたいです。よろしくお願いします。
0704デフォルトの名無しさんNGNG
int j;

for(j=0; j<nsteps; j++){
a2=4+0.2*j;
a3=5+0.8*j;
result_a2[j]=a2;
result_a3[j]=a3;
}
0705デフォルトの名無しさんNGNG
>>702 はマルチなので放置
0706デフォルトの名無しさんNGNG
>>705
最初に書き込んだスレで答えてやれよ
0707デフォルトの名無しさんNGNG
>>706
どこにあるかわからない最初の書き込みなんて追っていけるわけねえだろうがお前が見つけて答えてやれよ
0708デフォルトの名無しさんNGNG
#include <standio.h>
int main(void)
{
int value;
printf("整数の値を入力してください。=");
scanf("%d",value);
if( )
{
if( )
printf("%5dは正の偶数ですね。\n",value);
else printf("%5dは負の偶数ですね。\n",value);
}
else
{
if( ) printf("%5dは正の奇数ですね。\n",value);
else printf("%5dは負の奇数ですね。\n",value);
}
}

空欄部分を埋めたいんですが、最初のifに何を入れて良いかが分からないので、
あとの2つも埋まらない状態です。
お願いします。
0709デフォルトの名無しさんNGNG
#include <standio.h>
0710デフォルトの名無しさんNGNG
sage
@@@@
0711デフォルトの名無しさんNGNG
>>709
書き忘れていましたが、いくつかの間違いを含んだままになってます。
そっちに修正はしないでいいので、ifのあとの空欄をお願いします。
0712デフォルトの名無しさんNGNG
ヘ_ヘ
ミ・・ ミ ということにしたいのですね?
( ° )〜
0713デフォルトの名無しさんNGNG
>>708
if ( value % 2 == 0 )

しかし、間違いがあるのを承知で、しかも断り無く質問するのはどうかと思うぞ。
0714デフォルトの名無しさんNGNG
>>708
Cとか関係ないし%
宿題スレいけよ2
0715デフォルトの名無しさんNGNG
>>712
>>713
>>714
すいませんでした。ちょっと急いでいたもので。
以後気をつけます。
どうもありがとうございました。
0716デフォルトの名無しさんNGNG
for (i=0; i<teki; i++){
cout << kekka1[i] << " " << endl;
}
for (j=0; j<tekiteki; j++){
cout << kekka2[j] << " " << endl;
}
だと、以下のようにできません。
kekka1 kekka2
○   ×
○   ×
:   ;
このように表示するにはどうすればいいのですか?
coutかprintfでお願いします。
0717デフォルトの名無しさんNGNG
○とか×ってなんだよ
0718デフォルトの名無しさんNGNG
>>716
折角答えてやったのに、マルチかよ・・・
しね
0719デフォルトの名無しさんNGNG
研究室のPCに入ってるVisualStudio.NET2003のC++でプログラム組もうと思ったんだけど…
iostream.hをincludeしようとしたらiostream.hが無いし、
iostreamをincludeして、cout使おうとしたら、std::coutじゃないと使えないし…(´・ω・`)

C++の仕様って変わった?
0720デフォルトの名無しさんNGNG
>>719
うらしまさん?
0721デフォルトの名無しさんNGNG
何年前の知識なの?
0722デフォルトの名無しさんNGNG
【初心者歓迎】C/C++室 Ver.7【環境依存OK】
0723719NGNG
大学入学前だから…4〜6年前の知識(しかも古本)かな?(´・ω・`)
大学入学後はロクに組んでなかったし、
たまに組んだときも、古いコンパイラ使ってたから問題なかったし…

1から勉強し直した方が良さそうやね…
0724デフォルトの名無しさんNGNG
ダイテルのC++プログラミング2版の邦訳、vol.3 を立ち読みすれば、なんとなくわかるかも。
0725719NGNG
サンクス。立ち読みしてみます。
0726デフォルトの名無しさんNGNG
AllocConsole()で作ったコンソールウィンドウをシステムメニューから閉じると、
GUIのメインウィンドウまで閉じて、プロセスが終了してしまうのを防止したいのですが。
どなたか、方法を御存知ないでしょうか。
WIN_APIの、SetConsoleCtrlHandler() や、HandlerRoutine() が関係しているところまでは msdn で調べたのですが、
具体的なサンプルコードのあるページが見つからず、理解できません。

0727デフォルトの名無しさんNGNG
>>723
普通にstd::coutじゃだめなのか?
0728デフォルトの名無しさんNGNG
using namespace std;
入れればいいだろ
0729デフォルトの名無しさんNGNG
#include <iostream>
using namespace std;
これでいいだろ
0730デフォルトの名無しさんNGNG
お願いします
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1089824455
0731デフォルトの名無しさんNGNG
>>730
あちこちで聞きまくってるようだが、荒らしのつもりか?
0732デフォルトの名無しさんNGNG
某プログラム言語担当が配った資料が
#include <iostream.h>
だった。実行できねぇって文句言う奴多発。

VC6のときはファイルが存在してたんだっけ?
0733デフォルトの名無しさんNGNG
Hoge a, b, c; があるとして、

And(Hoge& a, Hoge& b, Hoge& c)
{
  a = b & c; //※メンバは省略しています
}
のように処理していました。

operatorを使って、operator= (a=b)とoperator&= (a&=c) の組み合わせで
同等なものは作成できましたが、
これを一度に処理することは出来ないのでしょうか?
0734733NGNG
最後の文を、
>これを同等の速度で一度に処理することは出来ないのでしょうか?
に、修正させてください。
0735デフォルトの名無しさんNGNG
>>733
「一度に処理」の意味がわからん。
0736デフォルトの名無しさんNGNG
>>733
スレ違い。

こちらにどうぞ。
http://pc5.2ch.net/test/read.cgi/tech/1085915001/
0737733NGNG
>>735
言葉足らずですみませんでした。

operatorで実現した場合、
a=b&cは、a=bと、a&=cの2回呼び出しを行う必要がある(思い込んでいる?)のですが、
それを1回の呼び出しでと言うことです。

Hoge& operator & (Hoge& b, Hoge&c)
{
  Hoge a = b; //コピーが必要
  a &= c; //直接メンバ同士を演算しているものとして
  return a;
}
では、一時的にコピーを作ってしまうので、それを避けたいというのが理由です。
0738733NGNG
Hoge& operator & (Hoge& b, Hoge&c)

訂正
Hoge operator & (Hoge& b, Hoge&c)
0739733NGNG
色々やってみて、勘違い(メンバ関数でやっていたり)していることに気が付きました。
お騒がせしました。
0740デフォルトの名無しさんNGNG
だからスレ違いだと書いたのに……
0741733NGNG
>>740
すんまそ。

if (b & c) のような書き方は出来ないんですね…
0742デフォルトの名無しさんNGNG
>>741
なぜできないと考えるのかが分からない。
0743デフォルトの名無しさんNGNG
>>737,741
解決したみたいだけど一応。この方が少し良いかも。
Hoge operator & (Hoge& b, Hoge&c)
{
  return Hoge(b) &= c;
}
741のはbool(かその他制御式に直接置ける型)へのキャストをオーバーロードすればいい。
0744デフォルトの名無しさんNGNG
>>743
ありがとうございます。

>>742
えーと、a=b&c と if (b&c) は、戻り値が異なるだけなので
両立出来ないと思っているのですが...
0745デフォルトの名無しさんNGNG
>>744
>えーと、a=b&c と if (b&c) は、戻り値が異なるだけなので
>両立出来ないと思っているのですが...

>>743氏も言ってるけどHoge -> bool のキャストをオーバーロードすればいいだろ
0746デフォルトの名無しさんNGNG
>>744
operator bool() const { return true; };
こんなのをメンバ関数に追加するべし。
0747733NGNG
>>745
>>746
ありがとうございます。

ここでいうキャストの意味がようやく解かりました。
Hoge operator & (Hoge& b, Hoge& c)と
bool operator & (Hoge& b, Hoge& c)は
両立(同時に定義)できないので、

operator & を使うのであれば、
戻り値Hoge以外はキャスト(if ((bool)(b&c)) など)しなさい、
ということですね。
0748デフォルトの名無しさんNGNG
>>747 ちがいます。
0749デフォルトの名無しさんNGNG
>>747
普通キャスト演算子のオーバーロードは暗黙的変換でも有効。
つまり>>746のようなキャスト演算子のオーバーロードの関数を作った場合、if (b&c)ってのができる。(boolへの明示的キャストはいらない)
その場合、
1, まずb&c(operator &(Hoge&, Hoge&))をやる。
2, b&cの戻り値はHoge&なんで条件判断はできない。
3, そこでHoge型を引数にとるoperator bool()が自動で呼び出される。(boolなら条件判断ができる)
4, その結果をifが見る。
って流れになる。
0750デフォルトの名無しさんNGNG
const参照になってないのが気になってしょうがない
0751デフォルトの名無しさんNGNG
>>750に従うと
operator &(const Hoge& b, const Hoge& c)だ
0752733NGNG
自分の理解不足と説明不足です。申し訳ありません。

自分が質問したかったことは、
>>749の1,の時点で
処理を終わらせること(Hogeとboolの区別)が出来ないのでしょうか?ということです。

それぞれ下記のように別々の関数を用意すれば、
Hoge AndHoge(Hoge& b, Hoge& c)
bool AndBool(Hoge& b, Hoge& c)
それぞれが、1,までの処理で済むのですが、
operator&を使った場合、戻り値を2種類以上実現しようすると、
2,以降の処理が必要になるということでいいんですよね?
0753デフォルトの名無しさんNGNG
>>752
普段1と4だけ意識させるための(キャストの)オペレータオーバーロードだぞ
0754デフォルトの名無しさんNGNG
はじめまして。
初心者から質問させてください。
ここ
ttp://www.kopropo.co.jp/html/KONDO/KHR1_Support.html
にあるRCB-1というコントローラボードについてです。

このボードはRS232で通信するものです。
付属のアプリケーションがあるのですが、
それだと条件分岐が出来ないので、
条件分岐できるようなプログラムをC言語で組んでみたいと思ってます。

しかし、RS232を扱うような書籍が見つけられず困っています。
何か良い書籍、もしくはソースコードがないでしょうか。
0755デフォルトの名無しさんNGNG
>>754
お前が何のOSやコンパイラを使ってるのか知らないのに何を薦めろと言うんだ?
0756デフォルトの名無しさんNGNG
>>755
すっかり忘れておりました
OSはWindows2000、コンパイラはVC++です
0757デフォルトの名無しさんNGNG
>>754
よくわからんが、こんなんじゃだめ?
ttp://members.jcom.home.ne.jp/0434383301/vc10.htm
0758デフォルトの名無しさんNGNG
ttp://e-realize.com/softlib/comport/comport.htm
0759デフォルトの名無しさんNGNG
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int getrand(max)
{
int ransu;
ransu=rand() % max;
return(ransu);
}

int main()
{
int rand;
srand((unsigned int)time(NULL));
rand=getrand(256);
printf("%d\n",rand);
return 0;
}

↑このプログラムを1秒おきに実行すると、
必ず前の乱数より大きな値が出て数字がばらけないんですが
(25→35→40→56→… というように)
timeを種にしてる限りどうしようもないですか?
0760デフォルトの名無しさんNGNG
すいません、コンパイラはgccです。
0761デフォルトの名無しさんNGNG
>>759 ttp://www.catnet.ne.jp/kouno/c_faq/c13.html#16
0762デフォルトの名無しさんNGNG
>>759
int main()
{
int rand;
srand((unsigned int)time(NULL));
rand=getrand(256);
rand=getrand(256);
printf("%d\n",rand);
return 0;
}
0763デフォルトの名無しさんNGNG
>>762
それだと逆に小さくなってくぞ
0764デフォルトの名無しさんNGNG
素直にMT使えって
0765デフォルトの名無しさんNGNG
>>759

int getrand(max)
{
return((int)((double)rand() / ((double)RAND_MAX + 1) * max));
}
0766754NGNG
>>757
>>758
情報ありがとうございます
これを参考に四苦八苦してみます
0767デフォルトの名無しさんNGNG
Cとしては正しいけどC++としては正しくない(エラーでコンパイルできないなど)
ソースってのもあるらしいのですが例えばどんなものなんでしょうか?
0768デフォルトの名無しさんNGNG
割り込んですみません。
gcc/linux で使える、メモリ管理上のバグを検出するツール
を探しています。今組んでいるプログラムで、何も効果がな
いはずのコード(同じ初期化処理を何度も繰り返すコード等)
を挿入すると、結果が変わるというバグが取れなくて困って
います。一応ネット上で調べて、memwatchというのを使って
チェックしてみたところ、メモリリークは検出できて、debugし
たのですが、最初の問題は解決しません。memwatchの開
発者も、全ての問題が検出出来るわけでは無いと書いてい
ます。どなたか、この種の問題をdebugするのに良いツール
をご存知でしたら、お教えください。
(ちなみに、最適化オプションによって現象が出たり出なかっ
たりします。debugモードでコンパイルすると出なくなるので、
gdbでトレースすることもできそうにありません。)
0769デフォルトの名無しさんNGNG
>>767
int* p = malloc( sizeof(int)*100 );
とか。C++の方が、全般に型チェックがうるさくなってる。
0770デフォルトの名無しさんNGNG
>>768
cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/
にいったほうがいいと思う
0771768NGNG
>770
ありがとうございます。行ってみます。
0772デフォルトの名無しさんNGNG
>>759
乱数の種がほぼ1づつしか変わらないのが原因だね。
1秒ごとというのが手動ならμ秒やミリ秒を返すAPIがあればそれを使う。
gettimeofday()とかtimeGetTime()とか。環境依存だけど。
linuxとかなら/dev/rand使う。
0773デフォルトの名無しさんNGNG
>>759
乱数の精度を求めるなら標準関数のrandは使わないほうがいいみたいよ。
右シフトして3ビットぐらい捨てるとまだマシになるらしい。
それでもだめなら
ttp://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html
これが定番みたい。
0774デフォルトの名無しさんNGNG
「Aの動作をした何秒後かにBの動作をさせる」というのはどうやったらよいのでしょうか?
例えば
#include<iostream.h>
using namespace std;

int main ()
{
cout << "三秒後に「三秒経ちました。」と出力します。" << endl;

//次のcoutを表示するまで三秒の間をもちたい。

cout << "三秒経ちました。" << endl;
return 0;
}

環境はVC++6.0です。
超初心者の質問ですがよろしくお願いします。

0775デフォルトの名無しさんNGNG
Sleep
0776デフォルトの名無しさんNGNG
>>774
Sleep()
0777デフォルトの名無しさんNGNG
>>773
精度の問題じゃないってば。
種の問題。
0778デフォルトの名無しさんNGNG
>>777
標準関数のrandを使ってるのが問題。
0779774NGNG
>>775,776
ありがとうございます。

cout << "三秒後に「三秒経ちました。」と出力します。" << endl;
Sleep(3000);
cout << "三秒経ちました。" << endl;

しかし上記のようにSleepを使ってみたところ
『error C2065: 'Sleep' : 定義されていない識別子です。』
とエラーが出てしまいました。
なにかincludeしなくてはいけないのでしょうか??
0780デフォルトの名無しさんNGNG
>>779
#include <windows.h>
その前にまずはチュートリアルあたりを嫁。
0781774NGNG
>>775,776,780
できました!
ありがとうございます。
今度からはチュートリアルを熟読してから質問します^^;
0782759NGNG
標準rand関数ってダメダメですね。
MTを使って解決しました。どうもありがとうございます。
0783デフォルトの名無しさんNGNG
猫でもわかるのwindows SDK編のイントロダクションのソースを入力したのですが
error C2440: '=' : 'HGDIOBJ' から 'HBRUSH' に変換できません。
warning C4244: 'return' : 'WPARAM' から 'int' に変換しました。データが失われているかもしれません。
というエラーが出てしまいます。
まんまコピペしても結果は同じでした。
どうすればいいか教えてください。
環境はVC++.netです。

猫でもわかるのwidows SDK編イントロダクション
ttp://www.kumei.ne.jp/c_lang/sdk/sdk_00.htm
0784デフォルトの名無しさんNGNG
>>783
http://www.kumei.ne.jp/c_lang/setvc.htm
0785デフォルトの名無しさんNGNG
>>784
どうもすいませんでした。
myProg.hbrBackground =GetStockObject(WHITE_BRUSH);
の部分を消したらできました。
0786デフォルトの名無しさんNGNG
char *a と char *a[] って何か違いはあるの?
0787デフォルトの名無しさんNGNG
int i と int i[] くらい違う
0788デフォルトの名無しさんNGNG
一から学びたいんですが、オススメのサイトはありますか?
0789デフォルトの名無しさんNGNG
>>788
http://www9.plala.or.jp/sgwr-t/index.html
0790デフォルトの名無しさんNGNG
インライン関数を使おうと思ってるのですが。
”hoge.cpp”
#include "func.h"

void hoge[
double a;
func(a);
}

”func.cpp”
#include "func.h"

inline void func(double)
{
〜
}

”func.h”
inline void func(double);

このようにしリンクしようとするとerror LNK2001:が出てしまいます。
これはインライン関数の使い方が間違ってるのでしょうか?
0791デフォルトの名無しさんNGNG
>>790
inline指定子はインライン展開を強制するものではないので、
指定しない場合と同様にhoge.cppだけでなくfunc.cppもリンクする必要がある。
つーか、それ以前にコンパイル単位が違う段階でインライン展開しようがないんだけど。
0792デフォルトの名無しさんNGNG
>>790
> ”func.cpp”
#include "func.h"
void func(double)
{
〜
}
0793デフォルトの名無しさんNGNG
792は忘れて
0794デフォルトの名無しさんNGNG
忘れたくても忘れられません
0795デフォルトの名無しさんNGNG
>>791
なるほど、コンパイル単位が違うと駄目なんですね・・・考えてみればそりゃそうか・・・
0796モモカNGNG
はじめまして!!
大学生の研究でC++を使うことになってオブジェクト指向がわからなくって困ってるの
C言語でいうメイン関数とサブルーチンの関係とオブジェクト同士のデータと手続きの
関係って何が違うの?メイン関数からサブルーチンにデータを渡して、サブルーチンで
計算してメイン関数に関数に返すっていう流れをみるとオブジェクト指向じゃないかって
思うの。どうなんですか?教えてくださーい。ペコリ
0797デフォルトの名無しさんNGNG
夏か
0798デフォルトの名無しさんNGNG
ABC.libというファイルをa.objとb.objから作りたいのですが
コマンドが調べてもわかりません。
誰か助けて。
普段コンパイルはlcc a.cで通ってます
0799デフォルトの名無しさんNGNG
>>798
まずはマニュアル嫁、マルチ。
0800デフォルトの名無しさんNGNG
>>799
マルチではなく俺が誘導してきた
0801デフォルトの名無しさんNGNG
>>800
なら回答よろしく
0802デフォルトの名無しさんNGNG
>>801
ごめん
俺に解ってたらこっちに連れてこない

誰か解答よろ
とりあえず俺はBcc32のバージョンは解答してみた

>>798
lib作成 LCCとかでググってみ
0803デフォルトの名無しさんNGNG
>>798
lcc ってこれ?
http://www.cs.virginia.edu/~lcc-win32/
↑にマニュアルある。

けど、なんか読んでもよくわからん。
コンパイラオプションにはなさそう。
リンカオプション説明もあるけど、lib作るってのは見当たらないな。

がんばってくれ。
0804デフォルトの名無しさんNGNG
LSI-Cだったりして。。。
0805デフォルトの名無しさんNGNG
LSI-Cならライブラリアンが付属していたはずだよ。
確か妙な名前だったはず。
コンパイラドライバ(lcc)からは作れなかったと思う。
0806デフォルトの名無しさんNGNG
ライブラリアンと聞くと
口から酸性の液を吐く凶暴な生物を思い出す。
0807デフォルトの名無しさんNGNG
LSICです
0808デフォルトの名無しさんNGNG
LSI-Cのライブラリアンはoarだな。
oar [-]d|q|r|t|x[cuv] [g N] library member-file...

つーかマニュアルはかなり詳しく書いてあるので、ちゃんと読め。
0809デフォルトの名無しさんNGNG
すいませんでした。
何も知らない小学生で
0810デフォルトの名無しさんNGNG
二次元配列で

[ ] [12]=〜〜〜〜〜〜〜〜

などのプログラムで[ ]内に数字を入れない理由を
分かる人教えてください
0811デフォルトの名無しさんNGNG
負担の軽減
0812デフォルトの名無しさんNGNG
コンパイラに数えさせたら楽だし間違わないから。
0813デフォルトの名無しさんNGNG
入れてもいいよ♥
0814デフォルトの名無しさんNGNG
>>810
むしろ、あとの[12]は要素数を指定しないとならないってのがミソなんだが。
0815デフォルトの名無しさんNGNG
わかりました。
ありがとうございます。
0816デフォルトの名無しさんNGNG
>>810
「配列のポインタ」
と
「ポインタの配列」
の違いについて述べよ
0817デフォルトの名無しさんNGNG
>>812
コンパイラは何も数えてないぞ
0818デフォルトの名無しさんNGNG
>>808
あー、そういえばObjectARchiverって言ってた気がする。
0819デフォルトの名無しさんNGNG
>>810
コンパイラがあとの〜〜〜〜〜〜〜〜で要素数を決定できるから
0820デフォルトの名無しさんNGNG
質問すいません、時系列のデータファイルがあったときに
例えばそのファイルのデータの中の5の倍数番目のデータだけからなる
データファイルを新たにつくるCプログラムはどうしたらよいですか?
0821デフォルトの名無しさんNGNG
>>817
数えないでどうやって決定するの?
0822デフォルトの名無しさんNGNG
適当に
0823デフォルトの名無しさんNGNG
>>821
実際のところ、データのサイズだけ計算すれば十分だから。
0824デフォルトの名無しさんNGNG
質問させて下さい。 学校の休み期間で、PCクラスタに挑戦してみたいのですが、参考文献とか教えていただけないでしょうか。
演算させるのは、スカラー計算です。
OSは、やはりリナックスになるのでしょうか?
できれば、Windowsでしたいのですが・・・
0825デフォルトの名無しさんNGNG
すいませんsage忘れました
0826デフォルトの名無しさんNGNG
>>824
>OSは、やはりリナックスになるのでしょうか?
でしょねぇ。
0827デフォルトの名無しさんNGNG
>>824
UNIX系OSの知識がないと,いきなりはちょっと辛いかもしれません.
参考文献は...
PVM
MPI
OpenMP
Mosix
SCore
このへんのキーワードでぐぐって知識を体系化させて下さい.
MPIの実装の一つmpichはWin版があったような気はします.
0828デフォルトの名無しさんNGNG
mpichなら制限付試用版があるかな、昔は完全フリーだったんだけどねぇ
0829デフォルトの名無しさんNGNG
>>821
数えないし決定もしない。sizeofの利用を除いて。
0830デフォルトの名無しさんNGNG
相談したいのですが、
過去ログ【初心者歓迎】C/C++室【環境依存OK】
>>http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
の205番目のレスで、見つけたコードを応用して以下のようにしてみました。

AllocConsole();
HANDLE hRead, hWrite;
CreatePipe(&hRead, &hWrite, 0, 0);
_dup2(_open_osfhandle((long)hWrite, _O_TEXT), 1);
cout << "test" << endl;
char sz[100];
DWORD dw;
ReadFile(hRead, sz, sizeof sz, &dw, 0);
sz[dw] = '\0';
MessageBox(hwnd, sz, "test", MB_OK);

要するに自プロセスの標準出力を横取りして、GUIウィンドウに出力したいのですが。
CUI環境では、205番のやり方でOKなんですが、GUIではうまくいきません。
ReadFile でブロッキングされたまま止まってしまいます。
知恵を貸していただけないでしょうか?
0831デフォルトの名無しさんNGNG
830番を投稿した者ですが、以下のように変えてみました。
が、やっぱりだめです。
ReadFile関数が標準出力を横取りしてくれない。。。
AllocConsoleとの併用はできないんだろうか。

AllocConsole();
HANDLE hWrite = GetStdHandle(STD_OUTPUT_HANDLE);
int dFile = _open_osfhandle((long)hWrite, _O_TEXT);
FILE* hFile = _fdopen(dFile, "w");
*stdout = *hFile;

HANDLE hRead, hWrite;
CreatePipe(&hRead, &hWrite, 0, 0);
_dup2(_open_osfhandle((long)hWrite, _O_TEXT), 1);
cout << "test" << endl;
char sz[100];
DWORD dw;
ReadFile(hRead, sz, sizeof sz, &dw, 0);
sz[dw] = '\0';
MessageBox(hwnd, sz, "Message", MB_OK);
0832デフォルトの名無しさんNGNG
始めてWideCharToMultiByte関数を使用する事になったのですが、
ちょっと疑問が出来てしまいました。
WindowsXp、VC++6.0 SP6.0 の環境では
CP_ACP と CP_OEMCP の結果が同じに見えます。
これって日本語版Windows以外やWindows9x等では結果が違うのでしょうか?
(ページコード というのは地域の事?)
ご存じの方いらっしゃいましたら御願いします。
0833デフォルトの名無しさんNGNG
>>832
日本語版Windowsではどちらも同じです。
英語版では異なってます。

「OEMコードページ」なんかで検索してみれば基礎的な知識が得られると思います。
0834832NGNG
>>833
なるほど大体分かりました。ありがとうございました。
0835デフォルトの名無しさんNGNG
C + Win32API + BCCでプログラムを作っているのですが、
それのビットマップについての質問です。

始めに、外部ビットマップは、一つの要素に一つのビットマップを使うタイプです。
ツクール2000みたいに、ひとつにいろんなのを載せるタイプではありません。

1
ビットマップを表示するときは、表示するたびに外部ビットマップを開くか、
使う全ての外部ビットマップを、プログラムの始めに
メモリビットマップに書いておくのか、どちらがいいのでしょうか。

2
透過の為のマスクビットマップは、外部に用意しておくか、
プログラムの始めに元のビットマップから製作するか、どちらがいいのでしょうか。
0836デフォルトの名無しさんNGNG
>>835
自分が作りたいアプリケーションに合わせて仕様を決めましょう。
例えば、格闘ゲームなんかの場合は

1.登場キャラで足りない分のデータだけをメモリに読み込む。
2.マスク作成
3.ゲーム部分
4.次ステージに登場しないキャラの部分のメモリ解放
5. 1.に戻る

といった感じ。
必要無いデータは必要になる前の違和感を感じない所で読めば良い。
0837デフォルトの名無しさんNGNG
C++でフレンドクラスからテンプレート関数を呼びたいのですが、リンクエラーになってしまいます。

class A {
private:
...
template <typename T> int compare( T a1, T a2 ) { return ( a1 > a2 ? 1 : 0 ); }
friend class B;
};
class B {
...
};

の状態で、クラスBの内部で compare( 1, 2 ) とか compare( 3.0f, 4.0f ) を評価したいのです。

色々と検索したところ、テンプレート関数の実体がないため(?)らしいというあたりまではわかったのですが、
具体的にどうすれば解決できるのか教えていただけないでしょうか。
0838デフォルトの名無しさんNGNG
>>835

1.
頻繁に同じ画像を描画するのであればメモリ上に置いておく必要があるし、
不特定多数の画像の切り替えが必要な場合は、表示させるときにだけ読み込めばいい。

2.
特に問題なければ読み込み後でのマスク作成でいいと思う。
0839835NGNG
>>836
ありがとうございます。

僕が作ろうとしているのは、FE等のターン制SRPGです。

基本的には、1は後者の方で、2も後者のようですが、
さらに、メモリっとくビットマップの種類を
できるだけ小さくしておく工夫が必要なんですね。
分かりました。
0840835NGNG
>>838
ありがとうございます。

>1
SRPGなので頻繁ではないタイプだと思います。

透過をマスクを使わずSetPixelVでやっていたので、
キャラを選択して移動範囲を表示するとき、
薄く青描けるのがあると思いますが、あれが激遅でした。

>2
1で読み込んだ時、その分のマスクをその時に作ればいいのですね。
分かりました。
0841835NGNG
>>838
>1
ここの部分は、同じSRPGでも、ゲーム進行の仕方によって
微妙に違ってくると思うので、いろんな方法を試して見ます。
0842デフォルトの名無しさんNGNG
>>837
普通に↓のように書けばいいのでは。

class A {
template <typename T> int compare( T a1, T a2 ) { return ( a1 > a2 ? 1 : 0 ); }
friend class B;
};

class B {
void test( A& a ) {
a.compare<int>( 1, 2 );
a.compare<float>( 3.0f, 4.0f );
}
};

ただ、VC++ 6.0では問題あったような・・・
0843デフォルトの名無しさんNGNG
#include<stdio.h>

int main()
{
int c;
while((c = getchar()) != EOF)
putchar(c);
return 0;
}

を実行しても終了しないんですが、どうやったら終了できるようにできますか?
0844デフォルトの名無しさんNGNG
>>843
終わりたい時に電源切ればいい
0845843NGNG
>>844
なるほど。
っていうか、whileの中身が偽になっても何で終了しないんですか?
0846デフォルトの名無しさんNGNG
>>845
偽になれば終了します。
終了しないのは偽にならないからです。
0847デフォルトの名無しさんNGNG
>>843
Ctrl+Cで終了したけど(LSI CとBCCどっちでも)
0848843NGNG
>>846
どうしたら、偽になるんですか?
0849デフォルトの名無しさんNGNG
>>848
そのように振舞うgetcharを自分で作る。
0850デフォルトの名無しさんNGNG
>>848
Ctrl+DとかCtrl+Zとか
0851843NGNG
みなさん、ありがとうございます。
やってみます
0852デフォルトの名無しさんNGNG
#include <stdio.h>
int min(int x,int y);

int main(void) {
  int x,y,ans;
  printf("1番目の整数を入力してください。\n");
  scanf("&d",&x);
  printf("2番目の整数を入力してください。\n");
  scanf("%d",&y);
  printf("\n\nx=%d,y=%d\n\n",x,y);
  ans = min(x,y);
  printf("最小値は%dです",ans);
  return 0;
}

int min(int x,int y) {
  if(x>y) {
    return y;
  } else {
    return x;
  }
}

が期待通りに動きません。最初のscanfが実行されてないみたいです。
なぜ?
0853デフォルトの名無しさんNGNG
>>852
目を凝らしてよ〜く見てみろ
0854デフォルトの名無しさんNGNG
&d
0855デフォルトの名無しさんNGNG
>>852
Shift6→Shift5
0856デフォルトの名無しさんNGNG
ん? '&'はShift+7じゃないの?
0857デフォルトの名無しさんNGNG
>>856
俺のキーボードではShift+6だよ
0858デフォルトの名無しさんNGNG
>>855-857
(・∀・)ソレダ!
0859デフォルトの名無しさんNGNG
プログラムは思った通りには動かない。作った通りに動く。
0860デフォルトの名無しさんNGNG
つまり、思った通りに作れば
思った通りに動くわけですね。
0861デフォルトの名無しさんNGNG
m9(  `Д´ )ソレダ!!
0862デフォルトの名無しさんNGNG
#include <stdio.h>
double func(double tensuu){
int k;
double kekka;
printf("親なら1を子なら0を入力してください\n");
scanf("%d",&k);
if(k==1){kekka=tensuu*1.5;}
else if(k==0){kekka=tensuu;}
return(kekka);}
double kiriage(double kekka) {
int i,j,k;
i=kekka;
if(i%100==0){k=kekka;}
else{
j=100-i%100;
k=kekka+j;}
return(k);}
void main(){
int tokuten[7][4]={0,1300,2600,5200,1000,2000,3900,7700,1300,2600,5200,8000
,1600,3200,6400,8000,2000,3900,7700,8000,2300,4500,8000,8000,2600,5200,8000,8000};
int toitu[3]={1600,3200,6400};
int k,hansuu,fusuu,hansuu2,bai,n;
doubletensuu,kekka;
tensuu=0;
kekka=0;
hansuu=0;
n=0;
while(1){
printf("飜数を入力してください\n七対子で4飜以下の場合は0を入力してください\n");
printf("役満は一種類に付き13飜で換算して入力してください\n");
scanf("%d",&hansuu);
0863デフォルトの名無しさんNGNG
符も計算してくれ
0864862続きNGNG
if(hansuu<=12){
if(hansuu<=10){
if(hansuu<=7){
if(hansuu<=5){
if(hansuu<=4){
if(hansuu==0){
if(hansuu<=-1)
{printf("不正な値です、正しい数値を入力してください\n");}
else {
printf("飜数を入力してください\n");
scanf("%d",&hansuu2);
tensuu=toitu[hansuu2-2];
kekka=func(tensuu);
kekka=kiriage(kekka);
printf("得点は%lfです\n",kekka);}}
else {
printf("符数を入力してください\n");
scanf("%d",&fusuu);
tensuu=tokuten[(fusuu/10)-2][hansuu-1];
printf("親なら1を子なら0を入力してください\n");
scanf("%d",&k);
if(k==1){
kekka=tensuu*1.5;
kekka=kiriage(kekka);
printf("得点は%lfです\n",kekka);}
else if(k==0){
kekka=tensuu;
printf("得点は%lfです\n",kekka);}}}
0865862続きNGNG
else {
kekka=func(8000);
printf("得点は%lfです\n",kekka);}}
else {
kekka=func(12000);
printf("得点は%lfです\n",kekka);}}
else{
kekka=func(16000);
printf("得点は%lfです\n",kekka);}}
else {
kekka=func(24000);
printf("得点は%lfです\n",kekka);}}
else{
if(hansuu%13==0){
bai=hansuu/13;
tensuu=(double)bai*32000.0;}
else if(hansuu%13!=0){tensuu=32000;}
kekka=func(tensuu);
printf("得点は%lfです\n",kekka);}
printf("終了する場合は0、継続する場合は1を入力してください\n");
scanf("%d",&n);
if(n==0) break;
else printf("処理を継続します\n"); }}
0866862NGNG
俺がC使い初めの頃に組んだ麻雀得点計算プログラム。
ソースが汚くて死ぬほど分かりづらい。
0867デフォルトの名無しさんNGNG
#include <iostream>
#include <string>
using namespace std;

int main()
{
string str[2][2];

str[0][0] = "就職 ";
str[0][1] = "活動 ";

str[1][0] = "会社 ";
str[1][1] = "訪問 ";

cout << str[0] + str[1] << endl;

return 0;
}

上手くいかなかったんですがどうすればいいですか
0868デフォルトの名無しさんNGNG
>>867
せ め て 、 希 望 す る 結 果 ぐ ら い は 書け!
0869デフォルトの名無しさんNGNG
>>868
内定
0870デフォルトの名無しさんNGNG
>>867
こうすればコンパイルは通る。
cout << str[0] << str[1] << endl;
0871デフォルトの名無しさんNGNG
C++相談室にまで書くなよ
0872デフォルトの名無しさんNGNG
>>869
ワロタ
0873デフォルトの名無しさんNGNG
VB等で利用可能な COM DLL を VC++ 6.0 で作成しています。
DLLは問題無く完成したのですが、VBのプロジェクトにインポートして
オブジェクトブラウザを開いた時にメゾッドやプロパティの説明文が出るようにしたいのです。
*.odlファイルが怪しいような気はするのですが、調べても分かりませんでした。

※現状のVBオブジェクトブラウザの表示
Baudrate As Long
TotalCom.RS232C のメンバ


※理想的なVBオブジェクトブラウザの表示
Baudrate As Long
TotalCom.RS232C のメンバ

RS232C通信のボーレートを設定します。

環境
Winowd Xp
Microsoft Visual Studio 6.0 Enterprise SP6
 Visual C++
 Visual Basic

知っている方いらっしゃったらよろしく御願い致します。m(_ _ )m
0874デフォルトの名無しさんNGNG
メールチェックなどのプログラムを書くのに
参考になるページなどあれば教えて下さいませんか?
一応ググッたのですが見つからなかったので。
0875デフォルトの名無しさんNGNG
>>874
http://www.faqs.org/rfcs/rfc1939.html
0876デフォルトの名無しさんNGNG
operator delete(void*, std::nothrow_t const &)
ってどうやって呼び出すんですか?
0877デフォルトの名無しさんNGNG
>>876
operator delete(p,std::nothrow);

一応聞いとくが、何がしたいんだ?
0878デフォルトの名無しさんNGNG
Win32の質問です。HeapAlloc()で割り当てられるメモリの最大容量はCOFFの拡張ヘッダに
あるSizeOfHeapCommitの値までなんでしょうか?デフォルトでは0x1000(64KB)となっている
ようなんですが・・・。
0879デフォルトの名無しさんNGNG
>>877
new(std::nothrow) obj;で確保した領域は
operator delete(void*, std::nothrow_t const &)で開放せにゃなんないと聞いたもので。
0880デフォルトの名無しさんNGNG
>>879
基本的な考え方は正しいけど、例外的に、nothrowを取るnew/deleteは
普通のnew/deleteと混用できる。
0881デフォルトの名無しさんNGNG
ちょいと質問。
lcc-win32 Ver.3.8での話なんですが、
変数を特定のセクションに割り当てる方法ってあるんですかね?
VCだと
#pragma data_seg (".hoge")
とかでなんとかなりますが、
lcc-win32ではググっても資料があまりないみたいで…
0882デフォルトの名無しさんNGNG
1行エディットコントロールを作成したのですが、
入力してRETURNキーを押すたびに警告音がします。
うるさいので、無くす方法はないでしょうか?
0883デフォルトの名無しさんNGNG
>>882
もちろんありますよ
0884デフォルトの名無しさんNGNG
その方法を教えるのがこのスレ
0885デフォルトの名無しさんNGNG
違います。質問に答えたり、情報交換してるだけです。
0886デフォルトの名無しさんNGNG
質問に過不足無く答えたつもりだが?
0887デフォルトの名無しさんNGNG
質問者も、開発言語すら書いてないしなぁ
0888デフォルトの名無しさんNGNG
template<class T, T V = T()>
class A
{
};

A<HANDLE, INVALID_HANDLE_VALUE> a; // <--ここ

上記のように書いたのですが、コメントの行で
error C2964: テンプレート パラメータの式が不正です。
と出ます。
試しに

A<HANDLE, (HANDLE)INVALID_HANDLE_VALUE> a;

としても同様のエラーが出ます。
なぜエラーになるのでしょうか?理由がわかりません。
VC++6.0SP6 Win2k
0889888NGNG
試しに

A<HANDLE, NULL> a;

としたらコンパイルが通りました。
NULLは良くてINVALID_HANDLE_VALUE(#define (HANDLE)-1)が駄目な理由がさっぱりわかりません。
0890デフォルトの名無しさんNGNG
質問ですがWINAPIとCのランタイムで同じ処理ができる場合、
何を根拠にして使い分ければ、よいのでしょうか?
0891デフォルトの名無しさんNGNG
>>890
たとえば何?
0892デフォルトの名無しさんNGNG
memset とZeroMemory の違いや
fopen と CreateFile 等です
0893デフォルトの名無しさんNGNG
別物やん
0894デフォルトの名無しさんNGNG
char a[100];
memset( a, '\0', sizeof(a) ) と 
ZeroMemory(a, sizeof(a) ) は同じでないの?
0895デフォルトの名無しさんNGNG
>>894
じゃあ同じ物なら
memset( a, 1, sizeof(a) ); を ZeroMemoryにやらせてみろよ
0896デフォルトの名無しさんNGNG
>>889
テンプレートがキャストまで解釈してくれると思ってるのか?
0897デフォルトの名無しさんNGNG
やってみました。全然、結果が違いました・・・・。
根本的に勉強がたりないみたいです・・・・。
もう一個だけ質問ですが
strcpy と lstrcpy も全然別のものですか?
0898デフォルトの名無しさんNGNG
>>897
お前は人に聞く前にやる事があるだろ?
0899888NGNG
>>896
キャストが駄目だとするとどうすればいいのでしょうか?
そのまま-1と書くと

error C2440: 'specialization' : 'const int' から 'void *' に変換することはできません。(新しい動作 ; ヘルプを参照)
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。

が出て駄目ですし、こういうことは不可能なのでしょうか?
0900デフォルトの名無しさんNGNG
外部クラスの読み込みとクラスの継承関連で質問なのですが、2重インクルードというものがまだいまいち理解できません。
問題のソースです → http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_26/class.txt

上のソースの場合、CarをmainとRacingCar.cppで2回読んでいるようでいけないのかなと思うのですがどうなんでしょうか。。
あとcppファイル全部で#include <iostream>をしているのも無駄にインクルードしているような気がするのですが。。
0901900NGNG
使用しているのはVC++6.0です。
0902デフォルトの名無しさんNGNG
>>900
ヘッダファイルの中身を見たことがあるか?
中身の#のついた行が何を行っているか考えてみれ。
0903デフォルトの名無しさんNGNG
>>894に対して>>895のようなレスをするのは何か違う気がするんだが。
0904デフォルトの名無しさんNGNG
>>903
元の質問は、どのように使い分けるか、という質問だからあんな返答でもいいんじゃねえ?
0905デフォルトの名無しさんNGNG
>>903
じゃあお前が答えてみろよ
0906デフォルトの名無しさんNGNG
>>888
HANDLEはおそらくポインタ型のtypedefだろう。
テンプレート引数に渡すポインタの値は、
外部リンケージを持つオブジェクトを指さなければならない。
規格ではNULLもダメ。
0907デフォルトの名無しさんNGNG
>>897
さっきから話に出てくるのはWin32のAPIなので
Win32APIをやってから質問に来てみたらどうでしょうか?

>>900
分割コンパイルというのをご存知ですか?
0908デフォルトの名無しさんNGNG
>>892
ZeroMemoryは#undefしない限りマクロでmemsetにされる罠
0909デフォルトの名無しさんNGNG
つまりZeroMemoryは
fprintfのprintf版のようにある特定の特別な条件について
良く使うので別の名前で再定義に近い形になってるだけですね
0910デフォルトの名無しさんNGNG
ゼロで埋めたいとき−>ZeroMemory
メモリにセットしたいとき−>memset
でも実装は2ついらない
0911888NGNG
>>906
「外部リンケージ テンプレート 引数」でググってみたら
ttp://www.tietew.jp/cppll/archive/9458
が見つかりました。
すごく面倒臭そうなので別の方法を考えたいと思います。
勉強になりました。ありがとうございました。
0912デフォルトの名無しさんNGNG
>>895=>>905みたいな頭の悪い回答者は
鬱陶しいだけだからあんまり頑張らないでね(^_^;
0913デフォルトの名無しさんNGNG
VC++6.0SP6 Win2000

template<class T, bool f = true> struct A
{ bool func(T) const { return f; } };

こんなテンプレートクラスがあり、例えばTがcharの場合特殊化したいと思ったとすると

template<> struct A<char>
{ bool func(char) { return f; } };

と書いたのですがA<char, true>の特殊化と判断されるようです。
ttp://www.fides.dti.ne.jp/~oka-t/cpplab-template-2.html
ここを参考に

template<bool f> struct A<char, f>
{ bool func(char) { return f; } };

としてみましたが
error C2989: 'A<char,f>' : このテンプレート クラスはすでに非テンプレート クラスとして定義されています。
error C2988: 認識できないテンプレートの宣言または定義です。
と出ます。
A<char, true>とA<char, false>それぞれ書くしかないんでしょうか?
0914デフォルトの名無しさんNGNG
>>900
> 上のソースの場合、CarをmainとRacingCar.cppで2回読んでいるようでいけないのかなと思うのですがどうなんでしょうか。。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_26/class.txt
で示されてるコードは2重インクルードしてません.(コンパイル通るでしょう?)
なぜなら,900さんが(2重インクルードしないで)コンパイルが通るように巧妙に#includeを使ってるからです.(笑)
2重インクルードとは,同じコンパイル単位(1cppあたり1コンパイル単位)で
インクルードガードが施されてない同一のヘッダファイルを2回以上インクルードしてしまう状態です.

900さんはヘッダファイルではincludeしないように心掛けてるんではないでしょうか?
ヘッダファイルでincludeを減らすのは良い心掛けとは思いますが,例えば,
RacingCarクラスはCarクラスを継承してるので,RacingCar.hの先頭で#include "Car.h"するのが普通です.
RacingCarクラスの構築にはCarクラスの定義が必須だからです.
そして,main.cppとRacingCar.cppの#include "Car.h"を外します.
もう少しプロジェクトの規模が大きくなると,このようなヘッダファイルでの#includeのために
上記2重インクルードの状態が発生するので,ヘッダファイルではインクルードガードを施す必要があります.
900さんのコードにはないですね.インクルードガードについては
http://www.02.246.ne.jp/~torutk/cxx/file/includeguard.html
ここで説明されてる内部インクルードガードを参考にして下さい.

> あとcppファイル全部で#include <iostream>をしているのも無駄にインクルードしているような気がするのですが。。
分割コンパイルの利点を享受するためには仕方のないことです.それと,main.cppではいらないですね.
0915デフォルトの名無しさんNGNG
>>910
心配するな。実装は一つだ。
0916デフォルトの名無しさんNGNG
>>914
うだうだ言ってないでもっと手短に説明出来ないか?
0917デフォルトの名無しさんNGNG
>>916
>907を読め
分割コンパイルと答えが出てるだろ
0918914NGNG
>>916
じゃ,まとめると,907の分割コンパイルってのに加えて,
- 2重インクルードを誤解している可能性がある.(900のコードは2重インクルードしてない.)
- ヘッダにインクルードガードがない.(2重インクルードしてないので必要性を理解してないかも.)
を指摘致します.
0919デフォルトの名無しさんNGNG
こういう場合は2重インクルードがどういうものかを云った方が楽
「こうじゃない」ではなく「こうだ」の方が理解しやすい
0920914NGNG
>>919
じゃ隗さんどうぞ.
0921デフォルトの名無しさんNGNG
>>913
テンプレートの部分的特殊化ってVC++6.0はサポートしてたっけ?
0922913NGNG
>>921
そういえばそんなようなこと聞いたような…
コンパイラのせいだったらどうしようもないですね…
別の実装方法考えることにします。
0923デフォルトの名無しさんNGNG
VC++7.1ならOKだよ。
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
これでもOK。
0924900NGNG
丁寧に解説していただきありがとうございます。
0925デフォルトの名無しさんNGNG
お礼直後の質問で申し訳ないのですが参考サイト先の #ifndef INCLUDED_DATE(Date.h内の記述)というものがありますが
#ifndef INCLUDED_のあとにはヘッダファイルの名前を大文字で入れなくてはいけない決まりなのでしょうか。
レベルの低い質問でスミマセン。。
0926デフォルトの名無しさんNGNG
よく読んでないけど
何回も読み込むと型を何回も定義するから
それを避ける為に一度読んだヘッダーファイルならば再度読まないようにしてんじゃね?
0927デフォルトの名無しさんNGNG
別に決まっているワケではない。暗黙の了解的になっているだけ。実際の動作としては、
// common.h
#include <date.h>
...
// source.c
#include <date.h>
#include "common.h"
...
例えば上の様にソフトが組まれていた場合、コンパイラは2回 date.h を組み込むワケだけど

#ifndef INCLUDED_DATE
#define INCLUDED_DATE
// INCLUDED_DATEが宣言されてないので有効
...
#endif
#ifndef INCLUDED_DATE
#define INCLUDED_DATE
// INCLUDED_DATEが宣言されているので無効
...
#endif
という様に無駄が出ない(名前がぶつかってエラーになる等を発生させない)ようにしているだけ。
0928デフォルトの名無しさんNGNG
コピーコンストラクタを利用するとポインタ値がコピーされないため、
デストラクタによってポインターを削除されないのですが、
関数内での演算の結果は元の配列に反映されませんよね。
で、この関数内での演算の値を元の配列に返したいのですがどのようにすればよろしいのでしょうか?
例えば下のプログラムでfugaの値の変更を反映させるにはどのようにすればよいのでしょうか?

class hoge{
public:
int* a;
hoge(){a = new int[10];};
hoge(hoge& other){a = new int[10]; for(int i = 0; i < 10; i++){a[i] = hoge.a[i]};
~hoge(){delete [] a;};
}

void main(){
hoge fuga;
for(int i = 0; i < 10; i++){
fuga.a[i] = i;
}

fuga(hoge& fuga);

}

fuga(hoge& fuga){
for(int i = 0; i < 10; i++){
fuga.a[i] = fuga.a[i] + 10;
}}
0929デフォルトの名無しさんNGNG
>>928
もう少し落ち着いてせめてコンパイルが通るコードを(笑)
0930デフォルトの名無しさんNGNG
MSDOSプロンプトなるものを使ってて、この矢印が
 ↑
← →
 ↓
こうなってるのはナンダ?と思って押したら全画面表示になってしまったんですけど、
これってどうやって戻すんでしょうか…?

もう1つ申し訳ないのですが、
C――WINDOWS
 ┠―sample
同じ階層のWINDOWSディレクトリからsampleディレクトリに
カレントディレクトリを変更したいのですが、これはどのように命令したらよいのでしょうか。

C以前の、大変くだらない質問だとは思うのですが、どなたか助けてください。。
0931デフォルトの名無しさんNGNG
>>930
板違い
0932デフォルトの名無しさんNGNG
>>914
アドバイスを受けて自分なりにインクルードガードを使用したソースにしてみました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_27/teisei.txt
こんなかんじでいいのでしょうか。
0933デフォルトの名無しさんNGNG
>>930
>DOS
自分もやり方がわからないけど、
ウィンマークのキーを押して、タクスバーが出てくるから、
そこで右クリックして閉じる。また開いても元に戻っている。

>ディレクトリ
WINDOWSディレクトリの中にsampleがあるなら、cd sample (Enter)、
違うなら、cd .. (Enter) の後、cd sample (Enter)。
0934デフォルトの名無しさんNGNG
>>930
Alt+Enter
0935デフォルトの名無しさんNGNG
>933、934さん
Cを今日から本を読みながら始めたものの、説明すらないような箇所で詰まる有り様で。。
親切に教えてくださいまして大変助かりました。

ありがとうございました〜

0936デフォルトの名無しさんNGNG
>>935
全画面表示はEXITコマンドでDOSプロンプトごと終了させる方法もある
0937デフォルトの名無しさんNGNG
>>935
つーか本が良くないし足りない
0938デフォルトの名無しさんNGNG
>>935
まずはvi覚えましょう。
話はそれから・・・

書籍の参考サイト
http://www.1point.jp/~book_2ch/
0939デフォルトの名無しさんNGNG
DLL を作る利点ってあるのか?
0940デフォルトの名無しさんNGNG
>>939
あります
0941914NGNG
>>932
Good!
0942デフォルトの名無しさんNGNG
>>939
DLL を使わないと書けない実装もある
0943デフォルトの名無しさんNGNG
フックでコードインジェクションする場合とか
0944デフォルトの名無しさんNGNG
>>942
良い回答

>>940
…('A`)
0945デフォルトの名無しさんNGNG
>>936-938さん
皆様、助言や忠告をありがとうございます。m(_ _)m
0946デフォルトの名無しさんNGNG
a,b,2つの変数で、
#define max(a,b)(((a) > (b)) ? (a) : (b))
となる場合、max(a,b,c)はどんな風に書けば良いのでしょうか?
0947デフォルトの名無しさんNGNG
max(max(a,b),c)
0948デフォルトの名無しさんNGNG
>>947
ありがとうございます。ですが、知りたかったのは右側の方で、
max(a,b)が、(((a) > (b)) ? (a) : (b))ならば、
max(max(a,b),c)は、どう書けば良いのでしょうか。
((((a) > (b)) ? (a) : (b)) > (c)) ? (((a) > (b)) ? (a) : (b)) :(c))
になるんでしょうか?
0949デフォルトの名無しさんNGNG
#define max(a,b)(((a) > (b)) ? (a) : (b))
#define max3(x,y,z) (max((x),max(y,z)))
0950デフォルトの名無しさんNGNG
>>949
そうか、定義したものをそのまま使えば良かったんですね。
ありがとうございました。
0951デフォルトの名無しさんNGNG
向いてないかもな
0952デフォルトの名無しさんNGNG
fooって何?
0953デフォルトの名無しさんNGNG
>>952
hoge
0954デフォルトの名無しさんNGNG
>>952
どーでもいーとき用
barなんてのもあるな
0955デフォルトの名無しさんNGNG
>>954
foo = hoge
bar = fuga
0956デフォルトの名無しさんNGNG
char *p;
p = "あいうえお";
はOKで
*p = "あいうえお";
がダメなのはわかるんですが、

char *p = "あいうえお";
はなんでOKなんでしょうか?
0957デフォルトの名無しさんNGNG
>>956
char *p;
char型のポインタpを宣言する。

char *p = "あいうえお";
char型のポインタpを宣言し、"あいうえお"で初期化する。
0958デフォルトの名無しさんNGNG
>>956
「*」の二義性
0959デフォルトの名無しさんNGNG
char*          p = "あいうえお";
とでもしてみるか?
0960デフォルトの名無しさんNGNG
>>959
それだけは勘弁!
0961デフォルトの名無しさんNGNG
そのあたりに躓いて
char* p = "あいうえお";
って感じにコーディングする人も多かったりする。
0962デフォルトの名無しさんNGNG
お、リロードしてなかった。
959とかぶっちまったぃ。
0963956NGNG
>>957>>958
すいませんさっぱり分かりませんorzと思ったのですが、
>>959で何となく分かりました。
char *p = "あいうえお";というのは
*(p = "あいうえお");と同じことなのかなと。
でも>>961を見るとchar*とかint*という感じで理解したらだめなんでしょうか?
コンパイル時のエラーでvoid *からint *に云々〜なんてのを見たりするので。
0964デフォルトの名無しさんNGNG
>>963
>*(p = "あいうえお");と同じことなのかなと。
違う違う違う。
変数の宣言時の * は、ポインタの逆参照の意味は持たない。
0965961NGNG
う〜ん。
つまりは>958氏の言っていることなんだけどね・・・

char *pの*は、pの型がcharへのポインタだと言っている訳で、
ポインタの指す実態を表す*とは違うということ。

変数を宣言している場所と、その変数を使用している場所では、
*の意味が違うってことを理解しないといけない。
0966デフォルトの名無しさんNGNG
const付けろよデコ助ヤロウ
0967デフォルトの名無しさんNGNG
char* p = "あいうえお";
でコンパイルエラーにならないのは何故だろう(VC++6,0)
const char* な値を char* に代入しようとしてるんじゃないの?
0968956NGNG
なるほど・・・そういうもんだって覚えるしかない文法ってことでしょうか。
そういう理由で>>957>>958の説明になるわけですね。
1週間くらい悩んでたのですっきりしました。本当にありがとうございます。
>>966
すいませんconst調べてきます。

0969デフォルトの名無しさんNGNG
>>963
>でも>>961を見るとchar*とかint*という感じで理解したらだめなんでしょうか?
僕のお勧めは
char *p /* 「*p」がcharであるような変数pを定義して… */
= "あいうえお"; /* 初期化 */
と見る方法。
これだと、int (*(*p)(void))[3];のような複雑な宣言もそのまま読める。
但し、普通に出会うのは単純なポインタが圧倒的なので、
char*を一塊としてみるのが悪いわけではない。

>コンパイル時のエラーでvoid *からint *に云々〜なんてのを見たりするので。
型に言及する時は、宣言の構文から名前を省いたものを使う。

>>967
文字列リテラルは特例
0970デフォルトの名無しさんNGNG
>967
負の遺産
0971デフォルトの名無しさんNGNG
もっともVCは文字列リテラルの書き換えもできるという罠。
0972デフォルトの名無しさんNGNG
この流れを見るとVC6だけがおかしいみたいに見えるけど、そうじゃない。
0973デフォルトの名無しさんNGNG
>>969
先生〜、まだポインタを理解できてないんで教えてください。
int (*p)(void);
だと int function(void) のような関数名を表すpて意味だと。
(ここの解釈がそもそもコレで合っているのか不安。関数名を格納しているワケではないし。)
int (*(*p)(void))[3];
って 関数へのポインタの配列(要素数 3)p という意味で良いんですか?
0974デフォルトの名無しさんNGNG
>>973
関数のアドレスを格納し、関数を指し示すポインタ
0975デフォルトの名無しさんNGNG
>>973
>って 関数へのポインタの配列(要素数 3)p という意味で良いんですか?
良くない。
(*(*p)()))[2]がintだと言う意味を良く考えろ。
まずpを間接参照し、呼び出し、間接参照し、要素アクセスしているんだから、
pはポインタで、何を指すかと言うと関数で、何を返すかと言うとポインタで、何を指すかと言うと配列で、要素は何かと言うとint
と読む。
まとめると、intの配列(要素数3)へのポインタを返す関数(無引数)へのポインタ
0976デフォルトの名無しさんNGNG
しんすれ
http://pc5.2ch.net/test/read.cgi/tech/1091264964/
0977973NGNG
>>974,975
なるほど、目から鱗ですよ。
ありがとうございました。
0978デフォルトの名無しさんNGNG
class A() { };

A func() {
 A a;
 a.(ry
 return a;
}

const A& a = func();

これでfunc::aの寿命が延びるのは保証されてますか?
0979デフォルトの名無しさんNGNG
まず、func::aなどない。
それと、保証もなにも、aが有効なのは、関数内のみです。
0980デフォルトの名無しさんNGNG
const referenceで受け取った戻り値の一時オブジェクトの寿命が延ばせるって聞いたのですが。
あと、後のaと区別するためのfunc::aは適切な書き方が思いつかないのでそう書いただけです。
0981デフォルトの名無しさんNGNG
>>978
とりあえずコンストラクタ、デストラクタ、コピーコンストラクタに
メッセージ出力させるようなprintf等書いて、どう動作してるか確かめてみ
0982デフォルトの名無しさんNGNG
C言語の質問です。
staticというものが本に出ていたのですが、”静的に・・”と書いてあるだけで
いまいちよくわかりません。
1.一応理解したと考えているもの
void hoge(){
static a=0;
 :
}
上記は関数を抜けても値を忘れない変数と理解しました。
(関数内でしか使用できないグローバル変数みたいなもの?)

2.理解できないもの。下記のbがaとどう違うのか?
int a=0;
static int b=0;
void hoge(){
 :
}

3.理解できないもの。関数の前に付くstaticは普通の関数とどう違うのか?
static void hoge(){
 :
}

よろしくお願いします。
0983デフォルトの名無しさんNGNG
>>982
2のint aはそのソースファイル以外でも使えるグローバル変数。
static int bはそのソースファイル以外からは使えない変数。

3もそのソースファイル以外からは使えない関数となる。
0984デフォルトの名無しさんNGNG
>>982
スコープを勉強ちぅですか

まず、記憶クラス指定子を書かないとautoになる事を前もって抑えておきます。

1.
ソースファイル一つを関数一つと考えるとその通りです。
ただ関数内のグローバル変数という時点でグローバルでは無いわけですが
”変数の範囲”としてはそう考えていいでしょう。

2.
外部変数(グローバル変数)になった時だけ、両方の意味が同じになります。
少しの違いといえばintなら0で初期化されるかされないかの違いぐらいで、
staticを使ったからといって通用範囲が狭くなるわけでもありません。

3.
通常で関数はexternで宣言をされている為
前もってプロトタイプを宣言しておけば外部から参照可能ですが、
static関数はそのファイル単体でしか使えません。
0985デフォルトの名無しさんNGNG
>>982
3に関しては、
static void hoge(void);

void hoge(void)
{
}
でもファイルスコープになるので要注意。
0986984NGNG
少し調べてみたければ
・スコープ、もしくは適用範囲
・外部変数、グローバル変数
などで調べれば色々見つかるでしょう
0987デフォルトの名無しさんNGNG
>>978
const A& a=A(); はヲケ。一時オブジェクトはaがスコープを抜けるまで保持される。
以下はうろ覚え。
const A& a=func(); これだと保持されるのはfuncの戻値のコピーである一時オブジェクト。
0988982NGNG
>>983-986
確認してみたところ、皆さんのおっしゃる動作となりました。
3の日本語がかなり変でしたが返答くれてありがとう。
0989デフォルトの名無しさんNGNG
staticの二義性が混乱をまた呼んでいるな
externを同時に勉強しなさい
0990デフォルトの名無しさんNGNG
>>984
嘘を教えちゃいかん
0991デフォルトの名無しさんNGNG
>>959 >>961
char*      p = "あいうえお", q = "かきくけこ";
と書くヤシが出て来そうだ
0992デフォルトの名無しさんNGNG
992
0993デフォルトの名無しさんNGNG
993
0994デフォルトの名無しさんNGNG
994
0995デフォルトの名無しさんNGNG
995
0996デフォルトの名無しさんNGNG
996
0997デフォルトの名無しさんNGNG
997
0998デフォルトの名無しさんNGNG
998
0999デフォルトの名無しさんNGNG
1000
1000デフォルトの名無しさんNGNG
1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。