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

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

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

【歴代スレ】
1:http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
2:http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
3:http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
4:http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
5:http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (dat落ち)
6:http://pc5.2ch.net/test/read.cgi/tech/1082182233/(dat落ち)
7:http://pc5.2ch.net/test/read.cgi/tech/1086373839/(dat落ち)
8:http://pc5.2ch.net/test/read.cgi/tech/1091264964/(dat落ち)
9:http://pc5.2ch.net/test/read.cgi/tech/1094494997/l50
10:http://pc5.2ch.net/test/read.cgi/tech/1097416187/
11:http://pc5.2ch.net/test/read.cgi/tech/1099190154/
【ラウンジ】質問、回答が長い時はココを使うと見やすい
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

関連スレは>>2-5ぐらい
0002デフォルトの名無しさんNGNG
テンプレはらないの
0003デフォルトの名無しさんNGNG
【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part15
http://pc5.2ch.net/test/read.cgi/tech/1097880265/l50

■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/l50

C++Builder相談室 Part12
http://pc5.2ch.net/test/read.cgi/tech/1099238936/l50

GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/l50

cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/l50

タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/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

Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/l50
0004デフォルトの名無しさんNGNG
【関連スレ(その他)】
C言語なら俺に聞け! Part 95
http://pc5.2ch.net/test/read.cgi/tech/1100956766/l50

C++相談室 part37
http://pc5.2ch.net/test/read.cgi/tech/1098543578/l50

プログラマー軍団がC/C++の宿題を解決します 34代目
http://pc5.2ch.net/test/read.cgi/tech/1100530682/l50

【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/l50

C++は難しすぎ 難易度:2
http://pc5.2ch.net/test/read.cgi/tech/1071697977/l50

C言語の第一歩
http://pc5.2ch.net/test/read.cgi/tech/1031374980/l50
0005デフォルトの名無しさんNGNG
【関連スレ(その他)】
★C言語で遊ぼう!★
http://pc5.2ch.net/test/read.cgi/tech/1028269762/l50

プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/l50

C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50

フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/l50

C、C++の最適化について語るスレ
http://pc5.2ch.net/test/read.cgi/tech/1084676298/l50

ラウンジでC言語
http://etc3.2ch.net/test/read.cgi/entrance/1093006298/l50
0006986=991=993NGNG
一桁(6辺り?)ゲットずさー(AA略)

書いてから言うのもなんだけど、fgetc()の仕様忘れてるから適当に書いちゃったよw
0007デフォルトの名無しさんNGNG
>>1にsageは禁止と書かれているのにsageばかり。
0008デフォルトの名無しさんNGNG
そもそもなんでsage禁止?
0009デフォルトの名無しさんNGNG
gcc 3.3.1 (cygming special) + cygwin 1.5.5 (0.94/3/2) + Windows XP Professional (SP2適用済、RAMは768 MB)で質問です。
--
#define PARAMETER_NUMBER 162905984
#include <stdio.h>

char parameter[PARAMETER_NUMBER];

int main(void)
{
printf("%d\n", sizeof(parameter));
}
--
上記プログラム(といえるほどのものではありませんが)をgccでコンパイルして実行したところ
正常にsizeofの結果を表示してくれるのですが、

#define行を
#define PARAMETER_NUMBER 162905985
とするとコンパイルできるものの実行してもsizeofの結果を返してくれません。

この問題を回避する方法、つまり
グローバル変数領域を確保し、かつ正常にプログラムを実行する方法を
教えていただけませんでしょうか。

メモリは不足していない(と思います)し、また同じプログラムをlinuxやsolarisでコンパイルした場合は
同様の現象は再現できません。
0010デフォルトの名無しさんNGNG
そんな時はmallocなどで動的に作る
0011デフォルトの名無しさんNGNG
LinuxやSolarisではそれが実行できるのか・・・さすがだな。
0012デフォルトの名無しさんNGNG
155MBか
0013デフォルトの名無しさんNGNG
Windowsでも出来るが
0014デフォルトの名無しさんNGNG
このソースで何がしたいんだろう
こっちの方が気になって仕方が無い
0015デフォルトの名無しさんNGNG
cygwinの虫取りを依頼されてまつ
0016デフォルトの名無しさんNGNG
お聞きしたいんですが、VectorでフリーのC言語のソフトを探していたのですが

Visual Windows for BC++
BC++5.5用ウィンドウズ統合開発環境(Borland C++ Compiler 5.5付)

と

C/C++統合開発環境 WideStudio for WIN32
C/C++/Perl/Ruby/Python によるGUIアプリケーション統合開発環境

は、本屋でよく売っているようなC言語の本。たとえば、

「猫でもわかるC言語プログラミング」
http://www.amazon.co.jp/exec/obidos/ASIN/4797325089/qid=1101141909/br=1-1/ref=br_lf_b_0/250-1392570-1726612

を買えば、ソフトの使い方の違いはあっても
使えるものでしょうか?
0017デフォルトの名無しさんNGNG
Cはじめようと思うんですけど、推薦と書のとこを見ても数が多くてどれがいいか分かりません。
どのような組み合わせで買うのがいいですか?
一応大学の理系学部生です。
0018デフォルトの名無しさんNGNG
>>16
日本語喋れ

>>17
実際に見てみて自分に合うやつを一冊買ってそれ仕上げればいいんじゃないか?
0019デフォルトの名無しさんNGNG
>>16 >>17
初心者用の本ならどれも内容はだいたい同じ。書いてあるコードもどんな環境でも通るもののはず。気に入ったものでよいのでは?
定番の本(CならいまだにK&R?)は読んで損はないと思うが、最初からそれだけで理解しやすいかはかなり疑問。

最終的にGUIプロミングがやりたいのであっても、楽をしようとして、いきなりwindowsプログラミングや
C++の本だけ買うのは、おすすめしない。たぶん挫折するし、楽がしたければVB等を覚える方ががマシだと思う
0020デフォルトの名無しさんNGNG
ファイルから検索しようとすると、〜.ncbを開けませんと出て検索できません。
ncbを1度消してビルドしなおしてもだめでした。
どうすれば検索できるようになりますか?
0021デフォルトの名無しさんNGNG
>>9
MinGW(gcc3.4.2)でも動いた
char parameter[PARAMETER_NUMBER] = { 1 }; で初期化したら
巨大な .exe が生成されたがそれでも 162905985 が出力された
0022モウモウNGNG
>>20
.ncb は VC でプロジェクトを開いている間じゅうロックされるので、
検索することはできないと思いますよ。
プロジェクトを閉じれば検索できるでしょう。
(.ncb がどういうファイルなのか知ることのほうが先かも)
0023デフォルトの名無しさんNGNG
まだ始めたばっかりなので、質問内容に不備がありましたら予め失礼申し上げます

ttp://v.isp.2ch.net/up/3cc2006c584d.txt
↑のプログラムをコンパイルしたら
エラー E2206 report-b.c 29: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2206 report-b.c 29: 不正な文字 ' ' (0x8140)(関数 main )
エラー E2379 report-b.c 34: ステートメントにセミコロン(;)がない(関数 main )
エラー E2379 report-b.c 35: ステートメントにセミコロン(;)がない(関数 main )
と、エラーがでて困っています。
しかし、素人目で見て何が間違っているのか、というより合っているはずなのに…と
なって先に進めず、どうすればいいのかがわかりません。
申し訳ありませんが、ここがおかしいからこのエラーが出ると指摘してもらえませんでしょうか?
お願いしますm(_ _)m

ちなみにOSはXP homeでエディタにはAOKさんのC言語を始めよう!というのを使用させて
貰ってます。
0024デフォルトの名無しさんNGNG
>>18>>19
ありがとうございます。
とりあえず、自分に合いそうなダイテルとK&Rを買うつもりでヨドバシまで行ってきます。
0025デフォルトの名無しさんNGNG
>>23
29行目に全角のスペースを使ってるのと、
C言語では
2sin(s)のような直感的な書き方は出来ず、
r / (2*sin(s))と書かなきゃいけない
0026デフォルトの名無しさんNGNG
>>25
素早い返答ありがとうございます!
おかげさまでちゃんとコンパイルすることができました。
これで続きを書くことが出来ます。本当にありがとうございましたm(_ _)m
0027デフォルトの名無しさんNGNG
>>26
そのエディタに2バイト空白を見せる機能がないなら捨てることをお勧めしておく。
ついでに言えば、タブ文字や改行文字も見えるほうがいい。
0028デフォルトの名無しさんNGNG
>>27
メモ帳ってどうやって棄てればいいですか?
0029デフォルトの名無しさんNGNG
>>27
VisualStudioのエディタもデフォルトでは表示してくれないわけだが(´・ω・`)
0030デフォルトの名無しさんNGNG
system32のnotepadを消す
0031デフォルトの名無しさんNGNG
それは「空白を見せる機能がない」というのか?
0032デフォルトの名無しさんNGNG
>>29
それがどうかしましたか?
0033デフォルトの名無しさんNGNG
>>30
.txt っていうファイルを開くとエラーが出てくるようになりました
0034デフォルトの名無しさんNGNG
      r;ァ'N;:::::::::::::,ィ/      >::::::::::ヽ 
.      〃  ヽル1'´        ∠:::::::::::::::::i 
       i′  ___, - ,. = -一   ̄l:::::::::::::::l 
.      ! , -==、´r'          l::::::/,ニ.ヽ 
      l        _,, -‐''二ゝ  l::::l f゙ヽ |、 世の中、メモ帳だけじゃねえんだ 
        レー-- 、ヽヾニ-ァ,ニ;=、_   !:::l ) } ト 
       ヾ¨'7"ry、`   ー゙='ニ,,,`    }::ヽ(ノ  適当なエディタにでも乗り換えろ
:ーゝヽ、     !´ " ̄ 'l,;;;;,,,.、       ,i:::::::ミ 
::::::::::::::::ヽ.-‐ ト、 r'_{   __)`ニゝ、  ,,iリ::::::::ミ     
::::::::::::::::::::Vi/l:::V'´;ッ`ニ´ー-ッ-,、:::::`"::::::::::::::;゙ ,  な! 
:::::::::::::::::::::::::N. ゙、::::ヾ,.`二ニ´∠,,.i::::::::::::::::::::/// 
:::::::::::::::::::::::::::::l ヽ;:::::::::::::::::::::::::::::::::::::::::::/ / 
::::::::::::::::::::::::::::::! :|.\;::::::::::::::::::::::::::::::/ / 
0035デフォルトの名無しさんNGNG
メモ帳で日誌をつくろう!!

1.ドキュメントの 1 行目の左余白に、次の拡張子を入力します。ピリオドを忘れないでください。
.LOG

2.[ファイル] メニューの [名前を付けて保存] をクリックします。
注

このドキュメントを開くたびに、コンピュータの内部時計の日付と時刻がドキュメントの最後に書き込まれます
0036デフォルトの名無しさんNGNG
>>34
オスキナモノ ドウゾ

(=゚ω゚)っ[ edlin, ed ]
0037デフォルトの名無しさんNGNG
>28
ttp://www.vector.co.jp/soft/win95/writing/se041174.html
ttp://www.vector.co.jp/soft/win95/writing/se215749.html
0038デフォルトの名無しさんNGNG
>>28
http://www.vector.co.jp/soft/win95/writing/se041174.html
http://www.vector.co.jp/soft/win95/writing/se215749.html
0039デフォルトの名無しさんNGNG
>>35
.log 小文字だと出ないね
0040デフォルトの名無しさんNGNG
>>35
ありがとうございます。
便利だからこれからもメモ帳使うことにしますた
0041デフォルトの名無しさんNGNG
2バイト空白ってすごいネーミングだな
0042デフォルトの名無しさんNGNG
エディタならサクラエディタかPeggyPADがオススメ。
(Windowsなら)
0043デフォルトの名無しさんNGNG
c++で使われている"?"という文字の意味が分かりません。
どのような意味があるか教えてください。
例
 li.push_back(line.length() > 80 ? line.substr(0, 80) : line); 
0044デフォルトの名無しさんNGNG
三項演算子

A ? B : C
Aを評価し、真ならBを、偽ならCを評価する。
0045デフォルトの名無しさんNGNG
>>43
> 例
>  li.push_back(line.length() > 80 ? line.substr(0, 80) : line);

li.push_backに渡される引数が、line.length() > 80の評価結果によって
変化する。
line.length() > 80がTRUEであれば、line.substr(0, 80)
line.length() > 80がFALSEであれば、lineが引数として渡される。

って、丁寧に説明書いて手気づいたのだが、これって、
最近そこらにマルチされてるテキスト行長によるソートの
課題の一部なのでは、、、、
0046デフォルトの名無しさんNGNG
部分的な質問を投げてるなら、自力でやる気があるんだろうから、結構な事じゃないか。
0047デフォルトの名無しさんNGNG
その通り、俺が答えたコードの一部。
http://pc5.2ch.net/test/read.cgi/tech/1100530682/303
0048●NGNG
テスト
004945NGNG
>>47
なるほど、、

ずいぶん前に答えは出とるのね、、、、
# ただ、この処理だと、”同じ長さの行は入力順"てのを
# 満たせない気もしないではないが、、、
0050デフォルトの名無しさんNGNG
222 :デフォルトの名無しさん :04/11/23 21:20:54
>118
ちょと解読&考えてみた。

・作業用に最大80個のファイルを作成する
・文字の数によって、1〜80の作業ファイルのいずれかに追記する。
 何文字の行があるのか0と1で表す配列で持つ(領域80個)
・行数の少ないところから、作業用ファイルの最初から、順に出力する

これ、メモリほとんど使わないYo!
0051デフォルトの名無しさんNGNG
vectorに入れてstable_sort使えばいい。
005247NGNG
>>49
list<>.sort()は安定的。
23.2.2.4 list operations -31
Notes: Stable: the relative order of the equivalent elements is preserved.
0053デフォルトの名無しさんNGNG
std::list に stable_sort がないのが前から疑問だったけど、
std::list::sort 自体が stable だったのか にゃんにゃん
0054デフォルトの名無しさんNGNG
>>53
つー事は多分内部的にはマージソートだにゃ
0055デフォルトの名無しさんNGNG
つ が差し出す手に見えてしまう・・・
0056デフォルトの名無しさんNGNG
>>55
つ�I
0057デフォルトの名無しさんNGNG
STLで、vector A の途中の要素を削除する時は
その要素の番号をiteratorで指さなきゃならないと思うのですが、
今、別のint型のvector B に、削除したいVector Aの要素の番号が
何個か入っているとしたら、どんな感じで書けばよいのでしょうか。
vectorBの内容はvectorAのサイズ内の数値が
(5,2,4,8)等のように適当に入っています。
0058デフォルトの名無しさんNGNG
vector<int>::iterator it = B.begin();
vector<int>::iterator end = B.end();
for (; it != end; ++it)
A.erase(A.begin() + *it);
0059デフォルトの名無しさんNGNG
>>58
それ先頭から削除されるたびにインデックスがズレてバグらないか
0060デフォルトの名無しさんNGNG
Bを先に降順にソートしないと駄目だな
効率悪いけど
0061デフォルトの名無しさんNGNG
%dが整数などを表示する物だってことをかじる程度に知っているのですが、%5dというのはどういうものなのでしょうか。
0062デフォルトの名無しさんNGNG
関係ないんですが
ちょっと違うことで質問があります

今メモ帳を使ってプログラム書いてるのですが
誤字や;の付け忘れなどがあった時 
コンパイル前にその誤字の部分が赤く又は色がついて表示される
エディタって無いものでしょうか?
0063デフォルトの名無しさんNGNG
>>61
そんな細かいことをいちいち質問する気か
0064デフォルトの名無しさんNGNG
>>61
もう少しかじれ

>>62
画面のプロパティ→デザイン→ウインドウの文字 を赤にする
0065デフォルトの名無しさんNGNG
>>61はマルチ
>>62
メモ帳ではなく、統合開発環境を使え。エディタの問題ではない。
0066デフォルトの名無しさんNGNG
>>64
>>65
サンクス

BCC Devを使ったりしてるんだけど
何かいまいちなのよね

Visual C++.netは使いやすいです?
0067デフォルトの名無しさんNGNG
BCCDevはクリックしたところに無条件でカーソルが移動するのがウザい…
0068デフォルトの名無しさんNGNG
>>61
APIスレで答えは出ているじゃないか。
0069デフォルトの名無しさんNGNG
>>65
なんで?
使いやすいエディタ使えばいいじゃん。
007057NGNG
>>58-60
ありがとう!
ソートしたら上手くいきました。
0071デフォルトの名無しさんNGNG
>>69
シンタックスエラーを色分け表示してくれるエディタなんてあるの?
007245NGNG
>>52
勉強になりマスタ。
0073デフォルトの名無しさんNGNG
>>71
コンパイル前に、だからエディタでの話でしょ。
しかし、「;付け忘れ」を判定するのは難しそうだが。そういうエディタは実際あるんですか?
;付ける間まで注意表示みたいなのをいちいち出されるのもウザそう。
0074デフォルトの名無しさんNGNG
たとえば
WM_PAINT:
としようとして
WM_PAIMT:
にしてしまったら Mもところだけ色がつくとか
そういう機能がついている物
なさそう?
0075デフォルトの名無しさんNGNG
.NETの開発環境でシンタックスエラーらしき個所に波線が
付いたような。VS 2005だけだっけか?
0076デフォルトの名無しさんNGNG
>>71,73
emacsやその派生ならできるでしょ。
マクロを書く必要はあるけど。
ただ、>>62に使いこなせないのは間違いない。
もちろん俺にも使いこなせない。

>>74
そういう場合にMのところだけに色ってのは難しいと思うけど、
あらかじめ登録した語の色を変える機能がついたエディタは多いから、
主要なメッセージ名や構造体名は登録しておいたらいいんでは?
0077デフォルトの名無しさんNGNG
>>75
VS.NET2002、2003でもVC#では出るんじゃないかな
0078デフォルトの名無しさんNGNG
>74はスペルチェッカーの領分だな。英文ワープロソフトなら大抵ついてる機能だ。
後は辞書をカスタマイズすれば無問題。
0079デフォルトの名無しさんNGNG
a[0]=0
a[1]=1
a[2]=2
a[3]=3
という配列があるとします
この配列のa[1]=1がいらなくなったので
a[0]=0
a[1]=2
a[2]=3
のように効率よく変換できる方法ってないのでしょうか?
頻繁にこういう操作を繰り返さないとだめなんで…
0080デフォルトの名無しさんNGNG
realloc
C++なら問答無用でstd::list
0081デフォルトの名無しさんNGNG
>>80
ご返答有り難うございます
std::listを調べてみます
0082デフォルトの名無しさんNGNG
アルゴリズムがほとんど理解できてないのに言語を
勉強するのは無理ですかね?
0083デフォルトの名無しさんNGNG
>>82
両方並行して
0084デフォルトの名無しさんNGNG
>83

今クラスである語が終盤を迎えていて来週から言語なんですが、
さっぱり分からずって感じです。独学でならそのようにできると思うのですが・・・

とりあえずある語を完璧に理解することは必要ということですよね?
0085デフォルトの名無しさんNGNG
アルゴリズムなんて全く理解する必要ないよ。
0086デフォルトの名無しさんNGNG
それはないでしょw
0087デフォルトの名無しさんNGNG
アルゴリズムなんてのはどっかの数学者が勝手に考えて
どっかの低級PGが勝手に実装してくれるもの
自分は使い方だけ知ってりゃいい。
0088デフォルトの名無しさんNGNG
技術は陳腐化するが物の考え方は永遠である
0089デフォルトの名無しさんNGNG
>88

結局ある語的思想がないと言語は扱えないってことですよね?
0090デフォルトの名無しさんNGNG
>>89
お前の言ってるある語って具体的に何よ。
0091デフォルトの名無しさんNGNG
流れ図てやつです。完成図をもとに流れ図を描くのです。

学生身分に答えていただいてすいません
0092デフォルトの名無しさんNGNG
べつにいわれたとおりのものつくれりゃいいよ
0093デフォルトの名無しさんNGNG
フローチャート如きでアルゴリズムを語るとは片腹痛いわ。
0094デフォルトの名無しさんNGNG
フローチャートで表現できないアルゴリズムの例を挙げてみて
0095デフォルトの名無しさんNGNG
gammaという変数はつかえないのですか
0096デフォルトの名無しさんNGNG
>>96
使えます
0097デフォルトの名無しさんNGNG
>>97
もちろん使えますよ。
0098デフォルトの名無しさんNGNG
superという変数はつかえないのですか!(怒
0099デフォルトの名無しさんNGNG
>>98
使えます
0100デフォルトの名無しさんNGNG
>>98
つかえないのは
あなた自身です
0101デフォルトの名無しさんNGNG
>>99-100
空気読め
0102デフォルトの名無しさんNGNG
>>101は使えません
0103デフォルトの名無しさんNGNG
>>84
なんだかアルゴリズムの意味自体よく分かってなさそうだが
お前の言うアルゴリズムはプログラマにとって絶対必要なものではないかもしれない。
けれどお前がテスト通るためには必要なんだろ。だったらあきらめて勉強しろ
0104デフォルトの名無しさんNGNG
>>103
辞書の内容を覚えていなくてもいい
辞書のひき方を覚えていればいいのだ

って言葉を思い出した
0105デフォルトの名無しさんNGNG
学生のころは辞書の内容を理解することに努め
社会人になったらその辞書をすぐに引き出せるようにしてればいい
みたいなのだよね

話は戻って、アルゴリズムは快適になるための道具
プログラムを組むには必須ではないけど、あれば便利
なので、プログラムになれてきたらその必要性を感じて来るんジャマイカ?
0106デフォルトの名無しさんNGNG
そうだよな。だから辞書ソフトをパソコンにインストールしてある。
0107デフォルトの名無しさんNGNG
MS-IMEの辞書ならインストールしてあるぞ。
0108デフォルトの名無しさんNGNG
コンパイルしたら、再宣言の型が一致しないとでましたが、どういうことが考えられるでしょうか
0109デフォルトの名無しさんNGNG
int以外の関数を、宣言せずに使用した

これが原因でなくても(勉強中は特に)、
コンパイラのオプションで、警告は最大にしておくこと。
0110デフォルトの名無しさんNGNG
>>108 マルチャン、赤いきつねと緑のたぬき
0111デフォルトの名無しさんNGNG
ファイルから5個の数字を読み取り、それらを表示させる
のにはどうすればいいんですか?
0112デフォルトの名無しさんNGNG
↑ 抽象的ですいません。
Cでfprint等を使ったやつです。
0113デフォルトの名無しさんNGNG
>>111 作ったところまで見せて。
0114デフォルトの名無しさんNGNG
>>113
 遅くなりました。

#include <stdio.h>
#define N 5
main()
{
float data[N];
int i,ndata=N;
char filename[100];
FILE *fp;

printf("input filename =");
scanf("%s",filename);


fscanf(fp,"%5d\n",&ndata);
printf("%5d\n",ndata);
for(i=0;i<ndata;i++){
fscanf(fp,"%f %f",&data[i]);
printf("%5.1f %5.1f\n",data[i]);
}
fclose(fp);
}
0115デフォルトの名無しさんNGNG
>114
微妙すぎるw

・fp いつオープンする?
・scanf() %5dの5は必要?
・%f%f なにがしたいの?
0116デフォルトの名無しさんNGNG
ワラタ
0117デフォルトの名無しさんNGNG
>>114
とりあえず突っ込むところ多すぎ。初心者用の本を読み直しましょう。
それと、読み取るファイルの内容や、どのように表示したいかも書かないと答えにくいよ。

学校の宿題なら専用スレへどうぞ
0118デフォルトの名無しさんNGNG
書籍の質問ですが
ポインタの書籍で柴田さんと前橋さんの書籍がありますが
どちらの方がおすすめですか?
0119デフォルトの名無しさんNGNG
>>118
愚問だな
両方買って自分で考えろ
0120デフォルトの名無しさんNGNG
VC++.netを2万だして買って来たよ

なかなか使いやすいじゃない
コンパイルエラーのところダブルクリックするとそこに飛んでくれるし
Ctrl+F5でテストランが出来るのがすげぇ

メモ帳+コマンドプロンプトでやってたときがバカばかしいな・・・

0121デフォルトの名無しさんNGNG
>>120
ネタだとしてもおもしろくない
0122デフォルトの名無しさんNGNG
ネタで埋めないと、このスレももたなくなった?
0123デフォルトの名無しさんNGNG
ただの自慢か日記書き込みだろうと推測してみる
0124デフォルトの名無しさんNGNG
>>120
それが喪前にとってのVC++.netの価値なわけだな。
マクロエディタと同程度か。
0125デフォルトの名無しさんNGNG
>>120
入門者なんだろ。その調子で頑張れ。
0126デフォルトの名無しさんNGNG
関係ないが、.NETってC++を使う利点がどんどん無くなっていくみたいで、なんだか嫌いだ
0127デフォルトの名無しさんNGNG
C#のために作られたような言語だからな。当然の流れだな。
0128デフォルトの名無しさんNGNG
いやVBのためだろ (w
そのうちWINではC++覚える利点が全く無くなったりしてな。
ま、俺は当分MFCとCOMでやっていくつもり。
0129デフォルトの名無しさんNGNG
VB好きのM$がC/C++を絶滅させるために作った
0130デフォルトの名無しさんNGNG
C#はMSがJavaともめたからできた言語なんだが。
0131デフォルトの名無しさんNGNG
mainの中でスレッドを作って、そのスレッドをmainから殺したくて、
pthread_killを使いたいのですが、その生成したスレッドだけでなく、
mainまで死にます。
mainは生かしたままで、そのスレッドのみ殺すにはどうすればいいでしょうか。
0132デフォルトの名無しさんNGNG
スレッドをどうやって作ったの?
0133デフォルトの名無しさんNGNG
pthread_t th;
pthread_create(&th, ...);
です。

pthread_kill(th, 9);
で、mainまで落ちます。
0134デフォルトの名無しさんNGNG
windows+VC環境で
while(!kbhit());
と等価なLINUX+gccのコードを教えてくだされ。
0135デフォルトの名無しさんNGNG
C言語ってなんですか?
0136デフォルトの名無しさんNGNG
>>134
int kbhitForLinux(void);
while (!kbhitForLinux());
/* ここにkbhitForLinux()の実装を書こうとしたが余白が足りないので割愛 */
0137デフォルトの名無しさんNGNG
>>136
フェルマーみたいな奴だな
0138デフォルトの名無しさんNGNG
>135

C programming language
0139デフォルトの名無しさんNGNG
>>133、>>134と、なんだかCやC++についての質問じゃなくてgcc固有の質問が多いな
0140デフォルトの名無しさんNGNG
>>139
gcc固有じゃないよ
0141デフォルトの名無しさんNGNG
C言語やってる人は

ローマ字だけでオナニーできるって聞いたんですが
本当なんですか?
0142デフォルトの名無しさんNGNG
>>141
@
/(x)/
y
| |

これで抜けます。
0143デフォルトの名無しさんNGNG
 @
/(x)/
 y
 | |
0144デフォルトの名無しさんNGNG
ローマ字じゃねぇyp

私的解釈として
変数名や関数名にローマ字で宣言してるソースを見て
ナニってるということにしますた(`・ω・´)
0145デフォルトの名無しさんNGNG
>>144
ローマ字以外の何で宣言するの?
アンダーバーと数字だけ?
0146デフォルトの名無しさんNGNG
英単語
0147デフォルトの名無しさんNGNG
もしかして、ローマ字とローマ字綴りを混同しているのかな?
0148デフォルトの名無しさんNGNG
そもそもローマ字ってなんだ?
0149デフォルトの名無しさんNGNG
ソースの文字列をローマ字という表現では不十分なので(記号もあるので)
ローマ字=ローマ字綴りと私的解釈をしたわけで…(´・ω・`)
0150デフォルトの名無しさんNGNG
はじめまして。Cで、数学の関数などをグラフ化したいのですが、やり方がわかりません。
いろいろ検索してみたのですが、どうもやり方の書いてあるところを発見できませんでした。
教えてください!
OSはXPで、BCCを使っています。
0151デフォルトの名無しさんNGNG
>>150
Windows プログラミングを勉強しないとだめかな。
簡単なライブラリならそこらへんに落ちてるかもしれませんが。
0152デフォルトの名無しさんNGNG
>>150
手っ取り早くグラフを書きたいだけならテキストでデータを吐き出して
グラフィックはグラフソフト(Excel gnuplot R)に任せるとか?
Excelみたいにウィンドウにグラフを表示したいんならこれじゃだめだけど
0153デフォルトの名無しさんNGNG
glutが楽だと思う
ただ、Cが"まとも"に出来ればの話だが

OpenGLスレ
http://pc5.2ch.net/test/read.cgi/tech/1100085657/
0154デフォルトの名無しさんNGNG
親切に教えていただいてありがとうございます。
まだ全くの初心者なので、とりあえず、Windowsプログラミングを勉強してみます!
0155デフォルトの名無しさんNGNG
Windowsプログラミングを「ついでに」勉強する神キター
0156デフォルトの名無しさんNGNG
別にWindowsプログラミングなんて「ついで」でよいのではない?
どうせすぐに変わるものなんだから。
本質でもないし。
0157デフォルトの名無しさんNGNG
アフォはスルー白
0158デフォルトの名無しさんNGNG
数字の2にすごい興奮する
0159デフォルトの名無しさんNGNG
VC++.NETでGUIプログラミングをしたいんですけど、
SDKとMFCと.net Frameworkのどれがいいんでしょうか?
楽なほうがいいんだけど。
0160デフォルトの名無しさんNGNG
>>159
一番楽なのは .net Framework だろう。
その次に MFC で、最後に SDK。
WTL というものもあるが。
0161デフォルトの名無しさんNGNG
二次元配列の要領で、vectorの要素としてint型のsetを持たせたいのですが、
そういうのが可能だとしたら、どうやって宣言を書けばよいでしょうか。
0162デフォルトの名無しさんNGNG
std::vector<std::set<int> >
0163161NGNG
>>162
ありがとうございます。VC6++使ってるんですが、

std::vector<std::set<int> >
             ↑のスペースって必要なんでしょうか?
ただの「決まり」ってことで覚えればよいですか?
スペース入れないとコンパイルエラー、
入れると警告が沢山出るもののエラーはでません。
0164デフォルトの名無しさんNGNG
>>163
スペース入れないとコンパイルエラーになるのは、>> 演算子と解釈されるから
0165デフォルトの名無しさんNGNG
どうしてもスペースを開けるのが嫌ならtypedef使え。
typedef std::set<int> set_int;
std::vector<set_int>
0166161NGNG
>>164>>165
なるほど勉強になりました。ありがとうございました。
あと、警告は#pragma warning (disable:4786)で黙らせる事ができました。
0167デフォルトの名無しさんNGNG
質問です。VC++ 6.0 を使っています。

SetTimer(1, 10, 0) として、10ミリ秒ごとに OnTimer を実行させているのですが、
計測したところ1秒間に64回ほどしか実行されていませんでした。
これはPCの処理能力の問題なのでしょうか? それとも SetTimer の精度の問題でしょうか?
WM_TIMER メッセージがメッセージキューにたまっているようには見えませんでした。

また、これを解決して確実に1秒間に100回処理を行なわせる方法はないでしょうか?
0168デフォルトの名無しさんNGNG
はじめまして、redwolfといいます。
皆様に助けてもらいたいのですが、今,VC++6.0 MFCでプログラム
を作成しています。

VC++6.0 MFCの月間予定表を使用し、日付を選択させれたら
テキストに年と週番号を表示するプログラムを作成しています。

ですが、どうしても、選択した日付が表示されません。
ソースは

SYSTEMTIME tm;
CString strYear; // 表示用文字列

     CTime t; // 時間を扱うクラス
t = m_month.GetCurSel(&tm);
strYear = t.Format("%Y%U");//
m_ed1.SetWindowText(strYear); // 表示

を実行すると例えば2004年11月26日を選択しても1970と表示されます。
休日ですがみなさんのお力を私に貸してください。
お願いします。
0169デフォルトの名無しさんNGNG
知っているがお前の名前が気に食わないっつってんだよ。マルチが。
0170デフォルトの名無しさんNGNG
>>167
ない
0171デフォルトの名無しさんNGNG
>167
精度の問題、そもそもWM_TIMERメッセージの優先度も低い。
精度の高い処理を行いたいなら、TimeGetTimeなりを使うと良いよ
0172デフォルトの名無しさんNGNG
>>168
なんだそれ?
よくそこまででたらめに作れるな。
関数の仕様ぐらい嫁
0173デフォルトの名無しさんNGNG
>>172
なんだそれ?
よくマルチにレス出来るな。
板の仕様ぐらい嫁
0174デフォルトの名無しさんNGNG
>>160
.net frameworkが一番楽なのはいいけれど
覚えやすさで言えば次はsdkだろ。ひたすら細かい処理書かないといけないから面倒なだけで
使い方自体は覚えやすいと思うぞ
それよりもMFCの方がクラスライブラリの仕様とか理解するのが初心者には面倒だと思う。
意味も分からず、こう書けって説明するなら楽だが。
0175167NGNG
>>171
ありがとうございます、timeGetTime() を使ってうまくいきました。
0176デフォルトの名無しさんNGNG
Windowsでコマンドラインプログラムをコマンドプロンプトを表示させずに実行させる方法を教えてください。
できれば、コマンドプロンプトで実行した時に表示される内容も取り込めるとよいのですが。
0177デフォルトの名無しさんNGNG
ウイルスでも作るの?
0178デフォルトの名無しさんNGNG
jpeg2psのフロントエンドを作りたいのです
0179デフォルトの名無しさんNGNG
説明面倒なんで「SetStdHandle CreateProcess」でググれ。
0180デフォルトの名無しさんNGNG
そういえばCDexからLameとか外部エンコーダ呼ぶときに
DOS窓非表示の設定があるな
オープンソースだしソース見ればわかるだろう
0181デフォルトの名無しさんNGNG
>>180
ソース=ドキュメントですね(`・ω・´)
0182デフォルトの名無しさんNGNG
176の親です。ありがとうございました。
0183デフォルトの名無しさんNGNG
VC++で計算した数値を引数で表示したいんですが、printfで表示されません。だからMessageBoxを使って表示したいんですがエラーがでます。どうしたらいいんでしょうか?どなたか分かる人教えてください。
0184デフォルトの名無しさんNGNG
char str[10];
wsprintf(str, "%d",num);
MessageBox(hwnd,str,"suuji",MB_OK);
0185デフォルトの名無しさんNGNG
MessageBoxの解決する前にすることあるだろ
0186デフォルトの名無しさんNGNG
マルチするにしたって、なぜあそこを選んだのかが不思議だな…

C++は難しすぎ 難易度:2
http://pc5.2ch.net/test/read.cgi/tech/1071697977/504
0187183NGNG
何ですか?教えてください
0188デフォルトの名無しさんNGNG
マルチはだめでちゅよ
0189デフォルトの名無しさんNGNG
>>186
そこだけじゃなく、あちこち書いているっぽい。

>>183
>188も言うようにマルチはダメ。
VC++でもコンソールアプリにしておけば普通にprintf()も使える。
GUIでやりたいのかCUIでやりたいのか、そこをはっきりさせた方がいい。
0190デフォルトの名無しさんNGNG
Windowsのメインの音量を変更するにはどうしたらよいでしょうか?
0191デフォルトの名無しさんNGNG
>>190
勝手にいじるな

以上
0192デフォルトの名無しさんNGNG
te
0193デフォルトの名無しさんNGNG
>>176
ぐぐる、Windowsサービス
0194194NGNG
はじめまして、C++の初心者です。
mainとファンクションを5つほどつくりました。
mainではファンクション1だけを呼び出します。
ファンクション1の中で必要に応じてファンクション2〜5を呼び出したいのですが、
全部実行されてしまいます。
どのようにすれば個別のファンクションだけ呼び出せますか?
今はこんな感じです。
main
{Function1()}

Function1()
{int chose;
if(chose =2)
Function2()
if(chose=3)
Function3()
・・・・・

それぞれのファンクションではテキストファイルを読み込み
それをブラウザに表示させる動作を行います。
テキストファイルを表示語はファンクション1にもどりたいです。

上手く説明できなくて申し訳ありませんが、どなたか解決方法を教えてください。
環境はDevC++のバージョン4.0です。
0195デフォルトの名無しさんNGNG
「変数chooseが3ならば」は、「if (choose==3)」と表す。「choose=3」は代入。
初心者がよくやる間違い。
0196194NGNG
申し訳ありません、訂正です。
void Function1() 今はこのようになってます。
{int chose;       これで2を入力するとファンクション2にいけるのですが
if(chose =2)       3を入力してもファンクション2にいってしまいます。
{Function2()}        なぜなのかわかりません。
elseif(chose=3)
{Function3()}

ファンクション1〜5はすべてvoidです。
0197デフォルトの名無しさんNGNG
だーかーらー、「chose=2」は「choseに2を代入」と言う意味。
「if (chose = 2) 〜」は「chose = 2; if (chose) 〜」と同じ意味。
「if (2) 〜」は「if (true) 〜」と同じ意味。よって「〜」は常に実行される。

君、いくら何でも素質ないよ?
0198194NGNG
>195さま
変えてみましたが変化がありません、もう少し詳しく書いてみます。
main{ Function1()}
void Function1()
{int chose =0; cin >> chose;
if(chose =2)
{Function2();}    こんな感じです。
else if(chose =3)   それともう一つ質問ですが、
{Function3()}     Function2〜5からFunction1に帰りたいのですが
           そのような場合はどうすればいいのでしょうか?
return Function1();をFunction2()にいれて見ましたが反応してません。



0199デフォルトの名無しさんNGNG
もはや釣りとしか思えない
0200194NGNG
>197
素質がないのはわかってます。
ご指摘どうも。
やりたくなくてもやらなくてはならないのでやってます。
switchつかったほうがめんどくさくないですかね?
0201194NGNG
>>199
本気です。
プログラムなんてちんぷんかんぷんです。
本読んでも理解できません。
関わりたくないですがやらなければなりません。
0202デフォルトの名無しさんNGNG
if(chose=2) のところを if(chose==2) に変えろ
     ↑             ↑
  =がひとつ!!      =がふたつ!!!!!!!
0203デフォルトの名無しさんNGNG
>>198
いいかげんにしる!
=は代入だっつってるだろ

int main(void) {
 Function1();
 return 0;
}

void Function1(void) {
 int chose = 0;
 cin >> chose;
 if(chose == 2) Function2();
 else if(chose == 3) Function3();
}
0204デフォルトの名無しさんNGNG
ネタなんだろうけどちょっとかわいいな。
クリックリしたい・・・。
0205デフォルトの名無しさんNGNG
>>176
stdout, in, errをパイプで繋ぐ。
0206デフォルトの名無しさんNGNG
何気に CreateFile っていろんな機能が詰まってるよな。
0207デフォルトの名無しさんNGNG
RS232Cの制御とかな。すれ違いだけど。
0208デフォルトの名無しさんNGNG
ヘッダファイルの命名についてですが、ファイル名に何らかのプレフィックスを付けた方が良いですか?
#include "io.h" /* or -I/path/to/src <io.h> */
#inlcude "utils.h"
#include "private.h"
と
#include "xyz_io.h"
#include "xyz_utils.h"
#include "xyz_private.h"
のどちらが好ましいか、と聞きたくなったのです。
それとも
 src/ *.c ソースファイル
 include/
 include/xyz/ *.h ヘッダファイル
のようなディレクトリ構成にして
#include <xyz/private.h> /* -I/path/to/include */
の用にした方がよいでしょうか?
0209デフォルトの名無しさんNGNG
>>208
好みで決めればいいんじゃない?
大きめのプロジェクトなら後者が多い気はするけど。
0210デフォルトの名無しさんNGNG
>>209
後者ってのはディレクトリで分ける方な!
0211194NGNG
>>203

ありがとうございます。
できました^@^!
お手数かけてもうしわけありませんでした。
0212デフォルトの名無しさんNGNG
>>194
>>211
ところで main に型書かなくても動くのか?

あと、初心者だから仕方ないけど、
インデントとか空白も意識しような。
色々なパターンがあってどれがいいとは言えないけど、
ひとつのプロジェクト内では統一するに越したことはない。
0213デフォルトの名無しさんNGNG
>>212
関数の戻り値の方なら書かなくても動く。
がしかし、>194はそれ以前にプログラムとしては省略しすぎなので評価する意味がない。
0214デフォルトの名無しさんNGNG
>>212
お前も初心者だろ。
0215デフォルトの名無しさんNGNG
STLの ofstreamで クラスオブジェクトを丸ごとバイナリファイルに保存したいんですが、
そのクラスにvectorのメンバ変数が存在します。

このままだと普通に保存できないんですが、どうしたらいいんでしょうか?
このvector変数はprivateになってます。

STLのスレに書いたんですが誰も来ないのでこっちにしました
0216デフォルトの名無しさんNGNG
その短気さが身を滅ぼす
0217デフォルトの名無しさんNGNG
>>216

もう滅ぼされてます;; なので助けてください
0218デフォルトの名無しさんNGNG
もう少し向うで我慢してたら良かったのに。
おいらが回答しようかと思ってたんだが…

マルチポストしたから、もう回答してやんない。残念でした。
0219デフォルトの名無しさんNGNG
>>215ですが 解決しました。 ほっ
0220デフォルトの名無しさんNGNG
Cによる四則演算の練習をしています。

演算結果に 1.#QNB
と出るのですが何を意味しているのでしょうか?
とんでもなく大きな数字にでもなってしまったとかですか?

コンパイラVisual C++ 6.0を使っています。
0221デフォルトの名無しさんNGNG
コード書け
0222デフォルトの名無しさんNGNG
int型の配列aがあったとして、a["A"+1]はどういう意味になるんですか?
"A"のASCIIコード+1番目の配列ということでしょうか?
0223デフォルトの名無しさんNGNG
"A"はどっかに確保された文字列"A"へのポインタ。
それに+1なのでAのあとの\0を指すポインタが[]内の式の結果。
式全体の意味は無茶苦茶。多分単なるバグ。
0224デフォルトの名無しさんNGNG
ただのエラーになる
0225デフォルトの名無しさんNGNG
(-"A"-)
寝ている赤ちゃん
0226デフォルトの名無しさんNGNG
ちょっと無理が
0227デフォルトの名無しさんNGNG
>>225
かっわい〜!
GJ!
GJ!
0228デフォルトの名無しさんNGNG
(-"u"-) こっちのほうがいい
0229デフォルトの名無しさんNGNG
でつ <>>228 Charlie?
0230デフォルトの名無しさんNGNG
スレの流れが読めん香具師が多いな。
"A"のことを語っているのに
必死で反論しているのは恥ずかしいぜ
0231デフォルトの名無しさんNGNG
( Д ) ゚ ゚
0232デフォルトの名無しさんNGNG
オール・フォー・A
0233222NGNG
>>223
うーん、そうですか・・・
0234デフォルトの名無しさんNGNG
Aのアスキーコードにしたけりゃシングルクォーテーション
a[ 'A' + 1 ]
0235デフォルトの名無しさんNGNG
('A')
0236デフォルトの名無しさんNGNG
テンプレートで少々つまづいているのですが
どなたかご教授願います.

template <class T> class Hoge
{
public:
T *GetNext(void);
private:
T *abc;
}

T *Hoge<class T>::GetNext(void)
{
return abc->GetNext();//不可能?
}

GetNext()を実装した型をTとして渡しても
こういった使い方は出来ないものなんでしょうか?
0237デフォルトの名無しさんNGNG
abcにはなに入れてんだ?
あと void は消せ
0238デフォルトの名無しさんNGNG
return this->GetNext();
にするか、
T *abc; の private: を public: にするか、
どっちかだろ?
0239デフォルトの名無しさんNGNG
m9['A']
0240デフォルトの名無しさんNGNG
ドーン
0241236NGNG
すみません、ドキドキしながら書き込んだら全然違うこと書いてました
書き直したので何卒もう一度お願いします。

class HogeNode
{
public:
void SetNext(HogeNode *next) {this->next = next;}
private:
HogeNode *next;
}

template <class T> class HogeList
{
public:
void Add(T *t);
private:
T *first;
T *last;
}

void Hoge<class T>::Add(T *t)
{
last->SetNext(t);//不可能?
last = t;
}

こんな感じで匿名(?)のTのメンバ関数を呼ぶことは不可能なのでしょうか?
0242236NGNG
void Hoge<class T>::Add(T *t)
ではなく
void HogeList<class T>::Add(T *t)
でした... すみません
0243デフォルトの名無しさんNGNG
>こんな感じで匿名(?)のTのメンバ関数を呼ぶことは不可能なのでしょうか?
可能

>>242
>void HogeList<class T>::Add(T *t)
void HogeList<T>::Add(T *t)
だよ
0244236NGNG
>>243
<T>に変えてみたのですがコンパイルで蹴られてしまいます
error C2027: 認識できない型 'T' が使われています。

もしかして別の問題なのでしょうか?
ちなみにコンパイラはVC7.1です
0245デフォルトの名無しさんNGNG
>>244
これでどうだ?
class HogeNode
{
public:
void SetNext(HogeNode *next) {this->next = next;}
private:
HogeNode *next;
};
template <class T> class HogeList
{
public:
void Add(T *t);
private:
T *first;
T *last;
};
template <class T>
void HogeList<T>::Add(T *t)
{
last->SetNext(t);//不可能?
last = t;
}
0246236NGNG
>>245
すると今度はリンクできないようです.
error LNK2019: 未解決の外部シンボル

ますます別の問題のような気がしてきました...
0247デフォルトの名無しさんNGNG
>>246
>ますます別の問題のような気がしてきました...
そう思う

>error LNK2019: 未解決の外部シンボル
のあとは?
0248236NGNG
ちなみに呼び出し元では
hogeList = new HogeList<HogeNode>();
という風に書いています.
0249236NGNG
>>247
続きはこんな感じです.
Test error LNK2019: 未解決の外部シンボル "public: __thiscall HogeList<class HogeNode>::HogeList<class HogeNode>(void)" (??0?$HogeList@VHogeNode@@@@QAE@XZ) が関数 "public: __thiscall Test::Test(void)" (??0Test@@QAE@XZ) で参照されました。
0250デフォルトの名無しさんNGNG
>>249
>public: __thiscall HogeList<class HogeNode>::HogeList<class HogeNode>(void)
これはHogeListのコンストラクタだよね
Test::Test(void)の実装が書かれたファイル名と245の内容が書かれたファイル名は?

それと
> template <class T>
> void HogeList<T>::Add(T *t)
> {
> last->SetNext(t);//不可能?
> last = t;
> }
は
template <class T>
inline
void HogeList<T>::Add(T *t)
{
last->SetNext(t);//不可能?
last = t;
}
に
0251236NGNG
>>250
HogeListに書いていたコンストラクタを消して
コンパイラに自動生成してもらったらビルドできました

ということはコンストラクタの書き方が間違ってたっぽいです

この場合コンストラクタはどう書けばいいのでしょうか?

> それと
> > template <class T>
> > void HogeList<T>::Add(T *t)
> > {
> > last->SetNext(t);//不可能?
> > last = t;
> > }
> は
> template <class T>
> inline
> void HogeList<T>::Add(T *t)
> {
> last->SetNext(t);//不可能?
> last = t;
> }
> に
EfficientC++にもinline書いてました
付け忘れてはいけませんね
0252デフォルトの名無しさんNGNG
>>251
こんな感じ
template <class T>
class HogeList
{
public:
void Add(T *t);
HogeList ();
private:
T *first;
T *last;
};
template <class T>
inline
HogeList<T>::HogeList ()
{
}
0253236NGNG
>>252
別段普通ですよね...
それなのになぜかリンクできないorz

ここまでくれば何かの見落としだと思うのであとは自力で頑張ってみます
色々と勉強になりました
ありがとうございました
0254デフォルトの名無しさんNGNG
gcc3.4.2で通った

template <typename T>
class HogeList
{
public:
void Add(HogeList<T>* t) {
this->first = t;
}
HogeList();
private:
HogeList<T>* first;
HogeList<T>* last;
};

template <typename T>
inline HogeList<T>::HogeList() {}


int main()
{
HogeList<int> hl;
hl.Add(new HogeList<int>());
}
0255デフォルトの名無しさんNGNG
うほっいい流れ
0256236NGNG
236です
その後、悪戦苦闘したのですが、
どうやらテンプレートの場合は関数の定義を
ヘッダファイルの中に書かないといけないのですね。

リンク時にコンストラクタがどうしても見つからない理由が
やっとわかりました。
0257デフォルトの名無しさんNGNG
今日の格言
「テンプレートは高機能マクロと思え」

※マクロよりはるかに便利だけど
0258デフォルトの名無しさんNGNG
>>256
250で
>Test::Test(void)の実装が書かれたファイル名と245の内容が書かれたファイル名は?
と書いたのはそれ疑ってたんだけどね

>どうやらテンプレートの場合は関数の定義を
>ヘッダファイルの中に書かないといけないのですね。
基本的にはそうなんだけど
明示的に実体化しておけばその限りでないです

明示的な実体化は
例えばHogeListに渡すテンプレートパラメータが予め
HogeNodeとHageNodeしかないのなら
メンバ関数を定義した実装ファイル(.cpp)の最後で
template class HogeList<HogeNode>;
template class HogeList<HageNode>;
みたいにやります
0259デフォルトの名無しさんNGNG
>>258
明示的な実体化のときにはtemplateは書かない気がする。
0260デフォルトの名無しさんNGNG
Windowsプログラムで
system("iexplore.exe");
とやるとDOS窓が開いてしまうのがかっこ悪いです。
DOS窓が開かない方法を知りたいのですが
win32APIとかで別プログラムを起動させる方法ってありますか?
0261デフォルトの名無しさんNGNG
>>260
もちろんだ
0262デフォルトの名無しさんNGNG
>>259
付けるのが正解のような気がする
規格の14.7.2
0263デフォルトの名無しさんNGNG
>>261
自分では見つけられませんでした。
検索しますんでキーワードおしえてください。
0264デフォルトの名無しさんNGNG
>>263
こんなすれがあるんだよ↓
Win32APIしつもんばこ びるど25
http://pc5.2ch.net/test/read.cgi/tech/1101393155/
0265デフォルトの名無しさんNGNG
>>260
CreateProcess() や ShellExecute()
0266デフォルトの名無しさんNGNG
>>265
ども
0267デフォルトの名無しさんNGNG
typedef int *INTPTR;
const INTPTR p;
は
int * const p;
だったなんて!
MSがLP〜なんて余計なもの作るから悪いんだ!
0268デフォルトの名無しさんNGNG
すみませんが教えてください
Visual C++ 6.0 で以下のソースをビルドしても、rand() で生成される乱数が
常に 41 にしかならないようなんですが、何か間違ってますか?

#include <iostream>
#include <cstdlib>
using namespace std;

int main(void)
{
     int magic;          // 乱数を格 納
     int guess;          // ユーザの予想を格納

     magic = rand();       // 乱数を生成、格納

     cout << "Enter yout guess:";
     cin >> guess;

     if ( guess == magic )
{
          cout << "*** Right ***";
}

     cout << magic;     // 実際に生成された乱数を確認

return 0;
}
0269デフォルトの名無しさんNGNG
俺はMだがSを付けろ
0270デフォルトの名無しさんNGNG
>>268
srand() 使いましょう。
0271デフォルトの名無しさんNGNG
srand
0272デフォルトの名無しさんNGNG
>>268
http://www.google.co.jp/
0273デフォルトの名無しさんNGNG
srand ですか、調べてみます
0274デフォルトの名無しさんNGNG
わかりました
MSDN libraryの rand の項目も見てたんですが、
ちゃんと読んでなくて、
「srand 関数を使って疑似乱数ジェネレータを初期化してから、rand 関数を呼び出してください。」
と書いてるのを見てませんでした

ごめんなさい

ハーバート・シルトの標準講座 C++ のサンプルだったんですが、
ちょっとぐらい説明がほしかったなぁ・・・
0275デフォルトの名無しさんNGNG
毎回同じ結果が欲しいこともあるので、逆に便利な機能ってことに
なってる。<rand、srand
0276デフォルトの名無しさんNGNG
しかし>>268は当たる確率低いな。
0277デフォルトの名無しさんNGNG
エスパー養成プログラムですから。
0278デフォルトの名無しさんNGNG
どなたか、ご存知でしたら教えていただきたいのですが、
C++ で Java のリフレクションに近いような機能を実装することは
できるのでしょうか?
例えば

int function() {
  ・・・ // この関数の中で "function" という文字列を取得したいです。
}
0279デフォルトの名無しさんNGNG
>>278
するなよ。
0280デフォルトの名無しさんNGNG
C++は知ってるクラスしか相手できない。
間にクラスを1個挟めばリフレクションまがいのことはできそうだけど、
あまり意味はなさげ。
0281デフォルトの名無しさんNGNG
VC++7.1には__FUNCTION__なんてマクロがあったりするがな。
0282デフォルトの名無しさんNGNG
>>278
__func__
0283デフォルトの名無しさんNGNG
ポータブルに
BOOST_CURRENT_FUNCTION
0284デフォルトの名無しさんNGNG
関数のローカルスコープ内で関数名を知ることができるのと
リフレクションは全然違うと思うんだけど。
0285デフォルトの名無しさんNGNG
>>284
>>278
>int function() {
>  ・・・ // この関数の中で "function" という文字列を取得したいです。
>}
0286デフォルトの名無しさんNGNG
>>285
リフレクションとか関係ないですか、そうですか。
0287デフォルトの名無しさんNGNG
>>286
さぁ?

278は明らかに汁
0288278NGNG
すいません、それができれば間に合うので
最小限しか書いていませんでした。
やりたいことはあるクラスからメソッド名を抜いてきて
テストコードとドキュメントを生成したいと考えています。
0289デフォルトの名無しさんNGNG
クラスからメンバ関数名を取得する場合、上記のやり方だと
できなさそうだがな。
0290デフォルトの名無しさんNGNG
>>288
無理。ソース読んで生成するしかない。
河童とDoxygenは知ってるか?
0291278NGNG
>>290
ありがとうございます。
DoxyGen にはかなりお世話になっております。
河童は知らなかったのでダウンロードしてみました。
すごく使えそうなので使ってみたいと思います。
あと、しつこくて申し訳ないのですが、
__FUNCTION__ もしくは __func__ が実装されていない
コンパイラ(ARM7)を使用している場合、
関数中で関数名を抜くことはできますでしょうか?
すいません、よろしくお願いします。
0292デフォルトの名無しさんNGNG
>>291
直書きしろ。いや、関数名取ろうとなんて考えるな。
0293278NGNG
みなさん、ありがとうございました。
http://www.garret.ru/~knizhnik/cppreflection/docs/reflect.html
を参考に、もう少しだけがんばってみようと思います。
0294デフォルトの名無しさんNGNG
ruby以外の言語は糞
0295デフォルトの名無しさんNGNG
void set_callback(void (*func)());
のような関数に、メンバ関数を渡したいんですがうまい方法はないでしょうか?

class A {
public: void callback() {...}
};
A a;
void callback_wrapper(){
 a.callback();
}

main() {
 set_callback(a.callback); //エラー
 set_callback(callback_wrapper);//ださい
 set_callback(mem_fun_pointer_to_global_fun_pointer<A>(a,callback));//できることなら
}
0296デフォルトの名無しさんNGNG
>>295
ラッパー書け
0297デフォルトの名無しさんNGNG
>>295
staticなメンバ関数しか出来ないような希ガス。
メンバ関数へのポインタってアドレス取っても変なアドレスになるしな。
仮想関数ならなおさら。
0298デフォルトの名無しさんNGNG
>>295

template <class T>
void set_callback(T* pthis, void (T::* func)()) {
  // 保持

  // 使う
  (pthis.*func)();
}
0299デフォルトの名無しさんNGNG
#include <iostream>

class Test {
static int i;
public:
Test() {}
static void print() {
std::cout << "i = " << i << std::endl;
}
static void set(int j) { i = j; }
};

int Test::i;

int main()
{
Test t;

t.set(10);
t.print();

void ((*func)()) = static_cast<void ((*)())>(&t.print);

func();
}
0300デフォルトの名無しさんNGNG
int* sumArrays(int* a, int* b, int N){
int* c = new int[N];
for (int i = 0; i < N; ++i)
c[i] = a[i] + b[i];
return c;
}

これってコンパイルとラン可能ですよね?
自分でやってみたら、動いたんですけど。。。
でもエラーとか不利点とか、あるみたいで、それがいまいち、よく分からないんですが。。。

ポインターって、関数で、&パス(リファレンス)できないですよね?
なんでですか?
0301デフォルトの名無しさんNGNG
>>300
おいおいdeleteは?
それから&*ってすればポインタのリファレンス取れるぞ。
0302295NGNG
>>296
最終的にはそうなるんだけど、なんとかその処理を自動化できないかと思いまして。

set_callback(mem_fun_pointer_to_global_fun_pointer<A>(a,callback));

↓なんか変態的な処理

//どっかグローバルな場所
void generated_wrapper() {
 a.callback();
}
//関数内
set_callback(generated_callback);

みたいな。

>>298のようにset_callback側のラッパを書くにしても、最終的に
set_callbackにvoid (*)()を渡してやらねばならないのでコマル
0303デフォルトの名無しさんNGNG
>>302
だから標準C++の仕様ではどうあがいても(ry
0304デフォルトの名無しさんNGNG
>>302
class A {
 int i;
public:
 explicit A(int n) : i(n) {}
 void callback() { std::cout << "num : " << i << std::endl; }
};

template <class T>
class myCallback {
 typedef void (T::* cbFunc)();
 T* _obj;
 cbFunc _func;
public:
 myCallback(T* obj, cbFunc func) : _obj(obj), _func(func) {}
 void exec() { (_obj->*_func)(); }
};

int main()
{
 A a(10);
 myCallback<A> cb(&a, &A::callback);
 cb.exec();
}
こんなんじゃダメか?
0305295NGNG
>>304
あースマソ
グローバル関数ポインタを要求する既成のライブラリがあって、
それをどうにかしたいんですよ。

でも冷静に考えるとかなり複雑な処理をする必要がある……
これはあきらめたほうがいいかもわからんね。
0306デフォルトの名無しさんNGNG
>>305
気づくのが遅いよ池沼
0307デフォルトの名無しさんNGNG
>>306
(・3・)
0308デフォルトの名無しさんNGNG
>>305
サンクという方法もあるが、素直にラッパー書いたほうが簡単かもね。
0309デフォルトの名無しさんNGNG
>>305
WindowsAPIのコールバック関数みたいにユーザー定義の値を別に渡せないのか?
0310デフォルトの名無しさんNGNG
>>305
「既存の」じゃなければ関数オブジェクトをお奨めするところだが。
0311デフォルトの名無しさんNGNG
「プログラミング作法」p.136-139のコードを見ていて思ったのですが、
reallocした返り値のアドレスが元のアドレスとは異なる可能性があることを
考慮していないのはマズイのではないでしょうか?

つまり、char *buffer が仮に"ABCDEFGH"を指しているとして、
char *p1 = buffer + 1; /* *p1 == 'A' */
char *p2 = buffer + 2; /* *p2 == 'B' */
char *p3 = buffer + 3; /* *p3 == 'C' */

char *temp = realloc(buffer, size_hoge);
if (temp == NULL) { /* blah */ }
buffer = temp;
bufferがreallocで別の所に飛ばされればp1, p2, p3はもう無効ですよね?
それを避けるためにはint p1, p2, p3のようにオフセットで管理するよう変更しなければならないですよね?
0312デフォルトの名無しさんNGNG
>>311
確かにそのコードはマズイね。
reallocに成功した時点でbufferはdeallocateされてるから
p1,p2,p3を再割り当てするかオフセット管理しないと…
0313デフォルトの名無しさんNGNG
>>311
どれに対するレス?
「プログラミング作法」ではそんなコーディングしてないよね?
0314デフォルトの名無しさんNGNG
#include<stdio.h>
int main(void){

int a[2];
int *p;
int cnt;

a[0]=1;
a[1]=2;
a[2]=3;

*p=a;

for(cnt=0; cnt<3; cnt++ )
{
printf("Input data %d\n",*p[cnt]);
}
return 0;

上のプログラムをコンパイルしたらエラーが出ました。ポインターの部分というのは分かるのですが
すいませんご指導お願いします。
ex.c:12: warning: assignment makes integer from pointer without a cast
ex.c:16: invalid type argument of `unary *'
0315デフォルトの名無しさんNGNG
*pの型はint
pの型はint*
0316デフォルトの名無しさんNGNG
*p=a; はint*ではないのですか?
0317デフォルトの名無しさんNGNG
>>316
*p=a; は代入式に決まっておろうが、という突っ込みはさておき。

int *p;
これで宣言/定義されたint型ポインタは p だよ。
int* p;
上と同じだが、この方が判りやすいかも。
0318デフォルトの名無しさんNGNG
int *p;はint型ポインタは p という意味で、
*p=a;そのポインタpにaを代入・・・つまり、先ほどのプログラムを実行するには
*p=a[2]とすればいいのですかね?
0319デフォルトの名無しさんNGNG
printf("Input data %d\n",*p[cnt]);がダメって言われました。何ででしょう?
invalid type argument of `unary *'
0320デフォルトの名無しさんNGNG
printf("Input data %d\n",*p[cnt]);がダメって言われました。何ででしょう?
invalid type argument of `unary *'
0321デフォルトの名無しさんNGNG
int *p;

p=1←pに1を代入
*p=1←*p(=pが指しているint変数)に1を代入
0322デフォルトの名無しさんNGNG
>>318
違う。
p = aでいい。
pに配列aの最初のアドレスを代入。
配列の添え字を省略した場合、最初の添え字のアドレスを指すのは理解してるよね。

あとint a[2]と定義してるのにa[2]に代入するのは危険。
定義時の添え字は全体の個数、実際に使うのは添え字0からの数。

printfのところは*p[cnt]ではなく、p[cnt]でいい。

#include<stdio.h>

int main(void)
{
   int a[3];
   int cnt;

   a[0] = 1;
   a[1] = 2;
   a[2] = 3;
   p = a;

   for( cnt=0 ; cnt<3 ; cnt++ ) {
       printf("Input data %d\n", p[cnt]);
   }

   return 0;
}
0323デフォルトの名無しさんNGNG
↑
int *p;
が抜けてた。

ポインタは難しいけど、理解すればカンタンだよ
0324デフォルトの名無しさんNGNG
もし、*p[cnt]とした場合、プログラムの意味的にはどういう意味になるのですか?
すいませんたびたび
0325デフォルトの名無しさんNGNG
どっちの優先順位が高いのか忘れた。

*(p[cnt])
あるいは
(*p)[cnt]


プログラム的にはどっちもエラーだな。
0326デフォルトの名無しさんNGNG
>>325
前者が正解
0327デフォルトの名無しさんNGNG
classのprivate:で宣言した変数int *pA;をGet_A()などで値渡ししないで変えられないようにする方法はありますか?

#include <stdio.h>

class PIYO{
private:
int *A;
public:
const int *Get_A( void ){
return A;
}
PIYO( void ){
A = new int;
*A = 6;
}
};

int main( void ){
class NEKO Hoge;

int *B = ( int * )Hoge.Get_A();

//かえられてしまう
*B = 3;

const int *C = Hoge.Get_A();

printf( "%d" , *C );

return 0;
}
0328デフォルトの名無しさんNGNG
>>327
そんなキャストするやつが悪い。
0329デフォルトの名無しさんNGNG
>>327
>>328に激しく同意
そんなこといったらどんなprivateメンバだって((void *)&Hoge)[1]とかやれば変えられてしまう。たぶん
0330デフォルトの名無しさんNGNG
つまり、優先順位を気をつけて、printf("Input data %d\n", *(p[cnt]));
こんな感じでしょうか?
でもエラーなんですか・・・
0331デフォルトの名無しさんNGNG
>>327
なんでconst int *Bにしないの?
0332デフォルトの名無しさんNGNG
わざわざ小難しく考える事ない。できるだけシンプルに。
配列とポインタは似て非なる物。
0333デフォルトの名無しさんNGNG
>>330
#include<stdio.h>

int main(void)
{
int a[3];
int cnt;
int *p;

a[0] = 1;
a[1] = 2;
a[2] = 3;
p = a;

for(cnt=0 ; cnt<3 ; cnt++) {
printf("Input data %d\n", p[cnt]);
}

return 0;
0334デフォルトの名無しさんNGNG
p[cnt]は、pが指してるアドレス(ここではa[0])からcnt分だけアドレスを進めた場所にある内容を指す。
*(p[cnt])だと、内容の内容になってわけわかめ。

ポインタの本一冊買って勉強するといいよ。特にメモリの事詳しく説明してる本。
0335デフォルトの名無しさんNGNG
>>330
こうすれば問題なく動く。
#include<stdio.h>

int main(void)
{
  int a[3];
  int cnt;
  int (*p)[3];

  a[0] = 1;
  a[1] = 2;
  a[2] = 3;
  p = &a;

  for(cnt=0 ; cnt<3 ; cnt++) {
  printf("Input data %d\n", (*p)[cnt]);
  }

  return 0;
}
0336デフォルトの名無しさんNGNG
>334
なるほど!わっかりました!すいません日曜の朝にこれからも精進していきます
0337デフォルトの名無しさんNGNG
インスタンスメソッドのポインタを
関数ポインタに格納することはできるのでしょうか?

class class1{
public:
    void (*proc)();
    void method();
}c1;
c1.proc = c1.method;

6行目 error C2440: '=' : 'void' から 'void (__cdecl *)(void)' に変換できません。
0338デフォルトの名無しさんNGNG
>>337
c1.proc=class1::method
0339デフォルトの名無しさんNGNG
class class1 {
public:
void (class1::*proc)();
void method();
} c1;
c1.proc = c1::method;
0340デフォルトの名無しさんNGNG
>>338 >>339
ありがとん
0341デフォルトの名無しさんNGNG
*(p[cnt])だと、p[cnt]で示されるアドレスの部分の値を読もうとするのかもナ。
0342デフォルトの名無しさんNGNG
標準C++の基礎知識(柏原正三 著:ASCII)を読んでC++を勉強しているのですが、
そのP.135に書いてある以下のサンプルコードがコンパイルできません。
どなたかアドバイスをお願いします。

【ソースコード】
#include <iostream>
#include <string>
using namespace std;


class MyClass {
static string class_string;

public:
static void SetString(string str) { class_string = str; }

static string Show() { return class_string; }
};

static MyClass::class_string = "MyString";

int main()
{
cout << MyClass::Show() << endl;
MyClass::SetString("Changed!");
cout << MyClass::Show() << endl;

return 0;
}
0343342NGNG
【エラー内容】
list6-3.cxx:29: error: ISO C++ forbids declaration of `class_string' with no
type
list6-3.cxx:29: error: `static' may not be used when defining (as opposed to
declaring) a static data member
list6-3.cxx:29: error: conflicting types for `int MyClass::class_string'
list6-3.cxx:14: error: previous declaration as `std::string
MyClass::class_string'
list6-3.cxx:29: error: invalid conversion from `const char*' to `int'

【動作環境】
OS: FedoraCore 1
コンパイラ: gcc 3.3.2-1

よろしくお願いします。
0344デフォルトの名無しさんNGNG
- static MyClass::class_string = "MyString";
+ string MyClass::class_string = "MyString";
0345デフォルトの名無しさんNGNG
static MyClass::class_string = "MyString";
→
string MyClass::class_string = "MyString";
0346345NGNG
orz
0347344NGNG
あと通常 inline からは static データメンバに正常にアクセス出来ないからな
何読んでるか知らんが窓から投げ捨てておけ
0348デフォルトの名無しさんNGNG
> 何読んでるか知らんが
標準C++の基礎知識(柏原正三 著:ASCII)と書いてあるが。
0349デフォルトの名無しさんNGNG
>>347
>>342の1行目
0350デフォルトの名無しさんNGNG
道を歩いていたらマンションの二階のガキが嘗めていたあめ玉を吐きだしたのが直撃して
頭を縫うハメになったことがあるから窓からものを投げ捨てるのは良くないと思うのです。
0351デフォルトの名無しさんNGNG
Rubyならこんなまだるっこしい事しなくて済むのにね。
0352デフォルトの名無しさんNGNG
>>348-349
orz
0353デフォルトの名無しさんNGNG
>>351
それは禁句
0354342NGNG
>>344-345
ありがとうございます。
inlineからstaticなデータメンバには正常にアクセスできないんですか。
知りませんでした。
ありがとうございました。
0355デフォルトの名無しさんNGNG
やっぱり時代はrubyに向けて流れていると言える。
Ruby最強!
0356デフォルトの名無しさんNGNG
>>348
その本持ってるから見てみた。P135じゃなくて134だと思うが
string MyClass::class_string = "MyString";
になってた。
0357デフォルトの名無しさんNGNG
MinGWではdrand48()は使えないんですか?
0358デフォルトの名無しさんNGNG
マルチ
0359デフォルトの名無しさんNGNG
>>347
> あと通常 inline からは static データメンバに正常にアクセス出来ない

聞いたこと無いな。ほんとか?
0360デフォルトの名無しさんNGNG
>>359
つC++ FAQ
0361デフォルトの名無しさんNGNG
警告 W8017 c:\Borland\Bcc55\include\stdlib.h 117: マクロ 'abc' の重複定義

とコンパイルすると警告出ますが、対応教えてくださいませませ。
0362デフォルトの名無しさんNGNG
>>361
absじゃなくて?
0363デフォルトの名無しさんNGNG
ご指摘とおり、absでした。
0364デフォルトの名無しさんNGNG
>>359
俺も聞いたこと無い。
思いつくキーワードで手当たり次第ぐぐってみたけど見つからないんだけど
ほんとなのかな?
0365デフォルトの名無しさんNGNG
>>362
エスパー乙
0366デフォルトの名無しさんNGNG
>>360 くわしく。
0367デフォルトの名無しさんNGNG
>>359
わしも聞いたことない。
普通に考えてそんなことあり得ないと思うんだけど。
0368デフォルトの名無しさんNGNG
inlineがstaticデータメンバにアクセスできない?知ったか君、いい加減にしなさい。
0369デフォルトの名無しさんNGNG
アクセスできない、じゃなくてinlineでアクセスしてはいけない、だよ。

知らない癖になんで偉そうなんだ?無知を誇るな。いい加減にしなさい。
0370デフォルトの名無しさんNGNG
情報のソースを示してくれ。
少なくとも俺はそんなの聞いたこと無い。
0371デフォルトの名無しさんNGNG
>>369みたいなのはほっといて、漏れも理由が知りたい
0372371NGNG
>>368だった
0373デフォルトの名無しさんNGNG
>>369
ソースを示してからそのセリフ吐きなよ。
ドラフトのどこにそんな事が書いてあるんだ?知ったか君。
0374デフォルトの名無しさんNGNG
>>373 そこでなんで「ドラフト」なんだよ。
0375デフォルトの名無しさんNGNG
ばかだなぁ。ドラフトじゃなきゃ意味ないだろ。
0376デフォルトの名無しさんNGNG
楽天にドラフトでいきたい
0377デフォルトの名無しさんNGNG
>>375 正式な規格書じゃなくて、なんで草案(ドラフト)のほうなのさ?
0378デフォルトの名無しさんNGNG
ばかだなぁ。ドラフトじゃなきゃ面白くないだろ。
0379デフォルトの名無しさんNGNG
おまえら正式な規格書読んで喜んでるのか?ケッ、はやりじゃねぇんだよ。
0380デフォルトの名無しさんNGNG
どっちが知ったか君なんだ。知ったか君って言いたかっただけか。
0381デフォルトの名無しさんNGNG
そういや暗黙の inline は問題なくても
明示的な inline で怒られるのってなんで?

普通にソース書く分ではエラーは出ないけど
実際その関数を呼び出すとなるとエラーなんだよね…(´・ω・`)
ついでだからおせーてちょ
0382デフォルトの名無しさんNGNG
>>381
ソース貼ってみ。
0383デフォルトの名無しさんNGNG
#include <iostream>

//ここから hoge.h
class Hoge{
private:
inta;
public:
Hoge(){ a = 10; }
void hage();
};

//ここから hoge.cpp
inline void Hoge::Mage(){
a = 100;
std::cout << a << std::endl;
}

//ここから main.cpp
int main(int argc, char *argv[]){
Hogehoge;
hoge.Mage();
returnEXIT_SUCCESS;
}

言われて書いてみた。で、新たに不思議なことが。
↑のソースをmain.cpp内に全て書いたら問題なかったんだけど
クラス宣言を hoge.h, メンバ関数を hoge.cpp で書いた時は
Hoge error LNK2019: 未解決の外部シンボル "public: void __thiscall Hoge::hage(void)" (?hage@Hoge@@QAEXXZ) が関数 _main で参照されました。が出るよ…

もちろんファイル分けたときはインクルード個別にしてるし、インクルードガードもちゃんとしてます
最初に確認したのはVC6.0だったけど、今はこれ VC7.1 です
0384デフォルトの名無しさんNGNG
あ、エラー文の hage は Mage に置き換えてください
結構お馬鹿な疑問(?)でしょうが、よろしくおねがいします
0385デフォルトの名無しさんNGNG
気になったんで調べてみた。
確かにC++ FAQsの
FAQ 16.04 Can inline functions safely access static data members?
で、「No!」ってはっきり書いてあるね。
0386デフォルトの名無しさんNGNG
>>383
inline関数の定義はその関数を使用するすべてのコンパイル単位に必要。
0387デフォルトの名無しさんNGNG
あう すいません、なんかめちゃくちゃになってますね…
#include <iostream>
//#include "hoge.h"

class Hoge{
private:
inta;
public:
Hoge(){ a = 10; }
void hage();
};

inline void Hoge::hage(){
a = 100;
std::cout << a << std::endl;
}

int main(int argc, char *argv[]){
Hogehoge;
hoge.hage();
returnEXIT_SUCCESS;
}

これで上記のエラーが出ます
何度もすみません。・°・(ノД`)・°・。
0388デフォルトの名無しさんNGNG
>>385
URL 教えてくれないか?
0389デフォルトの名無しさんNGNG
>>385
↓これとは違うんだな。
ttp://www.parashift.com/c++-faq-lite/

んで、理由は?
0390デフォルトの名無しさんNGNG
>>386
上記で言うと具体的にどこでどのように書くのでしょう?

ミス続きなのでごめんなさい(´・ω・`)
0391デフォルトの名無しさんNGNG
>>390
inline関数はヘッダに含めなさい
0392デフォルトの名無しさんNGNG
>>390
class Hoge の定義と同じファイルに書いてしまう。
0393デフォルトの名無しさんNGNG
>>383
インライン関数はコンパイル時に展開処理されるので、
関数呼び出し位置から、その関数の定義が見えていなければならない。

非インライン関数はリンカで最終的に結合されるため、
コンパイル段階では宣言のみが見えていればいい。

>>390
ヘッダファイルに定義を書く
0394デフォルトの名無しさんNGNG
>>390, 391
なるほど

つーことは明示的 inline と 暗黙の inline は
読みやすさに気を配る人は前者、
特に気にしない人は後者みたいな認識でいいのかな?

付き合ってくれてありが�d
0395デフォルトの名無しさんNGNG
>>393も詳しい解説ありが�d
0396デフォルトの名無しさんNGNG
もうだめ…
×>>390,,391
○>>391,392

社会人になるまでに直さなきゃ
今日はとっとと寝ときます
0397デフォルトの名無しさんNGNG
>>389
意訳になるけど、
ユーザー定義型のstaticデータメンバが初期化されるのが保証されているのは
staticメンバの定義があるのと同じコンパイル単位の、non-inline関数が呼び出される前だから、
もし別のコンパイル単位からnon-inline関数を呼び出す前にinline関数を呼び出してしまうと
初期化される前にstaticメンバを利用してしまう可能性がある

らしい。日本語版は売り切れてて持ってないから間違ってるかもしれない(´・ω・`)

サンプルソースを引用すると
// Hoge.hpp
class Hoge {
public:
  static void f() throw();
  static string g() throw();
private:
  string s_;
};
inline string Hoge::g() throw() { cout << s_; return s_; }

// Hoge.cpp
#include "Hoge.hpp"
string Hoge::s_ = "Hello";
void Hoge::f() throw() { cout << s_; } // OK 初期化は保証されている

// main.cpp
#include "Hoge.hpp"
int main() { Hoge::g(); } // s_は初期化されているか?
0398デフォルトの名無しさんNGNG
- string s_;
+ static string s_;
0399デフォルトの名無しさんNGNG
>>397
__declspec(selectany)使ってヘッダにstaticメンバを書いたらどうなるんだろう
0400デフォルトの名無しさんNGNG
>>397
その理由が問題にしているのはこれだろう。
3.6.2/3 から引用。
"If the initialization is deferred to some point in time after the first statement of main,
 it shall occur before the first use of any function or object defined in the same translation unit as the object to be initialized."

簡単に訳すと、
「初期化がmainの最初の文よりも後に遅らされるとすれば、
 同じ翻訳単位で定義されているどの関数、オブジェクトの
 最初の使用よりも前で無ければならない。」
(最後の"as the object to be initialized"がよくわからない)

397の意訳では、
「関数、オブジェクトの使用」を「non-inline関数の呼び出し」に限ってしまっているのが、
規格の意図とは違うと言えるだろう。
0401デフォルトの名無しさんNGNG
>>400
なるほど… 原文では

 Static data members are guaranteed to be initialized
before the first call to any non-inline function within
the same source file as the static data's definition.

となってたもんで。
0402デフォルトの名無しさんNGNG
ところで、ドラフトな知ったか君はドコいった?
0403デフォルトの名無しさんNGNG
お願いします。。VC++6.0を使っているのですが、ウォッチウィンドウでAという関数の返り値を調べたいのです。
ソース内で、Aという関数の引数にBという関数の戻り値を使っています。B(C)がエラーとして-1を返した時に、A(-1);となるので、
そのばあいA関数内でexit(-1);が呼び出されるようにしているのですが、ウォッチウィンドウにA(B(C))と打って、
Bの返り値が-1だった時に、VC++が異常終了してしまいます。(以降.dswを削除しないと起動しません。)
ウォッチウィンドウでBの返り値が-1だった時にA()を呼び出さないようにするにはどうしたらいいのでしょうか。。
ちなみにA((B(C)!=-1)?B(C):999)では動きませんでした。。(999はとりあえずの例です。)
長文すみません。。
0404デフォルトの名無しさんNGNG
お願いします。。VC++6.0を使っているのですが、ウォッチウィンドウでAという関数の返り値を調べたいのです。
ソース内で、Aという関数の引数にBという関数の戻り値を使っています。B(C)がエラーとして-1を返した時に、A(-1);となるので、
そのばあいA関数内でexit(-1);が呼び出されるようにしているのですが、ウォッチウィンドウにA(B(C))と打って、
Bの返り値が-1だった時に、VC++が異常終了してしまいます。(以降.dswを削除しないと起動しません。)
ウォッチウィンドウでBの返り値が-1だった時にA()を呼び出さないようにするにはどうしたらいいのでしょうか。。
ちなみにA((B(C)!=-1)?B(C):999)では動きませんでした。。(999はとりあえずの例です。)
長文すみません。。
0405デフォルトの名無しさんNGNG
しかも2重すいません・・・orz
0406デフォルトの名無しさんNGNG
 
0407デフォルトの名無しさんNGNG
more Effective C++ を読んでいるのですが、自作クラスのoperator をprivateで隠蔽する、っていうのは皆さんやってるんでしょうか?
ベテランの人の意見をお聞かせ願いますか?

隠蔽したいときは隠蔽する、的な解はいりません
0408デフォルトの名無しさんNGNG
>>407
>隠蔽したいときは隠蔽する
これ以外の回答は有り得ないのだが?
0409デフォルトの名無しさんNGNG
つまり解はいりませんのです。
0410デフォルトの名無しさんNGNG
よっしゃっ、おじさんが回答しちゃる。

 隠蔽する必要があれば隠蔽する

これだな。
0411デフォルトの名無しさんNGNG
おあとがよろしいようで。さんくす。
0412デフォルトの名無しさんNGNG
Cで、計算したデータをファイルに書き出したいんですけど、
例えばdata_on_001_times.dat、data_on_002_times.dat ・・・
みたいに、何回目のデータかわかるように名前をつける
(ファイル名に変数を使う?)ことってできるんでしょうか?
できるならやり方を教えて欲しいです。
0413デフォルトの名無しさんNGNG
>>412
sprintf
0414デフォルトの名無しさんNGNG
今まで何度同じ質問が出てきたことか…( -ω-)y-~~
0415412NGNG
すみません・・・
ありがとうございます。
0416デフォルトの名無しさんNGNG
初心者歓迎じゃないのかYO!
0417デフォルトの名無しさんNGNG
同じ質問のデジャブは初心者スレでは仕方がないな。
だれかがFAQをまとめてくれるとみんながハッピー。
0418デフォルトの名無しさんNGNG
bcbにて
ボタンを押してる間ずっと数値が増えるようなプログラムを作りたいです
ご指導ご鞭撻をお願い致します
0419デフォルトの名無しさんNGNG
>>418
こっち
C++Builder相談室 Part12
http://pc5.2ch.net/test/read.cgi/tech/1099238936/l50
0420デフォルトの名無しさんNGNG
>>418
一番簡単に済ませるにはOnMouseDown/OnMouseUpで
Threadを動かすといいね。

--- Unit1.cpp
IncrementThread* itp;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
itp = new IncrementThread(false); // Labelをインクリメントする

}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1MouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
itp->Terminate();
delete itp;
}
0421デフォルトの名無しさんNGNG
--- Unit2.cpp
__fastcall IncrementThread::IncrementThread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall IncrementThread::Execute()
{
while (!Terminated)
Synchronize(IncrementLabel);
}
//---------------------------------------------------------------------------
void __fastcall IncrementThread::IncrementLabel()
{
int i;
i = Form1->Label1->Caption.ToIntDef(0) + 1;
Form1->Label1->Caption = AnsiString(i);
}
0422デフォルトの名無しさんNGNG
カウントアップする速度はSleep()か何かでExecute()内のループを
制御する。上のプログラムは省略してあるが。
0423デフォルトの名無しさんNGNG
今、ウィンドウを作成してるのですがリサイズできるようにするには
どうしたらいいですか?ご教授お願いします。
0424デフォルトの名無しさんNGNG
せめてOSとコンパイラの名前ぐらい書いとけ。
0425デフォルトの名無しさんNGNG
すいません。windows2000で.NETC++でやってます。
0426デフォルトの名無しさんNGNG
>>425
MFCでデザインしているならダイアログのプロパティ。
0427デフォルトの名無しさんNGNG
File I/Oでなんだけど、
ofstream outStream;
ousStream.open("file.txt",ios::app)
このios::appって、なに?
0428デフォルトの名無しさんNGNG
>>427
「ファイルの末尾に追加」を示すフラグ
0429デフォルトの名無しさんNGNG
ここ一年C#だったんでC++のこと忘れぽ。おまいら教えてください。

class hoge { public: int i; };
class mage { public: void * h; };

class Visitor
{
public:
  virtual void visit (hoge* X) { }
  virtual void visit (mage* X) { }
};

class DerivedVisitor : public Visitor
{
public:
  void f (hoge * X) { visit (X); }
  void visit(mage * X) { }
};

っていうコードがあったとき、DerivedVisitor::f() の中からの visit 呼び出しでエラーになるっす。
(続く)
0430429NGNG
-----------
> gcc testmain.cpp
testmain.cpp: In member function `void DerivedVisitor::f(hoge*)':
testmain.cpp:14: error: no matching function for call to `DerivedVisitor::visit
  (hoge*&)'
testmain.cpp:15: error: candidates are: virtual void
  DerivedVisitor::visit(mage*)
-----------

VC↓
-----------
...\testmain.cpp(14) : error C2664: 'DerivedVisitor::visit' : 1 番目の引数を 'hoge *' から 'mage *' に変換できません。
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
-----------

Visitor::visit ってやれば回避できるのは解るんだけど、知りたいのはそういうことじゃなくて、なんでここで仮想関数呼び出しじゃなくて、ふつうのメソッド呼び出しになっちゃうんだ?っていうのが疑問。
Visitor を継承した時点で、visit(mage *) は vftable に登録されるんじゃ無いのかとかそういうC++の言語構造がわかんなくなった。

どうなってるん?
0431429NGNG
-----------
> gcc testmain.cpp
testmain.cpp: In member function `void DerivedVisitor::f(hoge*)':
testmain.cpp:14: error: no matching function for call to `DerivedVisitor::visit
  (hoge*&)'
testmain.cpp:15: error: candidates are: virtual void
  DerivedVisitor::visit(mage*)
-----------

VC↓
-----------
...\testmain.cpp(14) : error C2664: 'DerivedVisitor::visit' : 1 番目の引数を 'hoge *' から 'mage *' に変換できません。
指示された型は関連がありません; 変換には reinterpret_cast、 C スタイル キャストまたは関数スタイルのキャストが必要です。
-----------

Visitor::visit ってやれば回避できるのは解るんだけど、知りたいのはそういうことじゃなくて、なんでここで仮想関数呼び出しじゃなくて、ふつうのメソッド呼び出しになっちゃうんだ?っていうのが疑問。
Visitor を継承した時点で、visit(mage *) は vftable に登録されるんじゃ無いのかとかそういうC++の言語構造がわかんなくなった。

どうなってるん?
0432デフォルトの名無しさんNGNG
>>431
仮想関数に関数の多重定義解決を混ぜるな。
ほぼ間違いなく意図通りの動作をしない。

今の例で言うと、'DerivedVisitor::visit(mage *)が仮想関数 'Visitor::visit(hoge *)を
隠蔽しているため、DerivedVisitor::visit(mage *)は仮想関数として処理されない。
virtualを付けても無駄です。
0433デフォルトの名無しさんNGNG
仕様だね。
俗に言う(本当に言われてるかは知らん)
「名前が隠される」状態。
0434429NGNG
仕様かー。なら仕方ない。とりあえず、こうしてみた。
-------
class Visitor;

class base { public: virtual void accept(Visitor * v) = 0; };

class hoge : public base{ public: void accept(Visitor * v); };
class mage : public base{ public: void accept(Visitor * v); };

class Visitor
{
public:
  void visit (base* X) { X->accept(this); }
  virtual void visitHoge(hoge* X) { /* default action */}
  virtual void visitMage(mage * X) { /* default action */}
};

class DerivedVisitor : public Visitor
{
public:
  void f (hoge * X) { visit (X); }
  void visitMage(mage * X) { }
};

void hoge::accept(Visitor * v) { v->visitHoge(this); }
void mage::accept(Visitor * v) { v->visitMage(this); }
-------
visitHoge とか、visitMage とか妙な感じだ。マクロとかテンプレート(ここで使えるのか?)とか使いたくないから、これで我慢するしかないのかな?
ありがとう、432,433。
0435429NGNG
434、一行目。
仕様かー を 隠蔽かー に読み替えてくれるとありがたい。

だからどうしたって感じだけど。
0436デフォルトの名無しさんNGNG
どうしても>>429の形式にしたいのなら、
Derivedの中に、
using Visitor::visit;
の行を入れればよい。

Visitor::のvisitという名前が、現在の名前照合空間に含まれるようになる。
0437デフォルトの名無しさんNGNG
Visual C++ 6.0とWindows2000で以下のようなプログラムを作っています。


1.5秒ごとに特定フォルダをチェック。
↓
2.そこへホストからファイルがftp転送(PUT)されてくる。
↓
3.転送されたファイルを見つけたら、別の場所へコピーする。
↓
4.1へ戻る。


しかし、3の段階でファイルが転送中にもかかわらず、ファイルをコピーしようとして失敗します。
これはftp転送の仕様上、ファイルが少しずつ出来上がっていくからだと思いますが、
転送が完全に終わるまでコピーしない(転送が終わったかどうか判断する)方法をご教授ください。
0438デフォルトの名無しさんNGNG
>>437
ダウンロード終了(してプログラムがファイルを閉じる)まではCreateFileのdwShareを0にするとオープンできないはずだから、
それを使ったらどうだ?オープンできたら、ついでにReadFile/WriteFileあたりを使って自分でコピーしたらどうだ。
0439429NGNG
thx, 436
0440デフォルトの名無しさんNGNG
cmd.exeをWindowを表示させずに起動させたい場合はどうすればよいですか?
CreateProcessではSW_HIDEで指定しても無理だということになってるのでよろしくお願いします。
0441デフォルトの名無しさんNGNG
>>440
何がやりたいんだ。
0442デフォルトの名無しさんNGNG
コマンドプロンプトで動くソフトの出力をPipeを使って取り込もうとしています。
でもプロンプトがでてしまうのでどうにかならないかと思い質問しました。
0443デフォルトの名無しさんNGNG
ちょ(ry
0444デフォルトの名無しさんNGNG
>>442
それならCreateProcessでDERACHED_PROCESSを指定すればいいだけ。
0445デフォルトの名無しさんNGNG
>444
ありがとうございました。やってみます。
0446デフォルトの名無しさんNGNG
Dateっていうクラスがあって、

ostream& operator << (ostream& os, const Date& d){
os << d.month << d.day << d.year;
return 0;
}

この関数もあるわけなんだけど、このostreamをintとかvoidみたいに使っているのが
いまいち、よくわからないんです。
osっていうのが、ファイルだから、それを受け渡しするときに使うってこと?
でも、なんでosをreturnする必要あるんですか?
ファイルは、存在するわけだから、またメインなり、どこかで、開けばいいんじゃないんですか?
0447デフォルトの名無しさんNGNG
>>446
マルチ氏ね
0448デフォルトの名無しさんNGNG
>なんでosをreturnする必要あるんですか?

return 0;
0449デフォルトの名無しさんNGNG
>.446
マジレスすると、
std::cout << foo << bar << std::endl;
のようにosを返しておくと便利。
ついでに言えば、ostreamはファイルそのものじゃない。
まぁ、C++の入門書でも読んでらっしゃい。
0450デフォルトの名無しさんNGNG
>>446
そもそもcoutとか使ったことあるのか?
0451デフォルトの名無しさんNGNG
The C++ Programming Language, Special Edition の翻訳の話はあるのでしょうか?
この版では Locale の話などが追加されているそうです。

http://www.amazon.co.jp/exec/obidos/ASIN/0201700735/qid=1102483504/sr=1-1/ref=sr_1_10_1/250-5642937-2086640

この原著を買うか 3rd の(悪名高い)翻訳を買うかで悩んでいるのですが、新
訳の話があるならそっちの方がいいかな、と考えています。どんなもんでしょ
うか。
0452デフォルトの名無しさんNGNG
Localeまわりその他SEで追加された部分は禿のサイトからPDFで落とせたはずだが。
0453デフォルトの名無しさんNGNG
ここだな。
ttp://www.research.att.com/~bs/3rd.html
0454451NGNG
>>452-453

お、これと errata と 3rd があればOKのようですね。
情報ありがとうございます。
0455デフォルトの名無しさんNGNG
すいません教えてください。

charの比較をしたいのです。
char c; の中は0〜9まで、A〜Cまで。
とチェックしたいのですが、どうしたらよいでしょうか?
0456デフォルトの名無しさんNGNG
ちぇけらっちょ
0457デフォルトの名無しさんNGNG
>>455
言語ならC/C++の前に日本語習え
0458デフォルトの名無しさんNGNG
>>455
('0' <= c && c <= '9') || ('A' <= c && c <= 'C')
0459デフォルトの名無しさんNGNG
>>455
if (isdigit(c) || toupper(c) - 'A' < 'C' - 'A')
 なんたら;
else
 ほげ;
0-9とA-Fならisxdigitが使える。
0460デフォルトの名無しさんNGNG
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。
0461デフォルトの名無しさんNGNG
>>460
お願いするとこ間違ってるよ
0462デフォルトの名無しさんNGNG
>>460
お前に人生のうまい渡り方を教えてやりたいよ。
基礎からすべてをたたき込めなんて大仕事をタダで引き受けさせようとする
お前の根性を叩き直してやりたい。
0463デフォルトの名無しさんNGNG
>>462
お願いします
0464デフォルトの名無しさんNGNG
http://www.google.com/search?hl=ja&q=%EF%BC%A8%EF%BC%B3%EF%BC%B0%E3%81%A7%EF%BC%B2%EF%BC%B0%EF%BC%A7%E4%BD%9C%E3%82%8A%E3%81%9F%E3%81%84%E3%82%93%E3%81%A7%E3%81%99%E3%81%8C&btnG=Google+%E6%A4%9C%E7%B4%A2&lr=
0465デフォルトの名無しさんNGNG
パーティクルを飛ばすためのプログラムを組めといわれたのだが正直判らんのでだれか教えてください。
開発環境は.NETの2003アカデミック番でGSLIBってのを使ってるっす
0466デフォルトの名無しさんNGNG
>>465
僕もわかりません。
学校の先生に聞いてください。
0467455NGNG
>458
>459
ありがとうございました。

>457
すいません、今そっちも勉強中です。
0468デフォルトの名無しさんNGNG
質問ですunsorted list(ソートされないリスト)で
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┛
と配列が渡されたとき、「75」を挿入すると

┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃75┃  ┃
┗━┻━┻━┻━┻━┻━┛
となるので正しいですか??

また、
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┛
から53を削除した場合、リストはどの様に並びますか?
よろしくおねがいしますm(_ _"m)
0469デフォルトの名無しさんNGNG
>>468
これ以上マルチするとアク禁要望出す?かもなー
0470デフォルトの名無しさんNGNG
>>468
挿入の仕方、削除の仕方による
0471デフォルトの名無しさんNGNG
要するに答えられないわけですね。
【初心者歓迎】なんてスレだから質問してみたのですが、
カキコした自分が馬鹿でした。
頼りにならない人しかいないなんて知らなかった。
0472デフォルトの名無しさんNGNG
>>471
質問の仕方が悪いよ。一意に取れない。
0473デフォルトの名無しさんNGNG
>>471
┏━┳━┳━┳━┳━┳━┓
┃10┃53┃24┃35┃75┃  ┃
┗━┻━┻━┻━┻━┻━┛
で合ってる

53削除するとこうなる
┏━┳━┳━┳━┳━┳━┓
┃10┃  ┃24┃35┃  ┃  ┃
┗━┻━┻━┻━┻━┻━┛
これでいいか?分かったら帰れ
0474デフォルトの名無しさんNGNG
>>468>>471は最初に質問した奴じゃないだろ。
面白がってあちこちにコピペ貼りしているだけ。
釣り釣られ〜
0475デフォルトの名無しさんNGNG
>>474
スルーできないのが普通だからな
0476デフォルトの名無しさんNGNG
HSPでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
HSPの基礎からすべてを叩き込んでくれませんか??
お願いします。
全裸で
0477デフォルトの名無しさんNGNG
>>476
HSPスレ行け。
0478デフォルトの名無しさんNGNG
とりあえずオープニング見せてよ
全裸で
0479デフォルトの名無しさんNGNG
オープニングはあとで作れよ
0480デフォルトの名無しさんNGNG
>>476
もうそのコピペも飽きた
0481デフォルトの名無しさんNGNG
私は見た事無いですYO
0482デフォルトの名無しさんNGNG
すみません、初歩的なことだと思うのですが…

C++で、あるクラスへのポインタの配列を格納する場所を
newするにはどう書けばよいのでしょうか?とりあえず

TEST **ppTest;
ppTest = new (TEST*)[100];

のように書いてみたらエラーが出ます。正しい書き方を教
えてもらえないでしょうか。
0483デフォルトの名無しさんNGNG
new TEST*[100];
0484デフォルトの名無しさんNGNG
C++ では生ポインタも配列も使いません。
std::auto_ptr や std::vector, deque 等の使用を考えましょう
0485デフォルトの名無しさんNGNG
>>484
アホ
0486デフォルトの名無しさんNGNG
まあオレならboost::shared_array<Test>とかstd::vector<boost::shared_ptr<Test> >とか
使うけどね
0487デフォルトの名無しさんNGNG
>>486
それ使うとstd::mem_funが動かなくなるから嫌だ。
boost::mem_fn使えばいいけど。
0488デフォルトの名無しさんNGNG
>>486-487
さらにアホ
0489デフォルトの名無しさんNGNG
>>488
おまえもアホ
0490デフォルトの名無しさんNGNG
>>490
俺もアホ
0491デフォルトの名無しさんNGNG
>>485-490
アホ大杉
0492デフォルトの名無しさんNGNG
>>482
ppTest = new TEST*[100];
0493デフォルトの名無しさんNGNG
なにこのスレ
0494デフォルトの名無しさんNGNG
1・2のアッホ!!

言ってみたかっただけ。
誰もしらんだろうな…。
0495デフォルトの名無しさんNGNG
なんだか「コン・タロウ」だとか「監督」だとか、妙な単語が頭に浮かぶのだが…
0496デフォルトの名無しさんNGNG
バイナリ配布する自作のlibXXXに、libstdc++の中から必要なものを
入れておく方法はないでしょうか?

実行形式ならスタティックリンクできるんですが、
libXXXだとどうやったらいいのやらわかりません。

0497デフォルトの名無しさんNGNG
.netのVC++で、gprofのような解析を行うソフトはありますか?
0498482NGNG
>>483
>>492
有難うございました!カッコが余計でしたか・・・
勉強になりました。
0499デフォルトの名無しさんNGNG
質問です。
OS:FreeBSD
コンパイラ: cc
という環境で、次のように定義します。

int i;
char msg0[255],msg1[255],msg2[255];

msg0 = "message 0";
msg1 = "message 1";
msg2 = "message 2";

このように定義したmsg0〜2をforループのなかで順に呼び出したいとき、
つまり変数名の一部としてiを展開するにはどうすればいいのでしょうか?
msgiでは別の変数名になってしまいます。

for (i=0;i<3;i++){
printf("%s",msg???);
}


0500デフォルトの名無しさんNGNG
>>499
それはギャグのつもりか?
0501499NGNG
>500
私は大真面目ですが、無知です。

言語使用上、不可能ということでしょうか?
ほかにうまいやり方は無いものですかね?
0502499NGNG
言語使用上→言語仕様上
0503デフォルトの名無しさんNGNG
>msg0 = "message 0";
Cではこんな書き方は許されてない(動くけど)。
自分が何をやっているのかも理解できてない。
とりあえず君にCは無理なので、2,3年BASICで
勉強してきた方が良いと思われ。
0504デフォルトの名無しさんNGNG
>>499
二次元配列にすればいいだけじゃないか。
char msg[3][256];

それが無理ならポインタを使え。
char *pMsg[3] = {msg0, msg1, msg2};
0505499NGNG
>503
定数の文字列の定義は、次の形が推奨されると了解しました。
(K&R百回読んで逝って来ます)
const char msg0[]="hoge";

>504
ポインタを使う方法で望む動作ができました。

ありがとうございました。もっと勉強します!
0506デフォルトの名無しさんNGNG
>>499
釣りなんだろうが、つまらないしウザイのでマジレスしとく
初心者用の本の配列のところでも読め
そして自分の馬鹿さが分かったら、プログラミングなんてあきらめろ
0507デフォルトの名無しさんNGNG
わからないので続けます。
0508デフォルトの名無しさんNGNG
>>499は半年に一回出るかでないかの逸材だな
0509デフォルトの名無しさんNGNG
>>499
有名だからって理由だろうが、たぶんお前にはK&R読むのは無理だ。
格好付けていないで、初心者用の本先に読め
それとここくらい目を通してから質問しろ
ttp://www.kouno.jp/home/c_faq/c_faq.html#contents
0510デフォルトの名無しさんNGNG
>>msg0 = "message 0";
>Cではこんな書き方は許されてない(動くけど)。

動かねぇよ!

>char msg0[255],msg1[255],msg2[255];
>msg0 = "message 0";

配列名への値の代入なんて出来る処理系があるならうp汁。
0511デフォルトの名無しさんNGNG
>>503も2、3年BASICで勉強してこい
0512デフォルトの名無しさんNGNG
>>499
新しいCの本買ったら?
あなたにはK&Rは向いてないよ。
0513デフォルトの名無しさんNGNG
最近2CHのやりすぎで、
>('0' <= c && c <= '9') || ('A' <= c && c <= 'C')
これが顔文字をつかったAAに見えてしかたありません。もうそろそろ足を洗ったほうがいいでしょうか?(Cから)
0514デフォルトの名無しさんNGNG
>>513
他の言語でも大して変わらんと思うが。
精々 'A' が "A" になるくらい。
0515デフォルトの名無しさんNGNG
('A`)
0516デフォルトの名無しさんNGNG
("A")
0517デフォルトの名無しさんNGNG
int m9['A'];
0518Rubyist!NGNG
毎度同じネタでうざい
0519デフォルトの名無しさんNGNG
おまえに言われちゃおしまいだな
0520デフォルトの名無しさんNGNG
char ch = 1["A"];
0521デフォルトの名無しさんNGNG
orz=3
0522デフォルトの名無しさんNGNG
warota
0523デフォルトの名無しさんNGNG
誘導

AAっぽいプログラムを書くスレ
http://pc5.2ch.net/test/read.cgi/tech/1102065747/
0524デフォルトの名無しさんNGNG
あ
0525デフォルトの名無しさんNGNG
>>524
なんだよ
0526デフォルトの名無しさんNGNG
なぜ、アドレス渡しをすると戻り値はないのでしょうか?教えてください
0527デフォルトの名無しさんNGNG
アドレス渡しをして戻り値のある関数は幾らでも有るが
0528デフォルトの名無しさんNGNG
たとえば
#include<string.h>

#difine NAME_MAX 19
#difine BUF 256
{
printf("Input Name : ");
scanf("%s",&buf[0]);
if(strlen(&buf[0]) <= NAME_MA
{
strcpy(&data.name[0],&buf
break;
}
printf("\n Sorry");
}

twice_no(&data);
display_data(data);

return 0;
}

void twice_no(Person *pdata)
{
pdata->no *= 2;

return;
}
0529デフォルトの名無しさんNGNG
次の方どうぞ
0530デフォルトの名無しさんNGNG
C++が++Cと命名されなかった理由は何ですか?
0531デフォルトの名無しさんNGNG
前処理、後処理考えれ
0532デフォルトの名無しさんNGNG
C++Primeの問題にあったな…
解答編持って無くて未だに模範解答を知らない
0533デフォルトの名無しさんNGNG
考えたらC++の方が自然だろうに
0534デフォルトの名無しさんNGNG
すま++Cな
0535デフォルトの名無しさんNGNG
まったり
0536デフォルトの名無しさんNGNG
ACE
http://www.cs.wustl.edu/~schmidt/ACE.html
ってどうですか?使ったことのある人の感想などあったら教えてください。
0537デフォルトの名無しさんNGNG
"++C"は"Cをインクリメントしたもの"
"C++"はCを"インクリメントしたもの"
と解釈するのはどうか

つまり前者はCとは別物の値であり
後者はCに付加価値を与えたもの

いまいち伝わらないか…
まぁでもこういう話はいくらでも出てるんだろうな
0538デフォルトの名無しさんNGNG
   ___    クルッ…
  / || ̄ ̄|| <⌒ヽ ))
  |  ||__|| <  丿 
  | ̄ ̄\三⊂/ ̄ ̄ ̄/  
  |    | ( ./     /
0539デフォルトの名無しさんNGNG
>>537
伝わる伝わらない以前に完全に意味不明だ
0540デフォルトの名無しさんNGNG
++CはC自体をインクリメントするけど
C++でインクリメントした奴とは別にCを置き去りにしてきましたとか…
0541デフォルトの名無しさんNGNG
C++ってセミコロンうってないでしょ
だからまだインクリメントされていない、不完全なわけよ
作者の言い訳のために後置なのよ
0542デフォルトの名無しさんNGNG
作者だビョーン
0543デフォルトの名無しさんNGNG
C++
↑↑
袋竿
0544デフォルトの名無しさんNGNG
最初のC++コンパイラはCのソースを吐き出していたって言うじゃん。
逆に言えば最初のコンパイラがアセンブリ言語や機械語を直接吐き出すものだったら++Cになっていたと思うよ。

0545デフォルトの名無しさんNGNG
オブジェクトの特定のパブリックメンバ変数に対してstd::findをしたいのですが
その特定のパブリックメンバはオブジェクトの値というほどのものではなく、operator==を定義するのは無理があります。
std::pairのsecondのようなかんじです。
ファンクタを作ってfind_ifするのも大げさな感じです。
boostのラムダ以外でさらりと実装する方法はありますでしょうか?
プライベートメンバ変数でgetterがあればboost::bindでさらりとかけるようですが。。。
0546545NGNG
ageマース
0547デフォルトの名無しさんNGNG
C++でreallocを使ったらいけないんですか?
0548デフォルトの名無しさんNGNG
>>547
いけなくはないが、newしたものをreallocするとかは駄目だよ。
0549デフォルトの名無しさんNGNG
renewってあったっけ?
0550デフォルトの名無しさんNGNG
ない。そんなことするぐらいだったらstd::vector<>使え
0551デフォルトの名無しさんNGNG
http://para-site.net/up/data/753.jpg

金額を入力して、総計を求めるプログラムを作っています。
コンパイルに失敗するのですが、どこがおかしいのかわかりません。
WinXP LSI-C試食版使用
0552デフォルトの名無しさんNGNG
なぜ.jpg
0553デフォルトの名無しさんNGNG
>>552
あぷろだがJPGじゃないと対応して無いので。
拡張子を変えただけなので中身はテキストです。
ビューアでも一応見れますが整形されていません。
IEならキチンと見れます。
0554デフォルトの名無しさんNGNG
VCだと何の問題もない。
コンパイルに失敗したとき何かメッセージは出ないの?
0555Rubyist!NGNG
今時LISI-Cなんか使うなよ。
どうせ最終行に改行がないとかそんなのだろ。
0556デフォルトの名無しさんNGNG
>>551
俺もLSI Cでコンパイル&実行できた。
インクルードフォルダとかの設定がまずいんじゃないか?
0557デフォルトの名無しさんNGNG
>>554->>556
改行入れたらできた・・・
わけがわからん。
どうもありがとうございました。
LSIC以外を検討します。
0558デフォルトの名無しさんNGNG
出たメッセージも読めないのか
0559デフォルトの名無しさんNGNG
Rubyist! →何コイツ
0560デフォルトの名無しさんNGNG
Rubyは採鉱言語
0561デフォルトの名無しさんNGNG
>>557
LSI-Cはコンパイラオプションによっては最終行に改行がないと正しくコンパイルできなくなる。
コードパーサの問題ではなく、コードジェネレータの問題なのでエラーが起きず、
実行して初めて異常動作に気付くケースもある。
#気付けばいいほうか。
0562デフォルトの名無しさんNGNG
>>561
gccならワーニングがでるな。
0563デフォルトの名無しさんNGNG
ウォーニングの事か?
0564デフォルトの名無しさんNGNG
そのネタはいいから。
0565デフォルトの名無しさんNGNG
ちゃんとISO Cでもソースは改行で終わっていなければならないって書いてある。
0566デフォルトの名無しさんNGNG
C/C++でメールの読み書きを行うライブラリは既存の定評あるものが存在しますか?
0567デフォルトの名無しさんNGNG
メールの読み上げと代筆してくれるのかと思った。
0568デフォルトの名無しさんNGNG
OpenMail
0569デフォルトの名無しさんNGNG
ふと思ったのですが、動的に確保した配列の数値のみ変更を許す事は出来ますか?
つまりポインタの参照先は固定で、参照先の数値のみ書換可能ということ。
*const宣言だと動的確保が出来なくなっちゃうのでconst_cast使うしかないですかね?
0570デフォルトの名無しさんNGNG
>>569
宣言と同時に初期化しろ。
int *const p = new int[n];
0571デフォルトの名無しさんNGNG
>>570
それは考えたのですが、そのポインタをクラスのメンバとして宣言し、
特定のメソッドが呼ばれた時に任意の領域を確保しようとした場合に
どうすりゃいいのかな?と(コンストラクタが呼ばれた時点では
サイズが不明)。説明不足で申し訳ありません。
例えば画像を扱うクラスで、画像データをロードする関数が呼ばれた
時に、その画像のサイズの大きさのメモリを確保したりとかです。
ポインタをprivateにして、publicな関数で参照渡しにすればいける
とは思うのですが、func()[x][y]みたいな書き方はスマートじゃ
無いかなと思ったもので。
privateなポインタとpublicなポインタの両方を用意しておけば、
publicの方の参照先を変更されても最悪メモリリークは防げるけれど
他に方法はありませんかね?
0572デフォルトの名無しさんNGNG
スマートポインタ。つか、単にお前のクラス設計がだめなだけだとおも。
0573デフォルトの名無しさんNGNG
横槍ですまんけど
ちったあ改行してよ・・・
0574デフォルトの名無しさんNGNG
改行して行と行の間を空けて
ってことね
0575デフォルトの名無しさんNGNG
>>570
あのう、横槍スマンが、
int* const p = new int(n);
と書きたかったのですか?
0576デフォルトの名無しさんNGNG
>>572
むぉっ、スマートポインタの存在を忘れてました…。
クラス設計にツッコまれると何も言えないです・・・。もっと勉強します。
0577デフォルトの名無しさんNGNG
>>572
自己解決というかクラス設計を見直した結果、添え字の演算子をオーバーロード
することで全て解決しました。やっぱダメな設計でした。
ありがとうございました。
0578デフォルトの名無しさんNGNG
開発途中はmingw/msys/gccで作業してリリースにvcでやる人の意図はなんでしょうか?
0579デフォルトの名無しさんNGNG
>>578
emacsとか?
0580デフォルトの名無しさんNGNG
教えて下さい!
参照って何 具体的な使用例とか、詳しいサンプルとかほしいなぁ
お勧めのホームページとか、あったら教えて欲しいし
お願いしますね
0581デフォルトの名無しさんNGNG
int n;
int *p = &n;
*p = 1;
cout << n;
↓
int n;
int& r = n;
r = 1;
cout << n;
0582デフォルトの名無しさんNGNG
>>580
お前なめてんのか?
なにマルチポストしてんだよ。
0583デフォルトの名無しさんNGNG
 失礼します。
↓この3行がどういう処理をしているのか教えて下さいです。

if(sum & 0x80000000){
      sum = (sum & 0xffff) + (sum >> 16);
}
0584デフォルトの名無しさんNGNG
sumが32ビット非負整数とすれば

sumの最上位ビットが立っていたら、sumの値を
(sumの下位16ビット) + (sumの上位16ビット) にする
0585デフォルトの名無しさんNGNG
やってることはわかるが、何がやりたいのかがわからんな。
0586デフォルトの名無しさんNGNG
質問お願いします。
LINUX環境でCプログラム中の各関数が何クロック使ったのか調べたいのですが、
クロック数を調べるためのコマンドってありますか?
gprofを使ってやってみたのですが、単位が秒なので正確にわかりませんでした。
0587583NGNG
>>584
なんとなくですが分かった気がします。
ありがとうございました。
0588デフォルトの名無しさんNGNG
キーボードから2つの整数を入力し、その加算、減算、乗算、除算を計算し結果を
画面に出力するプログラムを作成せよ。
但し各処理ごとに加算:add 減算:sub 乗算:mul 除算:divとして関数を作成すること。
(除算の結果は実数で)
C言語についてです。わかりません
0589デフォルトの名無しさんNGNG
宿題スレへ
0590デフォルトの名無しさんNGNG
>>585
IP のチェックサム -- 1の補数演算
http://4049.nwr.jp/comp/ip_csum.html
0591588NGNG
宿題スレへ行ってくる
0592デフォルトの名無しさんNGNG
>>585
TCP/IPヘッダのチェックサム部分の計算じゃないかな
0593デフォルトの名無しさんNGNG
2次元配列を用いて九九の結果を画面に出力するプログラムを作成せよ。
但し掛け算の計算はmulとして関数を作成すること。
おしえてくだされ
0594デフォルトの名無しさんNGNG
>>586
インラインアセンブラ使っていいなら
RDTSC を使う
ttp://yosirin9.hp.infoseek.co.jp/tips/no1/tips_no1.htm
ttp://yosirin9.hp.infoseek.co.jp/tips/no2/tips_no2.htm
0595デフォルトの名無しさんNGNG
>>593
簡単すぎ
ちょっとは自分で考えれ
0596デフォルトの名無しさんNGNG
>>586
TSCでいいのならLinuxだと
#include <asm/msr.h>
unsigned long long hoge;
rdtscll (hoge);
みたいに取れるけど...

>Cプログラム中の各関数が何クロック使ったのか
とはちょっと違う
0597デフォルトの名無しさんNGNG
>>593
588と二人で仲良く宿題スレに逝け
0598デフォルトの名無しさんNGNG
LONG64 mul(UINT a,UINT b){
return a*b;
}

main(){
for(UINT i=1;i<10;i++){
for(UINT j=1;j<=10;j++)
if(j<10)
printf("%d, ",(int)mul(i,j));
else
printf("\n");

}

}
0599デフォルトの名無しさんNGNG
mul()って'*'を使っちゃ意味無いんじゃね?
0600デフォルトの名無しさんNGNG
2次元配列使ってないし。
0601デフォルトの名無しさんNGNG
VS.NET&C言語で、
あるフォルダ(ファイルの数は不定)からファイルを
ランダムに1つづつ取り出す(同じのが選ばれないように)。
という事がしたい時、
動的な配列に格納して乱数かなんかで1つづつ取り出す
という方針でよいのでしょうか?
0602601NGNG
×あるフォルダ(ファイルの数は不定)からファイルを
○あるフォルダ(ファイルの数は不定)からファイル名を
0603デフォルトの名無しさんNGNG
for(int i=0; i<10; i++){
  a+=i;
}
などとやったとき、iの寿命はどこまでになるのでしょうか。
0604デフォルトの名無しさんNGNG
>>603
}まで
0605デフォルトの名無しさんNGNG
>>603
forの内部
0606604NGNG
forのな。
0607デフォルトの名無しさんNGNG
iの寿命は儚くて
0608603NGNG
でも、
for(int i=0; i<10; i++){
  a+=i;
}
printf("%d\n",i);

とやるとエラーもなくちゃんと表示できるんです
これってiはまだ生きてるって事なんですよね?
0609デフォルトの名無しさんNGNG
>>608
たぶんVisual C++6.0使ってるんだと思うけど、単にコンパイラが規格に準じてないだけ。
いい加減VC6なんか捨ててしまえ。
0610デフォルトの名無しさんNGNG
>>609
あ わ て ん ぼ♥
0611デフォルトの名無しさんNGNG
めるぽ
0612デフォルトの名無しさんNGNG
入力した文字を逆に表示するプログラムを作りたいんですけどどこがおかしいんでしょうか…?
#include <stdio.h>

void reverse(char *s)
{
char *p,c[100];
     p=&c;
p = s;
for(;*p;)*p++;
*p--;
for(;*s;)*s++ = *p--;
}

main()
{
char s[100];
printf("文字列を逆から表示します.");
scanf("%s",s);
reverse(&s);
printf("%s",s);
}
0613612NGNG
すいませんこちらより宿題を片づけるスレの方があってる気がしました。
スレ違いでした。
0614デフォルトの名無しさんNGNG
char *p,c[100];
     p=&c;
0615デフォルトの名無しさんNGNG
('A`)
0616612NGNG
すいませんそこをどう直せばいいかおしえてください!
0617デフォルトの名無しさんNGNG
素朴な疑問です。入門書ではなく実用書には詳しく書いてあるかもしれませんが。

int a[4] = {1, 2, 3, 4};
int *p;
int **pp;
の時、a は配列 a[4] の先頭アドレスを示すという事でした。
p = a;
などです。

では
&a
は一体何になるんでしょうか??

p = &a;
pp = &a;
など試してみましたがいずれも
warning: assignment from incompatible pointer type
になります。しかし
printf("%p %p", a, &a);
などとすると、内容は同じようです。

&a
の正体は一体なんなんですか…??
こんな構文がないなら、構文エラーになってもおかしくないと思うんですが…。
0618Rubyist!NGNG
char *
reverse(char *string)
{
    char *h, *t;

    if (*string == '\0')
        return string;

    h = string;
    t = string + strlen (string) - 1;

    while (h < t) {
        char c;
        c = *h;
        *h = *t;
        h++;
        *t = c;
        t--;
    }
    return string;
}
0619デフォルトの名無しさんNGNG
int a[4];
int (*p)[4] = a;
0620デフォルトの名無しさんNGNG
>>612
#include <stdio.h>
#include <string.h>

int main(void)
{
 char s[100];
 printf("文字列を逆から表示します.");
 scanf("%s",s);
 strrev(s);
 printf("%s",s);
 return 0;
}
0621612NGNG
>>618
その通りやったらできました!
でも中身理解するのに時間かかりそうです…。
ありがとうございます!

>>620
おお!確かにできます!!
こんな簡単にできるもんなんですね!
でもreverseって逆にする関数を別に作らないとダメっぽいので…。
ありがとうございました。
0622617NGNG
>>619
わかりました!これは…、そのまんま文字通り「配列へのポインタ」ですよね。
(タイプミスでたぶん int (*p)[4] = &a; ですね)
なんだかちょっと混乱してきましたが。「配列へのポインタ」は多次元配列専用のものではないという事か(?)。
とにかく疑問解決しましたありがとうございます。
0623デフォルトの名無しさんNGNG
>>612
そうやって他人のソースの流用ばかりして
ポインタの理解できていないまま次へ次へと進んでも前進とは言えない
0624デフォルトの名無しさんNGNG
関数の引数で、ポインタ(*)を使う場合と参照(&)を使う場合の違いはなんでしょうか?
また、どういう時に使い分けたらいいのですか?
0625デフォルトの名無しさんNGNG
>>612 >>617
ここ読め
ttp://www.kouno.jp/home/c_faq/c_faq.html#contents
ttp://kmaebashi.com/programmer/pointer.html
0626デフォルトの名無しさんNGNG
ポインタにできて参照にできないことって何かありますか?
また、その逆もありますか?
0627デフォルトの名無しさんNGNG
>>626
参照先の変更
0628デフォルトの名無しさんNGNG
ポインタはNULLが渡せる。
無効な値を取る場合があるときはポインタ.。
0629デフォルトの名無しさんNGNG
ポインタと参照のどっちが萌えですか?
0630デフォルトの名無しさんNGNG
>>629
考えるな、感じろ
0631デフォルトの名無しさんNGNG
>>629-630
強いて言えばポインタ
0632デフォルトの名無しさんNGNG
ポインタは古いです。参照の方が萌えだと思います。
0633デフォルトの名無しさんNGNG
参照は狙いすぎ。萎え。
ポインタこそ王道。
0634デフォルトの名無しさんNGNG
参照っていうと別なものと紛らわしいな
リファレンスだろ
0635デフォルトの名無しさんNGNG
>>634
おまえ最悪
0636デフォルトの名無しさんNGNG
日本語か英語かの違いだけ…
0637デフォルトの名無しさんNGNG
>>632
参照はあまりいじれない。
0638デフォルトの名無しさんNGNG
オブジェクトを値渡しで渡し隊
0639デフォルトの名無しさんNGNG
char buf[10][100]
の10を動的配列にしたいんだけど
Cで、どうやって書けば良いですか?
0640デフォルトの名無しさんNGNG
char *buf[100];
buf[0]=new char[要素0のサイズ];
buf[1]=new char[要素1のサイズ];
    ....
buf[99]=new char[要素99のサイズ];
0641デフォルトの名無しさんNGNG
違った。newじゃなくてmallocだorz
0642デフォルトの名無しさんNGNG
char buf = malloc(10);
char buf2 = malloc(10*1000);
int i;
for(i = 0; i <10; i++)
  buf[i] = bu2[i * 1000];


0643デフォルトの名無しさんNGNG
Cには多次元配列なんてものは存在しないってことを覚えておけ。
0644デフォルトの名無しさんNGNG
ヘッダしだいだろうけどsize_tってアーキテクトで最良のパフォーマンスを
出せる最大のバイトで宣言されてるの?
これって慣習、それとも何かの規約で保証されてる?
std::size_tも同じ?
0645デフォルトの名無しさんNGNG
>>643
最高に頭悪そうな発言してください in ム板 (3)
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0646639NGNG
勉強になりました。
ありがとうございました。
0647デフォルトの名無しさんNGNG
Windows/Linux環境で、標準入出力を横取りする方法を知りたいです。

あるプログラム(A)から、他のプログラム(B)を呼び出すプログラムを組んでいます。
・Bは簡単なCUIのコンパイラです。引数に指定されたファイルを読み、
文法に問題がなければファイルを出力し、エラーならば各種エラーメッセージを表示します。
・Aは、BのGUIフロントエンドです。裏でBを呼び出し、その結果を利用します。

AからBの呼び出しはsystem関数を使えばいいのですが、そうすると
Bが標準入出力やエラー出力に流したメッセージが、コマンドプロンプトに垂れ流しに
なってしまいます。
これらのメッセージをAが受け取り、解釈したいのですが、どのようにすればいいのか
わかりません・・・・

できれば標準C/C++の範囲内に収まるようなやり方があればいいのですが・・・
0648デフォルトの名無しさんNGNG
>できれば標準C/C++の範囲内に収まるようなやり方

さすがにこれは無理
0649デフォルトの名無しさんNGNG
>>647
>標準C/C++の範囲内に収まるようなやり方があればいいのですが・・・
ない

UNIX環境についてはpipe exec forkで検索
Windows/Linux環境の差異を吸収するようなライブラリは???
0650デフォルトの名無しさんNGNG
[email protected]
0651デフォルトの名無しさんNGNG
結果をファイルに書き出してAがそのファイルを読むとか。
0652デフォルトの名無しさんNGNG
標準入力に垂れ流すことは有り得ないからpopen("B", "r")だろうな。
0653デフォルトの名無しさんNGNG
char a[10];
a[0] = 'a';
a[1] = 'b';
a[2] = 'c';
a[3] = '\0';

とした場合、a[4]以降にはメモリ上どんな値が入ってるのでしょうか?
\0(NULL)ではないのでしょうか?
0654デフォルトの名無しさんNGNG
>>653
不定です。決まっていません。
0655デフォルトの名無しさんNGNG
>>653
不定
0656デフォルトの名無しさんNGNG
なるほどそうでしたか。
ありがとうございます。勉強になりました。
0657デフォルトの名無しさんNGNG
char a[10];
a[9] = '\0';
printf("%s",a);
0658デフォルトの名無しさんNGNG
>>657
あふぉ
0659デフォルトの名無しさんNGNG
>>653
不定
おせっかいなコンパイラは0(\0)を入れてくれることもある
0660デフォルトの名無しさんNGNG
VCのDebugは逆にccccccccを入れたりする
0661デフォルトの名無しさんNGNG
>>644
ただ単にsizeofの結果の符号無し整数型としか書かれていない。
0662デフォルトの名無しさんNGNG
ふてーやろうだ
0663デフォルトの名無しさんNGNG
CPU の architecture 次第だろうけど
size_t ってその architecture で
最良の performance を出せる
最大の unsigned int で宣言されてるの?
これって慣習?
それとも何かの規約で保証されてる?
0664デフォルトの名無しさんNGNG
CPU の architecture 次第だろうけど
unsigned int ってその architecture で
最良の performance を出せる
最大の bit で宣言されてるの?
これって慣習?
それとも何かの規約で保証されてる?
0665デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>

struct x{
int num;
char *str;
};

void disp(struct x data){
printf("%d, %s\n", data.num, data.str);
}

void main(){
char str[] = "abcde";
struct x data1 = { 1, str };
struct x data2;

data2 = data1;

disp(data1);
disp(data2);

*(data1.str) = 'A';

disp(data1);
disp(data2);
}
ポインタはコピー元とコピー先で同じアドレスを指しますので、
どちらか一方のポインタの指すデータを書き換えた場合は、
もう一方のデータも書き換えられることになります。

だそうです。いろいろ試したんですが、なぜか作動しません。
0666デフォルトの名無しさんNGNG
ちなみに15行目の struct x data1 = { 1, str };
のstrを"他の文字"に変えると無事にコンパイルができました。
0667デフォルトの名無しさんNGNG
>>665
文字列リテラルを書き換えた場合の動作結果は不定だよ。
0668デフォルトの名無しさんNGNG
>>665
こうしろ
struct x data1 = {1};
struct x data2;
data1.str = str;
0669665NGNG
>>668
コンパイルできました、感動です。ありがとうございます。
0670デフォルトの名無しさんNGNG
うっせばーか。礼なんかいちいちいらねーんだよ。
0671デフォルトの名無しさんNGNG
↑素直に感情を表現できないカワイイ人
0672デフォルトの名無しさんNGNG
テキストファイルを扱うfin_textという関数があるのですが、

fopenを使ってファイルを開いておいて
引数としてファイルポインタを与えたほうがいいのでしょうか?

それとも、ファイル名を文字列として与えて、
関数内でfopenを行ったほうがいいのでしょうか?
0673デフォルトの名無しさんNGNG
Winsockで画像ファイルを送信したいのですが、受信したファイルが正常に表示されません。
16KBずつ読み込んでそれを送信しているのですが、正しく表示されるのは最初の16KBの部分だけ(多分)で、
それ以降の部分は原型がないくらいに乱れています。
オフセット辺りが問題かと思って色々変えてみたのですが解決しません。
よろしくお願いします。
該当部分のソースです。

0674デフォルトの名無しさんNGNG
/*
*  変数は全てローカル変数。送信ファイルのフォルダと受信ファイルのフォルダは別です。
*/
//送信部分
hFile=CreateFile(FileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
memset(&buf,'\0',sizeof(buf));
SetFilePointer(hFile,0,0,FILE_BEGIN);
ReadFile(hFile,buf,sizeof(buf),&read_size,NULL);
while(read_size){
    send(socket_c,buf,read_size,0);
    memset(&buf,'\0',sizeof(buf));
    SetFilePointer(hFile,read_size,0,FILE_CURRENT);
    ReadFile(hFile,buf,sizeof(buf),&read_size,NULL);
}
CloseHandle(hFile);

//受信部分
hFile=CreateFile(FileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
memset(&buf,'\0',sizeof(buf));
SetFilePointer(hFile,0,0,FILE_BEGIN);
bl=recv(socket_c,buf,sizeof(buf),0);
while(bl){
    WriteFile(hFile,buf,bl,&write_size,NULL);
    memset(&buf,'\0',sizeof(buf));
    SetFilePointer(hFile,bl,0,FILE_CURRENT);
    bl=recv(socket_c,buf,sizeof(buf),0);
}
CloseHandle(hFile);
0675デフォルトの名無しさんNGNG
>>672
テキストファイルそのものを操作するならファイル名。
中身しか興味が無いならファイルポインタ。

ファイル名を渡せばそれをremoveしたり出来るし、
ファイルポインタならファイルを途中から渡したりstdinを渡したり
出来るからな。
0676673-674NGNG
自己解決しました。
送信・受信のファイル読み込み時にSetFilePointerを使っていたのが問題だったようです。
SetFilePointerを使わなくてもポインタは自動的に移動するということが分かりました。
俺のソースだとそこからさらに移動させていたことになります。
お騒がせしました。
0677デフォルトの名無しさんNGNG
>>675さんありがとうございます。
テキストファイルしか操作しませんので、
ファイル名を渡そうと思います。

remodeとかはよく分かりませんので調べてみます。

ありがとうございました。
0678デフォルトの名無しさんNGNG
STLのコンテナにMyClass *myClassを入れたいのですが
const MyClass &でないといけないとコンパイラに怒られてしまいます
こういうのは普通どうするのでしょうか?キャスト?
0679デフォルトの名無しさんNGNG
>>678
どんなコード書いてるのか知らんが、お前の書き方が悪いだけだよ
0680678NGNG
>>679
えぇぇ、stl::listになんらかの変数のポインタを入れたいことって無いですか?
0681デフォルトの名無しさんNGNG
入れられるって。試しにエラーが出たコードを貼ってごらん?
0682デフォルトの名無しさんNGNG
>>680
入れられるんだよ。入れられないのはお前の書き方が悪いだけだって言ったんだよ。
0683678NGNG
こんな感じなんですが・・・

list<MyClass> *myClassList = new list<MyClass>;
MyClass *myClass = new MyClass();
myClassList()->push_back(myClass);
0684デフォルトの名無しさんNGNG
>>683
×list<MyClass>
○list<MyClass*>
0685678NGNG
おおおお、できました!
なるほどそういう問題だったんですね!
0686デフォルトの名無しさんNGNG
>>677
逆じゃない?ファイル名を渡すってことはファイル名を使った
APIを使いたいときにかぎるっていうことを>>675を言ってるんだと
思う。だから、ファイルポインタを渡すべきだと思う。
0687デフォルトの名無しさんNGNG
メンバポインタについて質問させてください。
以下のソースで、int型のメンバポインタは作れるのですが、
void型のメンバポインタを作ろうとすると、エラーが出てしまいます。
汎用のメンバポインタというものは作れないのでしょうか?

class A{
};

int A::*ptr_int;
void A::*ptr_void; //エラー2182

int main()
{
}
0688デフォルトの名無しさんNGNG
void * は総称ポインタだけど
void 自体に汎用とか総称の意味はないのでは…?
0689デフォルトの名無しさんNGNG
>>687
ISOの8.3.3 pointer to membersより

A pointer to member shall not point to a static member of a class (9.4),
a member with reference type, or "cv void".
                    ~~~~~~~~~~~~
0690デフォルトの名無しさんNGNG
C++ではvoid型ポインタはあまり推奨されないイメージがあるな。
継承によるポリモーフィズムを使う方向が正解では。
0691デフォルトの名無しさんNGNG
というかメンバポインタって関数以外にはあまり使わないイメージがある…
0692デフォルトの名無しさんNGNG
前から気になっていたのですが
exit関数の引数に入れる数字
例えばexit(0)の
0に当たるところです。

そこに入れる数字に何か意味はあるのですか
教えてください。
0693デフォルトの名無しさんNGNG
>>692
ttp://www.bohyoh.com/CandCPP/C/Library/exit.html
ちょっとは自分で調べような。
0694デフォルトの名無しさんNGNG
>>693は厳しいようでいて実は優しい人(・∀・)イイ!!
0695デフォルトの名無しさんNGNG
>>693
ありがとうございます

とりあえずまとめてみます
exit(0)または、exit(EXIT_SUCCESS)は、正常終了時
その他は、異常終了
このEXIT_SUCCESS,(EXIT_FAILURE)はstdlib.hにマクロ定義されている
0696695NGNG
実行してみたら
EXIT_SUCCESSの中身は、0でした
EXIT_FAILUREの中身は、1でした

とりあえず、0が成功、1が失敗と覚えます
0697687NGNG
>> 688, 689, 690, 691
ありがとうございました。
よく分からなかったのですが、void型は使えないということで納得します。
ソースを見直したら、int型のメンバポインタで問題なさそうだったので、
それでやってみることにしました。
0698デフォルトの名無しさんNGNG
新しいクラス作るときに
//hoge.hpp
class Hoge {
public:
hoge() {...}
int fuga(){
...
}
hage() {
...
}
};
ってヘッダ内に全部書いてるんだけど、後でこの実装部分を.cppに移そうとすると
非常に面倒で困るわけです。
なにかこのへんを補助してくれるツールなどご存知ありませんか?
0699デフォルトの名無しさんNGNG
列挙型とそれを使う関数を定義します。
enum Value{a=1, b, c};
void func(Value val)
{
  //hogehoge
}

プログラム中でfuncを使おうとすると、

//エラー
func(a);

gccは「Valueとintに互換性がないよ」といったエラーを吐きます。
func((Value)a);とすればコンパイルは通るのですが、
これってgccでは普通なんでしょうか?MSのclでは問題はでないようなんですが・・・
0700デフォルトの名無しさんNGNG
>>699
VS.net2003ではエラーになったYO
たぶんVC6.0が糞なだけだYO
0701デフォルトの名無しさんNGNG
>>699,700
えっ!?
通るのが普通なんじゃないんですか?
うちのg++(3.3.4)は警告なしで通るんですが
0702デフォルトの名無しさんNGNG
>>701
ちょっと待ておまえさっきはgccで通らずVCで通るとか言ってただろ。
コンパイラのバージョンとオプションくらい書いとけ
0703701NGNG
>>702
699とは別人です

ついでに報告するとg++(3.3.4)は701に書いた通りで
gcc(3.3.4)だと通りません
enumってC++だけだったんだっけ?
0704デフォルトの名無しさんNGNG
Cでは
enum Value { a=1, b, c };
なら
void func(enum Value val)
じゃないといかんかと。それが嫌であれば
typedef enum _Value { a=1, b, c} Value;
とか。
C++ではenumもstructも特に書かなくても使える
0705701NGNG
>>704
>void func(enum Value val)
>C++ではenumもstructも特に書かなくても使える
おお
そうでしたそうでした
どうもありがとう
0706704NGNG
どういたしまして。
0707デフォルトの名無しさんNGNG
ここは礼儀正しいインターネッツですね
0708デフォルトの名無しさんNGNG
どういたしまして。
0709デフォルトの名無しさんNGNG
いえいえこちらこそ
0710デフォルトの名無しさんNGNG
このスレはsage禁止
0711デフォルトの名無しさんNGNG
なんでやねん
0712デフォルトの名無しさんNGNG
雰囲気が良いからですよぉ〜
0713デフォルトの名無しさんNGNG
00:00
0714デフォルトの名無しさんNGNG
質問させてください
例えば、
struct Foo { int hoge[2][2]; };
Foo foo[2][2];
Foo *p = foo;

こんなとき、p を使って foo[1][1] の hoge[1][1] にアクセスしたいときは
どう書けばいいんですか?
0715デフォルトの名無しさんNGNG
そもそもFoo *p = foo;ができない。
0716714NGNG
>>715
即レスどうもです。
でもFoo *p = foo;はできたと思うんですが…(ちなみにBCC)
わかり易くしようと思ってstructにしたんですけどclassの場合どう
でしょうか?
0717デフォルトの名無しさんNGNG
クラスでもダメ
0718714NGNG
>>717
あっ間違えましたFoo *p = (Foo*)foo;です。
何度もスイマセン…
0719デフォルトの名無しさんNGNG
>>714
struct Foo { int hoge[2][2]; };
Foo foo[2][2];

Foo (*p)[2] = foo;
int hage = p[1][1].hoge[1][1];
0720デフォルトの名無しさんNGNG
実は前々から聞きたかったのだけどFooってどういう意味なんですか?・・・。
0721デフォルトの名無しさんNGNG
子供好きの合言葉
0722714NGNG
>>719
なるほど…
初心者なものでちょっと難しいですが後は自分で考えてみます
即レス助かりました。ありがとうございます!
0723デフォルトの名無しさんNGNG
セマンティックス的に破壊的なキャストはするなボケ
0724デフォルトの名無しさんNGNG
Foo* foo = &foo[0][0];
0725デフォルトの名無しさんNGNG
>>715
一次配列の時と勘違いしているのでは

>>718
強引にキャストしているから代入できているようにみえるだけ。
0726725NGNG
>>715
じゃなくて
>>716

0727デフォルトの名無しさんNGNG
アプリケーション間で、変数の値の受け渡しは可能なのでしょうか?
例えば、コンパイラをCUIで作って、エディタをGUIで作って、コンパイラからエラーメッセージをエディタに受け渡す様なそんな感じで。
0728デフォルトの名無しさんNGNG
>>727
ええ可能です
お使いの開発環境はそうなっていませんか?
0729727NGNG
>728
なってますが、それをどうやってC++で実装すれば良いのやら………
ファイルに書き出して読み込むという方法は直ぐに思いつくのですが、
もっとスマートな方法があると思うので……例えば、プロセス間の通信とかは不可能なのでしょうか?
0730デフォルトの名無しさんNGNG
>>729
Win32ならパイプ(NT系のみ)とか。メールスロットとか。
0731デフォルトの名無しさんNGNG
プロセス間通信で調べれば一発のような。。。
0732デフォルトの名無しさんNGNG
メモリファイルでも出来る。
あと、メッセージのやり取りでも。
アプリ間のプロトコルを自分で決めちゃえば
かなりのことが出来るはず。
0733デフォルトの名無しさんNGNG
WM_COPYってメッセージって使えるんしたっけ?
>>729の中の人、調べてみたら?
0734デフォルトの名無しさんNGNG
>>733
クリップボードと関係あるみたい。
0735デフォルトの名無しさんNGNG
WM_COPYDATAなら適当にWindowsがメモリマップトファイル使っていい感じで処理してくれるが。
0736デフォルトの名無しさんNGNG
>>730
名無しさんなら9xでもパイプは使えるよ。
0737デフォルトの名無しさんNGNG
CUIアプリが、仕事が終わったら終了するという仕様なら、
GetExitCodeProcess で終了コードを取得できないか?
0738698NGNG
誰にもレスされずに涙目の漏れが来ましたよ
0739デフォルトの名無しさんNGNG
>>738
適当なエディタでマクロでも組んだら?
インクルードファイルの関数定義をコピーしてクラス名追加してインデントを整えるのと、
インクルードファイルの方は関数本体をセミコロンに変えるだけでしょ。
0740714NGNG
もう一度質問させてください。
配列の配列 int array[N][N]; は式の中では配列へのポインタに成る、
というのはわかったんですがこれがポインタのポインタにならない
というのは違和感を感じます。
後ろの[N]は配列を配列として扱っているということなんでしょうか?
あと int (*p)[2] のカッコは必要なんですか?よろしくお願いします
0741デフォルトの名無しさんNGNG
>>740
int *p[2];だと「『intへのポインタ』の配列[要素数2]」になる。int *(p[2]);と同じ。
int (*p)[2];は「『intの配列[要素数2]』へのポインタ」になる。

違和感は慣れるしかない。
0742デフォルトの名無しさんNGNG
>>740
Tの配列はTへのポインタになる。
∴配列の配列は配列へのポインタになる。
0743デフォルトの名無しさんNGNG
c言語で五目並べのソースファイルが見れる所どこかにありませんか?
対コンピュータの思考ルーチンをどうしていいか全くわからないので。
0744デフォルトの名無しさんNGNG
UNICODEビルドする可能性がある場合
'a'のような1文字も_T('a')と書いた方がいいんでしょうか?
0745デフォルトの名無しさんNGNG
>>744
そう。
…って俺も理由を深く考えたことなかったんだけど
_T('ア') とかの場合に特に意味があるんだよね、きっと?
0746デフォルトの名無しさんNGNG
>>744
TCHARならそうしろ。
char/CHARなら_Tはつけるな。
個人的にはCランタイムはUnicodeにする意味はないと思う。
どうせ内部でShiftJISに戻していたりするんだろうし。
俺はWin32APIが絡んでくるときだけ_Tとかを使っている。
0747714NGNG
>>741,742
レスどうもです。なんかわかってきました
int *p[2];は配列でint (*p)[2];はポインタというのがミソですね
ここは親切さんが多くて助かります。ありがとうございました
0748デフォルトの名無しさんNGNG
本当に初歩的で申し訳ないのですが指南を頂きたく思います。
C言語で(表示はDOSの真っ暗に〇× 0は空欄4は―で何もないという意味)
簡単な〇Xゲームを作ろうとしているんですが
下記のようにC配列で判定、S配列で表示しようと考えたのですが
結局ifでc[i][j]=???でprintfで表示するしかないんじゃあS配列いらんなあ(汗
という考えになったんですけど どうにかなりませんでしょうか?
int c [5][5]={
{0,1,2,3},
{1,4,4,4},
{2,4,4,4},
{3,4,4,4}
};
//0123  456で−〇Xの判定
char s [8][15]={
" ",
      "1",
      "2",
      "3",
"−",//4
"〇",//5
"×",//6
};
0749デフォルトの名無しさんNGNG
>>748
たしかにsは要らなさそうだ。
それよりその1文字変数名はやめろ。
0750デフォルトの名無しさんNGNG
S配列を無理やり使う理由は?
0751デフォルトの名無しさんNGNG
それよりもテーブル引き(c[i][j][s])用の配列を作ったほうがいいんじゃないか?
char *s[] = {
    " ",
    "○",
    "×",
    "−",
};
0752デフォルトの名無しさんNGNG
>>749>>750
2次元配列の勉強をしていまして
1つは判定というか内部的な処理
2つ目の配列はそれに対応する反応ってな具合にできるんじゃないだろうか?
と素人考えになったんであえて2つ使ってます。

発展させれば0のときはこの画像、1の時は別の画像出す
みたいなのにも応用できる物が出来そうだな・・・と

変数名はscanとかに変えておいたほうがいいですね。申し訳ない
0753デフォルトの名無しさんNGNG
>>748
何をしようとしてるのか良く分からんのでコード書いてくれ。
0754デフォルトの名無しさんNGNG
>結局ifでc[i][j]=???でprintfで表示するしかないんじゃあS配列いらんなあ(汗

???
やりたい事は printf("%s",s[c[i][j]]) ではないのか?
0755デフォルトの名無しさんNGNG
>>753
余計分からなくなるに
1gotoかける
0756デフォルトの名無しさんNGNG
よろしくお願いします。

func( int*& a );
とある場合にどのように、引数を渡せばいいのでしょうか?
0757デフォルトの名無しさんNGNG
>>756
int*&はintへのポインタへの参照。
意味としてはtypedef int *PINT; func(PINT& a);と同じで、これならわかるよな。
0758756NGNG
>>757 さん
早速のレスありがとうございます。

ということで、
int* a;
func(a);
なのですね。

もうすこし、参照とポインタについて調べてみます。
ありがとうございましたm(__)m
0759デフォルトの名無しさんNGNG
756ではないんだけど、ポインタを参照で受け取る理由ってあるんですか?
0760デフォルトの名無しさんNGNG
>>759
例えばこういうことができる。(戻り値を使えとかそういうツッコミはするな)
void func(int*& a)
{
 a = new int;
}
0761デフォルトの名無しさんNGNG
M糞のマクロが気に入らないときとか
#define SAFE_RELEASE(p) { p->Release(); p = 0; }
template <class T>
void safe_release(T*& p)
{ p->Release(); p = 0; }
0762デフォルトの名無しさんNGNG
>>760
>>761
なるほど、良くわかりました。thx!
0763デフォルトの名無しさんNGNG
>>761
どうでもいいけどそれはIUnknwon*&でいいんじゃないか?
全部そこから継承されているんだし。
0764デフォルトの名無しさんNGNG
>>763
I???* から IUnknown* に暗黙の変換が行われたとして、
変換結果のポインタはテンポラリだから IUnknown*& には渡せないかもしれない。
0765デフォルトの名無しさんNGNG
読み込んだファイルのバイト数を知りたいんですが

while(!feof(fp)){
file_length++;
}
のようにfeof関数を使うと正しくバイト数が
分かりません。
どのように書けばいいですか?
0766デフォルトの名無しさんNGNG
>>765 それ、読み込んでないよ。
0767デフォルトの名無しさんNGNG
>>766
省略しましたが、ファイルの内容は読んでます。
バイトが0x1Aの地点でfeofによりwhile文を抜ける
んですけど、どう書けば正しいですか?
宜しくお願いします。
0768デフォルトの名無しさんNGNG
>>767
読んでるなら、読んだ時に読んだサイズを足していけ。
0769デフォルトの名無しさんNGNG
fseek()とftel()使え
0770デフォルトの名無しさんNGNG
>>767
> バイトが0x1Aの地点でfeofによりwhile文を抜ける
ttp://www.kouno.jp/home/c_faq/c12.html#38
0771デフォルトの名無しさんNGNG
Easy Link Libraryというライブラリを使って、ゲームを作っているのですが、
Easy Link Libraryの質問掲示板や、専用スレなどは無いでしょうか?
公式HPが無くなってしまったため、困っています。

もしご存知の方いらっしゃいましたら、教えてください。
0772デフォルトの名無しさんNGNG
>>771
もし初心者から一歩前へ進みたいと思うなら、そのライブラリとは極力かかわらない方が
良いですよ。
0773デフォルトの名無しさんNGNG
そうですか。ところで
int *ptr と int* ptr はどちらも同じ意味なのでしょうか?
0774773NGNG
一応ageます、だれか宜しくお願いします。
0775デフォルトの名無しさんNGNG
>>773
そんな低レベルの質問するな
0776デフォルトの名無しさんNGNG
>>773
はい、同じ意味です。
ところで、int *ptr;もしくはint* ptr;で宣言された変数ptrは何型になるか
解かりますか?
実は、これはint*型なのです。
ですから、意味としてはint* ptr;の方がわかりやすいですね。
ちなみに*ptrは、ptrが指すアドレスに記録されているint型の値のことですね。
0777デフォルトの名無しさんNGNG
int* foo,bar;
0778デフォルトの名無しさんNGNG
しかし
int* ptr, n;
とか書くと混乱するわけだが。
0779デフォルトの名無しさんNGNG
>>778
まぁね。
0780デフォルトの名無しさんNGNG
関数の戻り値がポインタの時も
int *foo() と書くか
int* foo()
と書くかで悩むなぁ。
0781773NGNG

>>775
*がMSN検索でかからなかったんです、すいません。

>>776
丁寧な回答ありがとうござます、やはり同じ意味でしたか。
0782デフォルトの名無しさんNGNG
>>776
俺はint *p; int *func();派
「式の中で*pと書くとint型の値が得られる」と読む。funcも当然同様。
0783デフォルトの名無しさんNGNG
関数へのポインタがint (*func)();だから、
念のため混同しないように関数だけint* func();にしてる。
変数はint *p;

やっぱり統一した方がいいんでしょうか?
0784デフォルトの名無しさんNGNG
>>783
スタイルを統一するのは読みやすいコード作りの第一歩。
0785デフォルトの名無しさんNGNG
C++のクラスにも構造体のアライメントのようなもの
ってあるんですか?
0786デフォルトの名無しさんNGNG
あります。
0787デフォルトの名無しさんNGNG
>>783
そんなときのtypedef
typedef int *PINT;
PINT func();
0788デフォルトの名無しさんNGNG
>>783
そんなときのtypedef
typedef int *PINT;
PINT func();
0789デフォルトの名無しさんNGNG
>>787
アフォか。構造体へのポインタ使うたびに typedef するつもりかよ。
0790デフォルトの名無しさんNGNG
個人開発してる内は好きなようにtypedef使いまくれば良いさ
共同開発するときはちょっとばかし気をつけたほうが良いけど
0791デフォルトの名無しさんNGNG
OCamlにした方が遥かに生産性高そうだね。
0792デフォルトの名無しさんNGNG
Enter のみを押すまで入力を繰り返すプログラムを書きたいのですが、
if の条件をどうすればよいのかわかりません。
ヒントだけでもお願いします。

int n = 0;
char data[64];

while(1){
printf("data[%d]=", n++);
scanf("%s", data);
if(data == '\0'){
break;
}
}
0793デフォルトの名無しさんNGNG
ものすごく初心者な質問ですみません・・
家でBorlandのCコンパイラをダウンロードしてコマンドプロンプトを開いてみたのですが、
C:\Documents and Settings\user>
ってなってて、どうも学校のとは違います。
terapad等をしても
「'terapad'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
と出て何もできません。
C:>にするにはどうすればよいのでしょうか?
0794デフォルトの名無しさんNGNG
cd c:\と打てば、C:\>になります。
terapadはパスが通ってないからじゃない?
terapad.exeまでのフルパスを打つか、パスを通せば OK
パスの通し方は検索すれば見つかります。
0795デフォルトの名無しさんNGNG
>>794
C:\>になりました。ありがとうございました!
これからパスの通し方を勉強してきます
0796デフォルトの名無しさんNGNG
>792
data[0]

>793
コマンドプロンプトを開くショートカットのプロパティで、ディレクトリを設定する。
Terapadは、ぐぐってインストールし、pathを設定する。
0797デフォルトの名無しさんNGNG
>>792
こういう事か?

#include <stdio.h>
#include <string.h>

int main(void)
{
char data[64];

while (1) {
fgets(data, sizeof(data), stdin);
data[strlen(data) - 1] = '\0';
if (*data == '\0')
break;
else
printf("data = %s\n", data);
}

return 0;
}
0798793NGNG
あ、パスはダウンロードした時にマニュアル通り
環境変数のPATHを編集で「;C:\BORLAND\BCC55\BIN」と追加したのですが、やはり
「'terapad'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
と出ます。
どうすればいいのでしょうか・・・
「;C:\BORLAND\BCC55\BIN」を付け加える前の部分に問題があるのでしょうか?
0799デフォルトの名無しさんNGNG
>>798
それはBCCへのパスであってterapadへのパスではない。
0800デフォルトの名無しさんNGNG
>>798
WindowsXPか?マイコンピュータを右クリック→プロパティ→詳細設定→環境変数で、ユーザの
環境変数のPATHに追加して、再起動してみな。
0801デフォルトの名無しさんNGNG
>>798
Terapadをインストールしろ
0802デフォルトの名無しさんNGNG
>>797
バッチリです!
でも、ちょっとコードの意味わかめなんで勉強してきます!
0803793NGNG
>>799-801
レスありがとうございました。
terapadをダウンロードして再起動して
terapadへのパスの通し方は「C:\Program Files\TeraPad\TeraPad.exe "%1"」と打てばできるそうなのでやってみたのですが、
「'Program'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
と出てきてしまい、またダメでした・・
0804デフォルトの名無しさんNGNG
C:\>
のところで、
C:\>"C:\Program Files\TeraPad\TeraPad.exe" test.c
とすれば、test.cが編集できる。

これを
C:\>TeraPad test.c
で出来るようにしたいなら、"C:\Program Files\TeraPad"にPATHを通す。
0805793NGNG
>>804
ありがとうございました。
上のは理解できたのですが、下の、"C:\Program Files\TeraPad"はどこで設定するのですか?
いろんな窓が開いててちょっと混乱気味です・・すみません・・
terapadの「表示」→「オプション」→ブラウザのパス設定とかは違いますよね?
0806デフォルトの名無しさんNGNG
>>797
scanf や fgets で入力された文字列の最後に'\0'が入るのではなく、
data[64]='\0' で、あとは未定義(?)ということでしょうか?

あと、fgets を scanf に入れ替えるとうまく動きませんが、
両者の違いは何ですか?
0807デフォルトの名無しさんNGNG
>805
C:\BORLAND\....と同じように。

>806
fgetsは、最後に改行文字が入るから
0808793NGNG
再び再起動してからやってみたらできました!ありがとうございました!
朝からお騒がせしてすみませんでした・・・
0809デフォルトの名無しさんNGNG
>>806
普通scanfで中止する時は 戻り値がEOFか調べる
0810デフォルトの名無しさんNGNG
すみません、コマンド プロンプトからterapadでファイルを読み込む際の、
読み込み先のファイルの変更はどうすればいいのでしょうか?
0811デフォルトの名無しさんNGNG
>>810
鼬害。
terapadの使い方くらいterapadに同梱されてるだろ。
0812デフォルトの名無しさんNGNG
もはやC/C++とは何の関係もない、ただの教えてクン養成スレになりつつあるな。
関係ない質問に答えていた俺にも原因の一端はあるのだが。
0813デフォルトの名無しさんNGNG
読んでもよくわかりませんでした・・
荒らしてしまってすみませんでした。
もう時間なのでここで消えます。失礼しました・・
0814デフォルトの名無しさんNGNG
ま、家庭教師ってなわけじゃないからさ。

0815デフォルトの名無しさんNGNG
>>806
char data[64];と宣言しているのにdata[64]に代入するとは何事。
0816デフォルトの名無しさんNGNG
>>815
相手のレベルを考えてから言えよな
ほっとけ
0817デフォルトの名無しさんNGNG
ちなみに
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\
でパス通せたりする
0818デフォルトの名無しさんNGNG
>>817
普通環境変数のPathに設定するかと…?
0819デフォルトの名無しさんNGNG
>>817
ちょとまて。そこに書いたってパスは通らないんじゃないか?
0820デフォルトの名無しさんNGNG
>>819
そうだよ。
>>817
そこはアプリケーションを指定して実行からでしか有効でない。
0821デフォルトの名無しさんNGNG
>>815
BASICの香りが
0822デフォルトの名無しさんNGNG
>821

[] でないなら BASIC なんだが...
0823デフォルトの名無しさんNGNG
2進数で考えて、引数の数だけ下位からビットが立った数を
返すマクロって書けるでしょうか?

hoge(3)が7(2進数で00000111)を返すような感じです。

関数になってしまうような長いのなら書けるのですが、コンパイ
ル(プリプロセス?)時に定数になるものは書けるでしょうか?
0824デフォルトの名無しさんNGNG
>>823
#define hoge(n) ((1ul<<(n))-1)
0825デフォルトの名無しさんNGNG
>>823
#define hoge1 0x01
#define hoge2 0x03
#define hoge3 0x07
#define hoge4 0x0F
#define hoge5 0x1F
#define hoge6 0x3F
#define hoge7 0x7F
#define hoge8 0xFF
0826デフォルトの名無しさんNGNG
>>824
ありがとうございました!
一応逆アセンブルして確かめてみましたが、きっちり定数に
なっていました。これですっきりできます。
0827デフォルトの名無しさんNGNG
>>823
メルセンヌ数を知らんのか。
0828デフォルトの名無しさんNGNG
>>825
BOOSTみたいなことやってるな…
0829デフォルトの名無しさんNGNG
>>823
#define hoge(n) ((n == 1) ? 0x01 : (n == 2 ? 0x03 : (n == 3 ? 0x07 : (n == 4 ? 0x0F : (n == 5 ? 0x1F : (n == 6 ? 0x3F : (n == 7 ? 0x7F : (n == 8 ? 0xFF : 0)))))))
0830デフォルトの名無しさんNGNG
824で答え出てんのに何でわざわざ…
0831デフォルトの名無しさんNGNG
>>830
三項演算子を使うと難しいことをやっているように見えるから。
0832デフォルトの名無しさんNGNG
2〜100の素数を求めるプログラムなんですが、
下のプログラムでは間違ってると思うのですがどこが違うか教えて頂けませんか?
自分の考え方は、素数は素数未満の2以上の数では割り切れないので
if((i>j)&&(i%j==0))で、素数以外の数を表しているつもりです・・。
初心者なので、根本的に間違っていたらすみません・・。よろしくお願いします。
#include <stdio.h>
main()
{
int i,j;
for(i=2;i<101;i++)
for(j=2;j<101;j++)
{
if((i>j)&&(i%j==0)) ;
else printf("%d\n",i);
}
}
0833デフォルトの名無しさんNGNG
#include <stdio.h>
main()
{
int i,j;
for(i=2;i<=100;i++)
{
for(j=2;j<=i;j++){if(i%j==0) break;}
if (i==j) printf("%d\n",i);
}
}
0834832NGNG
>>833
ありがとうございます。833さんのは余りが0の時にbreakでif (i==j)に行くという事ですかね…。なんか答えが、
#include <stdio.h>
main()
{
int i,j,prime;
for(i=2;i<100;i++)
{
prime=1;
for(j=2;j<=i/2;j++)
if(!(i%j)) prime=0;
if(prime) printf("%d\n",i);
}
}
となっていたので、真似して
#include <stdio.h>
main()
{
int i,j,prime;
for(i=2;i<101;i++)
{
prime=1;
for(j=2;j<101;j++)
if((i>j)&&(i%j==0)) prime=0;
if(prime) printf("%d\n",i);
}
}
としてみてたらできました。primeの意味が良く分かりませんが…。
0835832NGNG
あとプログラムの実行で、3からしか表示されないのですが、
たぶん上に2が表示されていると思うのですが、2も表示させるにはどう設定を変更したら
良いのでしょうか?良かったら教えて下さい・・。
0836デフォルトの名無しさんNGNG
>>835
お前…
0837デフォルトの名無しさんNGNG
改行しまくってはみ出てるんならprintf("%4d", i);にすればいい。
0838デフォルトの名無しさんNGNG
>>837
なるほど!ありがとうございます。
0839デフォルトの名無しさんNGNG
質問があります。既出でしたらすいません。
C++でのoperatorの挙動についてです。
使用する環境は以下のとおりです。
【コンパイラ・環境】
gcc(2.9.5、3.1、3.3.2)とVS.NET
【質問内容】
myclassクラスのメンバ関数として
myclass operator + (myclass & ao)
{
myclass ret;
ret.i = i + ao.i;
return ret;
}
とし、main関数内でmyclassのオブジェクトa,b,c,dを作成した状態で、
d=a+b+c;
は当然問題なくできますが、
d=a+(b+c);
などとしますと、コンパイラがgccの場合、(b+c)が参照として渡せないとしてエラーがはかれます。
解決策としては、メンバ関数の引数にconstを書けばいいのですが、VS.NETではconstを記述しなくても
コンパイルされます。
このあたりの挙動がよくわかりません。
尚、VS.NETでは、retを返すと、(b+c)に対し新たにmyclassの一時
オブジェクトが生成されるようですが、gccでは、d=a+(b+c)の演算が終了するまで
返されたretのオブジェクトが保持されるようです(ここがconst?)。
0840デフォルトの名無しさんNGNG
変換が必要なオブジェクトや定数やテンポラリは非const参照には渡せません(値が書き換えられるかもしれないので)
0841839NGNG
>840
ご回答ありがとうございます。
参照を引数にしているので、その値を書き換えられるのを避けるために
constを書くのは分かるのですが、それをコンパイル時に「警告」ではなく
「エラー」にしてしまうのが分からないのです。
また、+演算子のオーバーロードを行う場合、引数に渡したオブジェクト
(当然参照されている状態)を変更したいという稀な場合もないともいえないと
思います(それが組み込み型などの演算と挙動が違う悪い書き方だとしても)。
0842デフォルトの名無しさんNGNG
>>841
例えば文字列リテラル(const char*)の書き換えを
警告で済ましていい事だと思うか?
0843デフォルトの名無しさんNGNG
そもそもoperator+の返値の型をconst myclassにすべきかと
0844839NGNG
>842
設問ありがとうございます。
よくないんですか(よくないとしたらどこが)?
0845デフォルトの名無しさんNGNG
>>841
const「に出来る」のではなく、const「でなければならない」のです。テンポラリ
オブジェクトはその式の実行が終わった時点で消滅するので変更を加える
ことにまったく意味がないからです。どうしても関数内で変更を加えたければ、
右辺を参照ではなく値渡しで受け取ればよいでしょう?
0846839NGNG
>842
文字列リテラルは書き換え不可な領域に格納されているはずなので、
エラーが出てしかるべきだとは思います。
ですが、今回の+演算子の引数に参照を持たせているというだけで、
それをconstにしなければならないわけではないと思います。
実際、constを引数に記述しなくてもd=a+b+cはできるわけですし。
挙動が.NETとgccで違うところを見ると、ANSIの規格とは別の
独自拡張がどちらかになされているのかと思ってしまいます。
0847デフォルトの名無しさんNGNG
つまり、gccが正しい。
0848デフォルトの名無しさんNGNG
>>846
テンポラリオブジェクトを受け取るためにconst参照にするのです
0849839NGNG
うーん、、、さらに混乱してきました。
今.NETとVC++6.0で以下のプログラムをコンパイルしようとしたらエラーでした。
#include <iostream>
using namespace std;
class myclass
{
public:
int i;
myclass( int ai = 0 ){ i = ai; }
const myclass operator + (const myclass & ao);
};
const myclass myclass::operator + (const myclass & ao)
{
myclass ret;
ret.i = i + ao.i;
return ret;
}
int main()
{
myclass ob1( 1 ), ob2( 2 ), ob3( 3 ), ob4( 4 );
ob3 = ob1 + ob2 + ob4;//エラー!
ob3 = ob1 + (ob2 + ob4);//できる!
cout<<ob3.i<<endl;
return 0;
}
0850デフォルトの名無しさんNGNG
良くも悪くも基本的にgccは仕様に忠実。
0851デフォルトの名無しさんNGNG
>const myclass operator + (const myclass & ao);

だから だろ?
0852デフォルトの名無しさんNGNG
>>850
仕様に忠実で悪いことがあるの?
0853デフォルトの名無しさんNGNG
試してないけど const myclass operator + (const myclass & ao) const ってしてないからじゃないの?
ってか return myclass(i + ao.i); ってしないとRVO効かないぞ
0854839NGNG
>851
ですが、
ob3 = ob1 + (ob2 + ob4);
↑これできるんですよね。はじめ(ob2 + ob4)で、ob4はmyclassなんですが、const myclassの参照として
引数に渡され、テンポラリなconst myclassオブジェクトが返されると。
その後、ob1+テンポラリオブジェクトなわけですが、引数はconst myclassのテンポラリオブジェクトが
渡され、結果がまたconst myclassなテンポラリオブジェクトとして返される。
このイメージでいるんですが、それならob3 = ob1 + ob2 + ob4;もできるような
気がするんですよね。
あ、ちなみにgccでもできませんでした。
0855839NGNG
>853
const myclass operator + (const myclass & ao) const
ですが、戻す型がconst myclassってだけで、const関数にする必要はないと思うのですが。

return myclass(i + ao.i);
としても、しないでも結果は変わりませんでした。
0856853NGNG
ob1+ob2が先に評価される場合は
(const tmp).operator+(ob4);
だけど、operator+がc指定されてないからダメなんじゃないの?
0857853NGNG
>>855
RVOは今回の話と関係ないので忘れてくれ
(気になるんだったらEffective C++ か More Effective C++ の
どちらかに書いてあったと思うんでそれ参照)
0858839NGNG
>856
const myclass operator + (const myclass & ao) const
って、つまりoperator+自身をconst指定するってことですね。
これやったらちゃんとできました。

まだconstに関して混乱してますが、あともう少しといった感じです。
ありがとうございます!
0859デフォルトの名無しさんNGNG
整数や文字列など 複数の値を一辺に画面に表示できる関数を、
_DEBUGが定義されていれば実行する。定義されていなければ実行しない
というように切り替えたいと考えています。

そこで以下のように考えました。

void func( const char *hoge, ... ) という可変引数を引数に持つ関数があります。
引数にしたものを 画面に表示する printfと同様の処理を行います。
_DEBUGが定義されていなければこれは実行されません。

上記のように 実装するにはどうしたらいいんでしょうか?

#define func( const char *hoge, ... ) とできればいいんですが、できないので
何か解決方法があれば教えてください。
0860デフォルトの名無しさんNGNG
>>859
っ[ C99 ]
0861デフォルトの名無しさんNGNG
>>859
#ifdef _DEBUG
#define FUNC func
#else
#define FUNC
#endif
と別名定義してFUNCを使えばいいだけじゃねーの?
0862デフォルトの名無しさんNGNG
>>859
#ifdef _DEBUG
#define dprintf printf
#else
inline void dprintf(...) {}
#endif
0863デフォルトの名無しさんNGNG
>>861

#define FUNC func の部分

引数の部分はあえて省略してかいているんですか?

この引数は可変引数なので マクロに登録できないんですよ
0864デフォルトの名無しさんNGNG
>> 862

関数の名前の部分だけの マクロ登録ってやっていいかどうか
自分では判断しかねたんですが、これしか方法がないようですので
使うことにします。

ありがとうございました。
0865デフォルトの名無しさんNGNG
>>864
__VA_ARGS__
0866デフォルトの名無しさんNGNG
>>865

いや本当にそれが使えたら不満ないんですが
VCコンパイラでは使えないんですよ
0867デフォルトの名無しさんNGNG
>>859
MFCのTRACEでは
#define FUNC 1 ? (void)0 : func
ってやってる。
最適化の段階で消されるんだろう。
0868デフォルトの名無しさんNGNG
全然関係ないけど、他人のソースよく読んだりコード管理するとき
どんなツール使ってますか?私は、会社で使ったことある人がいるから、
C++仕様書工房ってソフト使ってますがどうにもなれません。何かいいソフト
ありますか?100万ステップ目視管理はさすがに辛いというか自分には無理です。
0869デフォルトの名無しさんNGNG
>>868
手書きのグラフ。
0870デフォルトの名無しさんNGNG
>>859
すみません。MFCはできるだけ避けたいと思っていますので。

それと実行してみてわからないことがあったんですが
#ifdef _DEBUG
#define dprintf printf
#else
inline void dprintf(...) {}
#endif

で、デバッグ用の処理ができたんですが、この部分をdprintf.lib というstatic library にして、
また別のプログラムを作ります(以下のプログラム)

[ヘッダ部分]
#pragma comment( lib, "dprintf.lib" );
#include "dprintf.h"
void func();

[ソース部分]
void func() {
dprintf( "test\n" );
}

↑をstatic library 化して func.lib とする。
0871870NGNG
「つづき」

>>870
また違うプログラムAから func() を呼び出すとき、
そのプログラムAがデバッグで実行しようが、リリースで実行しようが
funclib の中には dprintfの結果がもうすでに書き込まれているので
変化はないんでしょうか。

func.lib がデバッグで作られたか、リリースで作られたかによって
プログラムAでの表示に違いがでると考えていいんでしょうか。

とすると、func.lib と dprintf.lib 各一つずつ用意して、プログラムAで
デバッグ文字を表示するときと、しないときにわけるようにはできないんでしょうか。

どなたか解決策を教えてください。
0872デフォルトの名無しさんNGNG
>>870
そもそも、そのdprintf.libは意味をなしてない事に気がつかないか?
0873デフォルトの名無しさんNGNG
>>871
VCなら単純にデバッグ版func.lib(func_d.libとでもしといて)とリリース版func.lib
をプログラムAのコンパイラオプションで選択すりゃいいし、

#ifdef _DEBUG
#pragma comment(lib, "func_d.lib")
#else
#pragma comment(lib, "func.lib")
#endif

と書いてもいいだろうし、どちらにせよデバッグ版とリリース版1つずつ用意して
どちらをリンクするかを決めりゃいい
0874デフォルトの名無しさんNGNG
>>872

dprintf では printfを実行してますけど、実際は 可変引数の関数を実行するもので
printfとは違う処理を行ってます。

>>873

やっぱり 2つ用意するしかないんですか><;;
ありがとうございました。
0875デフォルトの名無しさんNGNG
このdprintfがいろんな場所でinline展開されれば、きっと時間とお金の浪費癖が付くよ。
0876デフォルトの名無しさんNGNG
それにFormatMessage,OutputDebugString,wsprintf APIも知らないとは。何を参考にしてるんだ? #defineの仕組みも知らない素人が作る枠組みは確実に失敗するよ。
0877デフォルトの名無しさんNGNG
age
0878デフォルトの名無しさんNGNG
>>876
また苦労と気取りですか。
0879839NGNG
遅いですが、constに関して一応分かったことをご報告。
gccでは
・テンポラリオブジェクトを自動でconst扱い
・constオブジェクトで非constメンバ関数が使用できてしまう(warningは出る。constはずし?)
です。
VC++では自動的にconstにしてしまうとかないので、ANSI規格というか仕様にちゃんと準拠な感じです。
gccの勝手な(?)独自拡張が混乱のもとでした。
0880デフォルトの名無しさんNGNG
>>879 断じてちがう。
0881839NGNG
あ、あとgccでは
const myclass operator + (const myclass & ao)const
{
cout<<"operator+の呼び出し"<<endl;
myclass ret;
ret.i = i + ao.i;//iはmyclassメンバ
return ret;
}
とやると、return myclass(i+ao.i);と記述したと同様にRVOが働くみたいです。
コピーコンストラクタは呼ばれませんでした。VC++ではちゃんとreturn myclass(i+ao.i);と書かないとRVOは働きません。
0882デフォルトの名無しさんNGNG
g++の間違い
0883839NGNG
すいません。gccをGNU コンパイラコレクション
というつもりで言っています。
g++はコンパイラコレクションの一部ということで。
0884デフォルトの名無しさんNGNG
>>879
テンポラリであることと const であることは無関係。
型 T のテンポラリも、型 T const のテンポラリも存在する。
型 T のテンポラリに対しては非 const メンバ関数を呼び出すことができる。
言語の規格では、型 T のテンポラリは T& を初期化することができない。
型 T のテンポラリで T& を初期化できるのは VC++ の挙動がおかしい。
VC++ の挙動がおかしいのは歴史的な事情による。
0885839NGNG
>884
myclass ob1,ob2,ob3,ob4
というのがある場合(初期化は省略しました)、
ob3=ob1+ob2+ob4
という演算を行う際、operator+関数のオーバーロードを用意しますが、
その型(戻り型、operator+関数の呼び出し元オブジェクトの型、引数の型)
をどうするのかということで悩んでいました。
ob1+ob2を評価し、そのテンポラリオブジェクトを戻し、
テンポラリオブジェクト+ob4という流れになるかと思いますが、
その際、gcc(g++)ではconst扱いになるようで、VCでは戻り型に忠実でした。
0886デフォルトの名無しさんNGNG
>>885
何を調べて「const扱いになる」とか、「戻り型に忠実」とか言ってんの?
0887839NGNG
>886
typeidではconstかどうかまでは当然分かりませんので、実際に
プログラムを書いてみて、エラーやwarningとしてはかれていることからです。
環境はXcode(gcc3.3)とVS.NET2003です。
忠実は言い過ぎかもしれませんが、そのままの挙動をしていたので。
0888デフォルトの名無しさんNGNG
>>887
エラーや警告を「そのまま」貼れ。ソースも一緒にな。

typeid で const ってわかんなかったっけ?
0889デフォルトの名無しさんNGNG
typeidは環境依存
0890デフォルトの名無しさんNGNG
VCはconstかどうかも分かるけどね
0891デフォルトの名無しさんNGNG
typeidでconstがわからないのは正しい。(5.2.8 -5-)
0892839NGNG
以下ソースです。constははずしてあります。
class myclass
{
public:
int i;
myclass( int ai = 0 ){ i = ai; cout<<"コンストラクタの呼び出し"<<endl;}//コンストラクタ
myclass(const myclass & ob){ i = ob.i; cout<<"コピーコンストラクタの呼び出し"<<endl;}//コピーコンストラクタ
~myclass(){cout<<"デストラクタの呼び出し"<<endl;}//デストラクタ
myclass operator + (myclass & ao);
};
myclass myclass::operator + (myclass & ao)
{
cout<<"operator+の呼び出し"<<endl;
//myclass ret;
//ret.i = i + ao.i;
//return ret;
return myclass(i+ao.i);
}
int main()
{
myclass ob1( 1 ), ob2( 2 ), ob3( 3 ), ob4( 4 );
const myclass ob5(100);
ob3 = ob1 + ob2 + ob4;
cout<<ob3.i<<endl;
//ob3 = ob1 + (ob2 + ob4);//このままだとVCではOK。g++ではエラー。
cout<<ob3.i<<endl;
return 0;
}
main関数内でob1〜ob5までをいろいろ組み合わせて足してみています。
typeidではオブジェクトの型は分かると思いますが、修飾子の判断までは
どうなんでしょう。
0893839NGNG
//ob3 = ob1 + (ob2 + ob4);
をXcode1.5(gcc3.3)で実行すると以下のようなエラーが出ます。
error: candidates are: myclass myclass::operator+(myclass&)
error: no match for `myclass& + myclass' operator
当然、operatorの引数にconstをつければ問題ないんですが。
これはob2+ob4のテンポラリオブジェクトがg++においてconst扱いに
なるからかと思うのですが、どうなんでしょうか?
0894デフォルトの名無しさんNGNG
できることとやってもいいことは違う。仮引数のconstは何のためにあるんだ?
0895デフォルトの名無しさんNGNG
継承についてわかりやすく解説してるサイトを知りませんか?
0896839NGNG
>894
できるからやるといった話ではなく、単にgcc(g++)の仕様が
把握できずに、戸惑っているんです。
例えば、(仮に正しいとした上で)演算中のテンポラリオブジェクトが
自動でconst扱いされるのは、そのオブジェクトが不可変であるべきだと
いうことからそうなったのであれば、なぜconstオブジェクトが非const
メンバ関数を呼び出すことを許すのかといったことです(実際はwarning
出ますが、c++の仕様では禁止されているはずです)。
gccでの挙動がc++の仕様ではなく、独自の拡張であるのなら、
様々な環境下で、それぞれにあわせたコーディングを考えないといけない
ので、厄介だーと思ったのです。
0897デフォルトの名無しさんNGNG
g++で指定できる無数の起動オプションを参照することw
0898デフォルトの名無しさんNGNG
>>896
>>884を読んでどこが納得できない?
0899デフォルトの名無しさんNGNG
>>898
つまりテンポラリオブジェクトが自動でconstになるのは正しいのかどうか?
ということじゃないんか?
0900839NGNG
>898
納得してます.constとテンポラリ,それぞれが無関係であることは.
>899
そういうことです.補足すいません.
正しいかどうかと言いますか,gcc(g++)はそうじゃないのですか,
と書いたところ,少し話がずれてきてしまいまして.

gccはそういう仕様だから,そうなる.
ということがはっきりすれば良いだけなんです.
0901デフォルトの名無しさんNGNG
//ob3 = ob1 + (ob2 + ob4);//このままだとVCではOK。g++ではエラー。
これはgccの方が正しいのであって、VCの方が独自拡張だぞぃ。
0902デフォルトの名無しさんNGNG
>>868
あんたの立場と何がしたいのかをもっと具体的に。
>868だけじゃ、他人のソースを読むのに手頃なツールが欲しいのか、
C++仕様書工房を使いこなしたいのか、コード管理ツールが欲しいのか、
愚痴を言いたいのか判らん。
0903デフォルトの名無しさんNGNG
>>901
839ではないですが、同じ疑問がある者です。
その式は
ob1.operator+( ob2.operator+(ob4) );
と解釈されると思いますが、ob2.operator+(ob4)から返されるのはmyclassのオブジェクトですから
ob1.operator+に渡してエラーになる、というのがどうも納得いきません。

constを明示的に指定しなくてもテンポラリオブジェクトはconstと解釈されるため、
myclass&を引数に取るob1.operator+には渡せない、ということでしょうか?
0904デフォルトの名無しさんNGNG
テンポラリは自動でconstになったりしない。
これは規格にも書かれているはずだし、g++も正しく実装している。
単に、非const参照を非constテンポラリで初期化できないだけだ。
0905デフォルトの名無しさんNGNG
>>904
なるほど、納得しました。
const参照を非constテンポラリで初期化 ならばOKなわけですね
0906デフォルトの名無しさんNGNG
>>905
ピンポーン
0907839NGNG
>904
すいません!そういうことだったんですね!
今度はちゃんと理解しました.

非const参照を非constテンポラリで初期化できないのはC++の仕様である
ということですね.
で,ob1+ob2ができるということは
非const参照は(非)constオブジェクト(テンポラリじゃない)で初期化は
できるってことですかね.
0908デフォルトの名無しさんNGNG
>>907
そりゃ普通のオブジェクトで参照を初期化できなかったら
参照渡しができなくなるかと…
0909839NGNG
非const参照を非constテンポラリで初期化できない...
const参照ならできる・・・.記憶領域の関係で?コンパイラの最適化の関係で?
理由はわかりませんけど,そういう仕様ならそれに従うしかないですね.

ありがとうございました!
0910839NGNG
っと,忘れてました.
>型 T のテンポラリに対しては非 const メンバ関数を呼び出すことができる。
に関連してですが,g++が
型 T const(テンポラリ)オブジェクトに対して非 const メンバ関数を呼び出すことができる。
ということができてしまうのは,よろしくないですよね.
0911デフォルトの名無しさんNGNG
△ 非const参照を非constテンポラリで初期化できない
○ 非const参照をテンポラリで初期化できない
0912デフォルトの名無しさんNGNG
>>910
できねーよ。やってみてから言え。
0913デフォルトの名無しさんNGNG
初心者歓迎、とのことなので、恥を忍んで…。
自分のバカさ加減にあきれ気味です…。

#include<stdio.h>

int main(void)
{

double r;
scanf("%f\n",&r);
printf("r=%fです\n",r);


return 0;
}


単純に「5」と入力したら、「r=5です」
と表示させたいだけなのですが…。
ナニがおかしいのでしょうか…?
0914デフォルトの名無しさんNGNG
scanf("%lf",&r);
0915デフォルトの名無しさんNGNG
scanfの引数に\nがある。
Enterキー押していない?
0916デフォルトの名無しさんNGNG
>>913
float : %f
double : %lf
long double : %Lf
0917839NGNG
>911
非const参照をconstテンポラリで初期化できないのはそのままですね.

>912
できねーんですよ.そうなんです,できないはずなんです.
でもXcodeで実行するとエラーではなくwarningはくだけでコンパイルされるんです.
constが無効化するのかもしれませんが.
0918デフォルトの名無しさんNGNG
g++はconstを無効にするオプションがある。
0919デフォルトの名無しさんNGNG
>>915-916
ありがとうございました。
無事、表示できました。

もう少し自分のバカ脳味噌とつき合ってみます。
0920839NGNG
なるほど.それでできてしまうんですね.
0921デフォルトの名無しさんNGNG
>>917
エラーや警告を「そのまま」貼れ。ソースも一緒にな。

>>918
聞いた事無いな。どんなの?
まさか -Dconst= とか?
0922839NGNG
>921
警告はですね
passing `const myclass' as `this' argument of `myclass myclass::operator+(myclass&)' discards qualifiers
となっています.
ソースは
>>892
です.その中でob3=ob5+ob2とやってみると,constなob5が非constメンバ関数operatorを呼び出せてしまいます.
0923デフォルトの名無しさんNGNG
g++3.3.3ではエラーになるんだけどな
0924デフォルトの名無しさんNGNG
>>922
それ、エラーになってないか?
警告ならメッセージの先頭に warning と書いてあるはずだぞ。
0925839NGNG
>923-924
そうですか.いやXcode1.5(gcc3.3)でやるとそうなるんですよね.
Darwin(BSD?)版のgccだとよろしくないかもしれません.
linux等でエラーになるのなら,それはそれで問題ないですね.
0926デフォルトの名無しさんNGNG
XCodeはどんなオプションでコンパイルしてるんだ…
0927デフォルトの名無しさんNGNG
>>925
> いやXcode1.5(gcc3.3)でやるとそうなるんですよね

だったら先にそう書けこのバ
0928839NGNG
す,すいません.
>>917に書いたつもりだったんですが.
0929デフォルトの名無しさんNGNG
deque<char *> dp;に文字列を格納する時に
char buf[100];
strcpy(buf, "abc");
dp.push_back(buf);
とするとうまく格納されるのですが、
char buf[100];
buf[0] = 'a'; buf[1] = 'b'; buf[2] = 'c'; buf[3] = '\0';
dp.push_back(buf);
とするとdp[0]dp[1]と呼び出した時に
何も表示されなかったり、全て最後に格納した内容が表示されたりするんです
何が原因でしょうか?
0930デフォルトの名無しさんNGNG
>>929
君が言っている「うまく格納される」は、1つの関数の中にdpもbufも
入っているときに過ぎない。ある関数の中で
 int hoge(){
  char buf[100];
  ...
としていたとして、この関数を抜けたところでbufそのものが消滅して
いるから、dpがこの関数の外にスコープを持っていた場合、bufの
先頭アドレスを持っているdpの内容も当然破綻する。
0931デフォルトの名無しさんNGNG
int main()
{
char s1[]="Hello",s2[]="World",s3[20];
cout << strcat(s1,s2) << endl;
cout << s1 << endl                      //下のプログラムと違う箇所
<< strcpy(s3,s1) << endl;
return 0;
}

これをコンパイルして実行すると
HelloWorld
HelloWorld
HelloWorld
と出力されるのですが、

int main()
{
char s1[]="Hello",s2[]="World",s3[20];
cout << strcat(s1,s2) << endl
<< s1 << endl                      //上のプログラムと違う箇所
<< strcpy(s3,s1) << endl;
return 0;
}
これをコンパイルして実行すると
HelloWorld
HelloWorld
Hello
となるのです。

二つのプログラムの相違点が、このような出力の違いを生み出しているのは分かるのですが、
何故このような違いが現れるのか、御教授お願いします。
ちなみにコンパイラはBCC5.5.1です。
0932デフォルトの名無しさんNGNG
>>strcat(s1,s2)
何やってんのよ…
ポインタや配列を一から勉強し直してください
0933デフォルトの名無しさんNGNG
>>932
ああ、本当だ。
ここは、s1[15]="Hello"のように十分な配列を確保しておかなければならなかったorz
0934デフォルトの名無しさんNGNG
ダメだorz
s1の配列を十分に確保したけど、それでも>>931と同じ結果になるorz
0935デフォルトの名無しさんNGNG
>>934
副作用完了点 または シーケンスポイント でググれ。
一応その場合について言っておくと、
strcpy(s3,s1)がstrcat(s1,s2)より先に呼ばれたからそうなっただけ
0936デフォルトの名無しさんNGNG
>>934
ポインタの配列のの問題ではない。関数の引数の評価順序の問題。
cout << strcat(s1, s2) << s1 << strcpy(s3, s1);は、operator<<()を書き下すと
operator<<(operator<<(operator<<(cout, strcat(s1, s2)), s1), strcpy(s3, s1));ということ。
途中でostream& std::operator<<(ostream&, const char*);が呼び出されるわけだが、
関数の引数の評価順序は規格により未定義。
例えば、関数の引数が右から評価されるような処理系において、最初にstrcpy(s3, s1)が
実行される。当然s3は"Hello"となる。つまり、君の環境でそのコードをコンパイルしたら、
たまたま右から引数が評価されたわけだ。
当然左からでも中央からでも不規則でもかまわない。よってそのコードは環境によって
動作が変わる。
以上のことから関数の引数の評価順序に依存するようなコードは、一般的には書いては
ならないとされている。初心者がほぼ必ず一度ははまる罠。
0937デフォルトの名無しさんNGNG
そこでJavaですよ
0938デフォルトの名無しさんNGNG
まあ右再帰で還元されるから、右から左へ評価されるのが
一番素直な実装ではあるんだが。
0939デフォルトの名無しさんNGNG
>>935-938
丁寧な解説、感謝します。
この場合、問題解決の方法としては、>>931の下のプログラムのように、
cout << (文1) << endl;
cout << (文2) << endl;

という風にすれば、処理系に依存しないプログラムになるということですね。
0940デフォルトの名無しさんNGNG
>>939
違う、下ではなく上であったorz
0941デフォルトの名無しさんNGNG
strcat 等の戻り値を変数に保存しておけば何回も書かずにすむ
0942デフォルトの名無しさんNGNG
構造体配列を関数に渡して関数の中でメンバの二次元配列の値を代入したいのですが
St->menba[0][0]=1;と書くと大丈夫なのですが
int i;
i=0;
St->menba[0][i]=1と項番に変数を入れると値が変更されていません。
なぜなんでしょうか。
0943デフォルトの名無しさんNGNG
自己解決しました。ありがとうございました。
0944942NGNG
私は自己解決全然してないので、どなたかお願いします。
0945デフォルトの名無しさんNGNG
>>942
とりあえず問題部分のソース晒せ
0946942NGNG
for(cnt=0;cnt<10;cnt++)
{
for(cntA=0;cntA<10;cntA++)
{
for(cntB=0;cntB<10;cntB++)
{
(St+cnt)->menba[cntA][cntB]=1;
}
}
}
だいたいこんな感じです。cntA,cntBを使わずに数字を直でいれれば値が変わるのですが
そうしてしまうと、ソースが無駄に長くなってしまうので悩んでいます。
0947デフォルトの名無しさんNGNG
>>946
値が変わったかどうかは何で確認したの?
0948デフォルトの名無しさんNGNG
新スレ
http://pc5.2ch.net/test/read.cgi/tech/1104814358/
0949デフォルトの名無しさんNGNG
>>946
配列の範囲外をアクセスしている悪寒。
構造体の定義を晒してみ。
0950942NGNG
徹夜で眠くて寝てしまいました。
もう少し自分でやって出来なかったらもう一回質問に来ます。
0951942NGNG
覚めた頭でやってみたら出来ました。
やっぱり範囲外にアクセスしていたみたいです。
書き込みしてくれた皆様、ありがとうございました。
0952初質の人NGNG
【初心者歓迎】C/C++室 Ver.13【環境依存OK】
http://pc5.2ch.net/test/read.cgi/tech/1104843249/
0953デフォルトの名無しさんNGNG
梅
0954デフォルトの名無しさんNGNG
馬
0955デフォルトの名無しさんNGNG
map<string, int>でmap<"1234">に
すでに何かデータが入っているかを調べるにはどうすればいいですか?
データが存在しないのにアクセスするとエラーになるし・・・
0956デフォルトの名無しさんNGNG
>>955
>map<"1234">
なんだその表現は。
map::findで調べればいいじゃない
0957デフォルトの名無しさんNGNG
メンバ関数の
find, count, lower_bound等
Effective STL くらいは読んでおくと後が楽だよ
0958957NGNG
エラーだっけか?
確か初期値が返ったと思うのだが
(禿本にもそう書いてなかったっけ?)
0959デフォルトの名無しさんNGNG
初期値が返る事は規格で保証されてるよ
0960デフォルトの名無しさんNGNG
VC6+STLPortについてですが、stlport付属のiostreamライブラリは使うべきですか?
0961デフォルトの名無しさんNGNG
>960
何をしようとしてる?
0962デフォルトの名無しさんNGNG
960ではないがリコンパイルしたもの使っているけど別に問題ないな。
処理速度とかバグとかは検証して使ってないけど。
0963デフォルトの名無しさんNGNG
dllを添付するのがめんどくさい、とかじゃないかな。
0964デフォルトの名無しさんNGNG
>>963
makeで必要ファイルをアーカイブするところまで作っておくと楽だよ。
VCのプロジェクトファイルとかでそれが出来るかどうかはしらないけど、
多分できるんじゃない?
0965デフォルトの名無しさんNGNG
システム実行中に時間を計測したいのですがどうすればうまく計測できますか?
0966デフォルトの名無しさんNGNG
>>965
処理の前後でタイマの数値取って差分出せばいいだけだろ
0967デフォルトの名無しさんNGNG
>>965
プロファイル汁。
0968デフォルトの名無しさんNGNG
>1-1001 ありが�d
0969デフォルトの名無しさんNGNG
すいません先ほどのスレでご意見いただけませんのでやってきました。。
WindowsSDKで、RICHEDITをCreateWindowExで作成しているのですが、親ウィンドウから、
どの文字(英数字のみ)が入力されたかを知るにはどうしたらいいのでしょうか。
メッセージキューに何が入るのかがわからないのです・・・コントロールは始めて使いますので
(というかどうやったら入るのかもわからないのですが・・・たぶん入っている・・・みたいな_no)
0970デフォルトの名無しさんNGNG
GetTickCountトカ?マサカナ
0971デフォルトの名無しさんNGNG
>969
case WM_CHAR:の処理を加工して規定の処理をしたいデータをDefWin~Procに渡せば、文字の制限など簡単。Beep参照
0972デフォルトの名無しさんNGNG
良スレハケーン(大学受験板)・・・スレタイを見よ。
http://school4.2ch.net/test/read.cgi/kouri/1102125273/

なんともム板にふさわしいスレタイではないか。「真」だ!!!
0973デフォルトの名無しさんNGNG
オブジェクトを宣言する場合
値型
class1 c1;
ポインタ型
class1 *c1 = new c1;
どっちが適しているんですか?
0974デフォルトの名無しさんNGNG
>>973
知らん。情報少な過ぎ。
0975デフォルトの名無しさんNGNG
>>973
場合によりますー ポインタの方が良く使うかもしれませんが…
あまり使いたくありませんね…^^; にゃんにゃん
0976デフォルトの名無しさんNGNG
C++のサンプルコードではよく値型を使っていますが
C#ではC++のポインタ型に似た式です
一人で書いたと思われるソースで
値型とポインタ型を使い分けていた人がいたので
気になったのですが
0977デフォルトの名無しさんNGNG
>>976
場合によるって書かれてるじゃん
0978デフォルトの名無しさんNGNG
こう言いましょうかー。
ポインタを使うしかないときだけポインタをつかいましょうー にゃんにゃん
0979デフォルトの名無しさんNGNG
>>978
>ポインタを使うしかないとき
っていうのは派生クラスのオブジェクトで
基本クラスのメンバ関数を呼び出すときとかのことですよね?
ありがとうございました
0980デフォルトの名無しさんNGNG
スタックとヒープの使いわけ。
0981デフォルトの名無しさんNGNG
>>979 ちがうよ。
0982969NGNG
>>971さん
どうもありがとうございます。ただ、WM_CHARにブレークポイントを設定しても
引っかかってくれません。Spy++で見ると、たしかにWM_CHARは送られているのですが・・・
親ウィンドウでWM_CHARを取得するのに、何かをSendMessageしたりとかしないと
いけないのかなぁと思ったのですが・・・m(_ _)m
0983デフォルトの名無しさんNGNG
>982
その前にRICHEDITのサブクラス化は?
0984969NGNG
うわーすいません、サブクラス化というのが必要だったんですね>_<;
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win64.html
を見てうまくやることができました。
>case WM_CHAR:の処理を加工して規定の処理をしたいデータをDefWin~Procに
というのもうまくできました。。どうもありがとうございます☆
0985デフォルトの名無しさんNGNG
そういえばパナウェーブってどうなったの?
0986デフォルトの名無しさんNGNG
雪に埋もれてるんじゃない?
0987デフォルトの名無しさんNGNG
いきなり何の話だ
0988デフォルトの名無しさんNGNG
スカラー波の波動を計算するプログラムを作ってくれ、って意味じゃない?
0989デフォルトの名無しさんNGNG
>988
...
#include<math.h>
...
double i,j;
for(i=0;i<20;i+=1){
for(j=0;j<15+15*sin(2*i*M_PI/20);j+=1)putchar(' ');printf("*\n");
}
0990デフォルトの名無しさんNGNG
ワロタ
0991デフォルトの名無しさんNGNG
スカラー波の不変条件は?
0992デフォルトの名無しさんNGNG
パナウェーブに聞いてください
0993デフォルトの名無しさんNGNG
白装束に着替えればおのずと分かってくるよ。たぶん。
0994デフォルトの名無しさんNGNG
0995デフォルトの名無しさんNGNG
もうすぐ終了
0996デフォルトの名無しさんNGNG
1000コナイカナ
0997デフォルトの名無しさんNGNG
#include <cstdlib>
0998デフォルトの名無しさんNGNG
using std::exit;
0999デフォルトの名無しさんNGNG
std::system("http://pc5.2ch.net/test/read.cgi/tech/1104843249/l50"); //次スレ
1000デフォルトの名無しさんNGNG
exit(0);
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。