C++相談室 part103at TECH
C++相談室 part103 - 暇つぶし2ch1:デフォルトの名無しさん
13/06/15 23:14:35.92
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part102
スレリンク(tech板)

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.84【環境依存OK】
スレリンク(tech板)

■長いソースを貼るときはここへ。■
 URLリンク(codepad.org)
 URLリンク(ideone.com)

2:デフォルトの名無しさん
13/06/15 23:23:22.73
乙乙~

3:デフォルトの名無しさん
13/06/15 23:23:58.22
STLつかうと一気に実行ファイルサイズが10倍に?!

環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない

すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。

C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

#include <stdafx.h>
後死ね。

言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

>>1

4:デフォルトの名無しさん
13/06/16 00:18:03.90
質問です
std::regex ex("[abc]{2,4}.*");
auto result = std::regex_match("bbbXXXX", ex);
ここで "bbb"を取り出したいのですが
どげんしたらよかですか?

5:デフォルトの名無しさん
13/06/16 01:24:59.55
C++でなく正規表現だろ

6:デフォルトの名無しさん
13/06/16 01:56:06.88
[abc]{2,4}を()で囲んでmatch_resultsを用意してそれを受けるregex_matchを使ってその結果から取り出せ

7:4
13/06/16 03:02:06.42
>>6
ご回答ありがとうございます
最初の4文字は取り出せたのですが
その後がうまくいかんです
URLリンク(ideone.com)
aXでなくXを取り出したかったですが
どげんしたらよかですか?

8:デフォルトの名無しさん
13/06/16 03:19:01.03
それは取り出すじゃなくて取り除くって言うと思うんだが、
括る場所変えるだけでいいし正規表現勉強してこいボケ

9:デフォルトの名無しさん
13/06/16 09:27:03.42
ideoneのパターンのキャプチャ動作がおかしくない?
. なのに2文字返ってくるし

10:デフォルトの名無しさん
13/06/16 09:57:41.40
>>9
Visual C++だと (.) は X になるね

11:デフォルトの名無しさん
13/06/16 10:07:26.48
gccのregexは公式には未実装(扱い)だからしかたない

12:デフォルトの名無しさん
13/06/16 10:27:45.77
コメントアウト外したら落ちるぞw
URLリンク(ideone.com)
確かに未実装のようだ

13:デフォルトの名無しさん
13/06/16 14:55:39.38
boostの正規表現とは仕様が違うの?

14:デフォルトの名無しさん
13/06/16 15:23:17.95
>>13
デフォルト動作が違うみたい。モードフラグがいくつかあったべな。
あと、VC++10でバグっぽいのが見つかったので、報告済み。

15:デフォルトの名無しさん
13/06/16 15:25:39.52
boost.regexと設計と使い方は同じ。細かい違いはある

16:デフォルトの名無しさん
13/06/16 15:33:21.74
boostをそのまま持ってくればいいんじゃないの?と思ったが
若干違いがあるのね

でも未実装扱いってことは、
boostさん、gccにそのまま使わせてあげてないってこと?

17:デフォルトの名無しさん
13/06/16 15:40:46.05
質問です
heapクラスを作れと言われたのですが、
ヒープクラスというと、一般的にどんなものを用意すればよいでしょうか?

18:デフォルトの名無しさん
13/06/16 15:55:21.43
要件が「クラス名がheapであること」だけなら
class heap { };
としか作りようがない
つーか要求にないことを勝手にやってはいけない

一般的にというならstd::make_heapあたりを参考にすべきだろうな

19:デフォルトの名無しさん
13/06/16 16:05:20.70
ヒープってのが本当にデータ構造としてのヒープなら
そういうのでいいけど
ヒープメモリを確保するクラスという意味なら・・・まあそんな事は無いか

20:デフォルトの名無しさん
13/06/16 16:09:02.18
ヒープ(Heap)は、木構造の一つ。単に「ヒープ」という場合、二分木を使った二分ヒープを指すことが多いため、そちらを参照すること。
URLリンク(ja.wikipedia.org)
ヒープ - Wikipedia

21:デフォルトの名無しさん
13/06/16 16:15:39.96
>>19
確かにheapがデータ構造のことなのかヒープ領域なのかという事にも悩みました

ただ1つ書き忘れていたことがあって、速度を優先した~ とあったのと、
一応色々ネットで調べた結果、mallocとかfreeとかを使って、ヒープ領域を確保するクラスのことなのかなぁ
という予測はしました。
ただそれでもハッキリとしなかったので、
heapクラスといえばこういうものだよ というものがあればと思い質問させてもらいました。

22:デフォルトの名無しさん
13/06/16 16:21:13.47
どういう流れで出された課題なのかが問題だ

23:デフォルトの名無しさん
13/06/16 16:22:34.00
速度を優先~ならば new を使ってヒープにインスタンスを確保しないだろうし‥‥
そのヒープクラスってどういう意味かこっちがききたいくらいだ。

まさか二分ヒープ=配列による実装のこと?それならば速いだろうが‥‥
ここでやってたやつね
スレリンク(tech板:984番),981

24:デフォルトの名無しさん
13/06/16 16:27:43.78
普通はヒープ構造を配列で実装する事を指すんじゃないかなあ

25:デフォルトの名無しさん
13/06/16 16:42:23.27
仕様が不明瞭だったら責任者に問い合わせてボコボコにしてやれ
それが社会に出てから必要な能力になる

26:17
13/06/16 16:48:06.62
いろいろ意見、情報ありがとうございます
どうやらデータ構造派の方が多そうですね・・・

とりあえずそちらで作成して、
やんわりと仕様がよくわからなかったという文句とともに提出しようかと思います

27:デフォルトの名無しさん
13/06/16 16:58:44.12
C++のnewは「フリーストア」から
メモリを確保します。
ヒープメモリ何それ。

28:デフォルトの名無しさん
13/06/16 17:06:41.23
もし仕事ならちゃんと確認した方がいいと思うけど
学校の宿題ならデータ構造だろうけど、会社だとメモリの可能性もある

29:デフォルトの名無しさん
13/06/16 17:13:31.65
newの実装は大体mallocだぁね

30:デフォルトの名無しさん
13/06/16 17:20:22.88
ヒープクラス = 二分木クラス

31:デフォルトの名無しさん
13/06/16 18:46:50.85
newまたはNewは、C++を始めとしたオブジェクト指向プログラミング言語において、インスタンスを作成する演算子である。多くの場合、ヒープ領域からの動的メモリ確保(動的記憶域確保)を伴う。

って書いてあった

32:デフォルトの名無しさん
13/06/16 19:16:10.97
C++ の規格ではヒープという言葉で表現されてなくて
フリーストアって書いてあるんだよね
データ構造のヒープと紛らわしかったからかは知らないけど

33:デフォルトの名無しさん
13/06/16 19:44:17.37
高速化のためにメモリプールとか使う処理系が多くなったのかな

34:17
13/06/16 19:47:28.95
C++でやろうとおもったので、ここで質問させてもらったのですが、
言語指定はないので言語特有の呼び方とかはあまり関係ないと思います
説明不足でしたすいません

35:デフォルトの名無しさん
13/06/16 19:58:15.60
make_heapつったろ
早く調べろ!

36:デフォルトの名無しさん
13/06/16 22:31:05.22
make_heapはもとの要求から外れる
>>18の言うように
 class ヒープ final {};
これが正解

37:17
13/06/16 22:45:02.22
何度もすいません
あれから色々なところを調べました。
自分の持っている書籍もみたところ、
>>23>>24
のように二分木を配列で実装することのような気がします

とはいえ確実ではないので
class Heap{};とかくしかないのでしょうが
やはり何かは書いておきたい

ということで、>>23のスレを参考にしたいと思います
何度も付き合っていただきありがとうございます

38:デフォルトの名無しさん
13/06/16 22:54:48.21
class Heep {
 // <algorithm>のstd::make_heapで何かする予定
};

これでおk

39:デフォルトの名無しさん
13/06/17 21:40:39.71
Cのaligned_allocに相当する関数はC++にありますか?

40:デフォルトの名無しさん
13/06/17 21:42:37.42
ないね
C11対応コンパイラならC++でも使えるんじゃないの?とは思うが、知らん

41:デフォルトの名無しさん
13/06/17 21:51:03.04
>>40
素早い回答ありがとうございます
#include <stdlib.h>
でイケました

42:デフォルトの名無しさん
13/06/18 13:12:34.20
何で使えないかもと思ったんだろうか。

43:デフォルトの名無しさん
13/06/18 23:25:42.26
このプログラムですが
名前と得点をリンクさせて順位の表を作りたいです
教えてください

URLリンク(up3.viploader.net)

URLリンク(www1.axfc.net)

44:デフォルトの名無しさん
13/06/18 23:50:53.21
>>43
・「void main()」
・ローマ字変数名
・定数部分を開業せず横にベタ書き
・構文内にスペースで隙間を開けず詰め詰め
・滅茶苦茶なインデント

俺は読むのを諦めた

45:デフォルトの名無しさん
13/06/18 23:53:12.63
>>44
そんなに見づらいのか・・・
申し訳ない
講義でやったのをいじっただけなんだ
課題はこれで
URLリンク(up3.viploader.net)
配列を使って書くんだそうで
ifを使えだそうなんだ
教えてください

46:デフォルトの名無しさん
13/06/18 23:56:31.00
宿題スレ行けよ
C/C++の宿題片付けます 165代目 スレリンク(tech板)
荒れててまともに機能してないかも知れないが2chはそんなものだ

47:デフォルトの名無しさん
13/06/19 00:14:54.91
>>45
エクセルのシートをワードに貼り込んで送り付けてやりたいw
提出方法について泣くまで問い詰めたい。

48:デフォルトの名無しさん
13/06/19 00:19:33.09
何で学校の先生にきかないんだろうな
学費にはそういう費用も含まれてるのに

親が払った学費をドブに捨てるのが趣味なのかな

49:デフォルトの名無しさん
13/06/19 01:08:55.46
>>47
寧ろ、VBAで書いてしまいたいw

50:デフォルトの名無しさん
13/06/19 01:10:31.78
>>45
>講義でやったのをいじっただけ
百歩譲ってそうだとしても、変数名ローマ字云々は一般には糞扱いだぜ?
(特に「void main()」は厳密には文法違反だし)
と言うか、
仮にデータ部分を外部ファイルに分けて用意することが許されなかったとしても、
仮にmain以外の関数を定義することが許されなかったとしても、
仮に構造体や長い英字変数名(キャメル記法)を使うことが許されなかったとしても、
もうちょい分かりやすく書けなかったのかと言いたい

51:デフォルトの名無しさん
13/06/19 01:10:57.73
>>45
>44に付け加えて、
・CなのかC++なのかはっきりしろ。
・変数宣言は、局在化したいのか関数の先頭に分離したいのかはっきりしろ。

52:デフォルトの名無しさん
13/06/19 01:13:34.39
出題者の色々アレな点を鑑みると、void meinでなくて良かったと考えるべきだろうw

53:デフォルトの名無しさん
13/06/19 01:16:51.31
おまいら意地悪だな
デジカメでこれだけクリアな画像が撮れる奴がいるか?
もっと驚嘆してやれよ

54:デフォルトの名無しさん
13/06/19 01:19:43.33
これでも読んでもちつけ
URLリンク(japan.zdnet.com)

55:デフォルトの名無しさん
13/06/19 01:45:45.79
>>51
C++スレでC++の文法に従ったプログラムを
見せているのに、Cなのかはっきりしろとは
これ如何に

56:デフォルトの名無しさん
13/06/19 03:27:21.06
>>55
C++の流儀に従うなら従う、必要機能以外C互換機能で済ますなら済ます、どっちかにしろってことだろう。

でも任意箇所での変数宣言はC99とかならCでもできるし(-Dprintf_s=printfつければtccでも通る)、
printf_sに目を瞑ればた只々下手クソなCコードととしてコンパイル通るといえば通る。
(手元にあるVC2010のCL /TCでは非ブロック先頭変数宣言でコケるので違うかもだが)

printf_s使ってる辺り(聞きかじりの)新機能使ってCのコード書いてるつもりなのか、
C++の講義だけどCのAPIしか叩かないちょっとアレな方針なのか、どっちだろうな。
scanf/printfは便利だけど、C++の講義なら早々に済ませてstd::cout/std::cin使うべきだろう。

57:デフォルトの名無しさん
13/06/19 06:39:53.58
バカほど長文

58:デフォルトの名無しさん
13/06/19 07:33:42.66
>>56の要約:
「C++というなら素直にiostream使っとけ」

59:デフォルトの名無しさん
13/06/19 07:44:13.98
iostreamは糞だから別にmustじゃない

60:デフォルトの名無しさん
13/06/19 08:38:37.21
iostreamを駆逐しうるライブラリは?

61:デフォルトの名無しさん
13/06/19 09:19:59.18
ストリームデバイスの抽象化としてiostreamの設計は妥当で悪くない
ブロックデバイスに対してもストリームデバイス用に設計されたインターフェイスを使わなければならないことが問題だろ

62:デフォルトの名無しさん
13/06/19 11:18:33.34
cout << a << b << c
これはいいけど
cin >> a >> b >> c
これはおかしい
論理性のカケラも無い

63:デフォルトの名無しさん
13/06/19 11:38:44.91
質問させてください。

#ifdef FOO
 int var;
#endif

だと宣言のたびに3行も使ってしまって見づらいので、
初めに
#if 1
# define FOO /##/
#else
# define FOO
#endif

として、以降

FOO int var;

と1行で書こうと思いました。
vc++ではこのやり方でうまくいくのですが、
xcodeでは Pasting formed'//', an invalid preprocessing token というエラーになってしまいます。

コメントアウトのオンオフを1行でこなせる、環境依存でないマクロというのはないのでしょうか?

64:デフォルトの名無しさん
13/06/19 12:06:16.86
まさかと思うが、ObjectiveCじゃないだろうな。

65:デフォルトの名無しさん
13/06/19 12:13:47.28
いえ、開発環境としてxcodeをつかってはいますが、c++のコードです。

66:デフォルトの名無しさん
13/06/19 12:25:03.11
#define DEF_VAR(type,name) type name;

DEF_VAR(int, var)

こういうのは見かけるけど

67:デフォルトの名無しさん
13/06/19 12:44:11.22
>>45
ほれ
URLリンク(ideone.com)

68:デフォルトの名無しさん
13/06/19 13:16:38.82
>>63
それ、gccでもエラーになる

これでいいんじゃね?
テンプレートとかでstatement中にカンマが入るとおかしくなるんで
そういう場合は事前にtypedefしておく

#if 1
#define FOO_CASE(statsment)
#else
#define FOO_CASE(statement) statement
#endif

FOO_CASE( int var = 6 );

69:デフォルトの名無しさん
13/06/19 13:47:52.81
>>63
関数内の宣言限定。
URLリンク(ideone.com)

70:デフォルトの名無しさん
13/06/19 13:58:51.41
そこは
#define UNKO if ( true ) ; else
じゃねーの

71:63
13/06/19 14:28:11.36
可読性をあげることが目的なのでタイプ修飾子と同じような書式が理想だったのですが、
DEF_VAR(int, var) やFOO_CASE(statement) statement のように括弧を使うしかなさそうですね。
#ifdefマクロを使うよりは読みやすそうですし、これで試してみます。
ありがとうございました。

72:デフォルトの名無しさん
13/06/19 15:00:30.41
>>70
これ C だと動くのか

73:デフォルトの名無しさん
13/06/19 15:17:10.53
>>69
どれだけ糞なコード思いつくんだよw
URLリンク(ideone.com)

74:デフォルトの名無しさん
13/06/19 15:21:40.92
そこは FUN in FUN だろ わかってねーな

75:デフォルトの名無しさん
13/06/19 19:08:15.61
if-else を使う方法は完全に消えるわけではないので
コンパイル対象になるから注意が必要

#ifdef を使った方が
エディタが色付けしてくれるので
読みやすい気もする

76:デフォルトの名無しさん
13/06/19 22:59:54.08
一番のウンココードは
#ifdef FOO
 int var;
#endif
環境依存のコードは局所化しろよ。

77:デフォルトの名無しさん
13/06/20 12:30:36.60
分りやすく猿にも分かるコードを書くのが職業プログラマー
難解だけど高度な内容を含んでいるのが個人プログラマー

78:デフォルトの名無しさん
13/06/20 12:57:18.63
という、コード書けない奴の思い込みでした。

79:デフォルトの名無しさん
13/06/20 13:08:03.35
>>78
言ったな
コード書いてみろや

80:デフォルトの名無しさん
13/06/20 13:53:26.51
>>79
スレリンク(tech板)

81:デフォルトの名無しさん
13/06/20 13:55:44.36
>>77
猿にも分かる--->単純アルゴリズム
いきなり、矛盾だな。

82:デフォルトの名無しさん
13/06/20 14:17:28.27
カスしかいないスレ

83:デフォルトの名無しさん
13/06/20 14:56:33.78
職人かと思ったがよくみたら職業マか
分りやすく猿にも分かるコードを書けるのは才能だぞ

84:デフォルトの名無しさん
13/06/20 14:56:35.45
>>81
待て待て、その方は京大の・・・

85:デフォルトの名無しさん
13/06/20 16:22:38.83
>>80
なんだ>>78はQか
Qが荒らしているという事実が判明しました

86:デフォルトの名無しさん
13/06/20 16:30:40.62
どこが荒らしなんだか

87:デフォルトの名無しさん
13/06/20 19:03:44.46
本当のプロフェッショナルは仕様書を書くのが楽でテストも自動化しやすいものを作る
つまり純粋関数型だけが真のプロフェッショナルに許された技術なのだ

88:デフォルトの名無しさん
13/06/20 19:16:35.18
キチガイ現る

89:デフォルトの名無しさん
13/06/20 19:36:12.66
真実をズバリと突かれて平静を保ちたいがために声を荒げて反論したくなる気持ちもわかる
しかし君が何と言おうと関数型が世界の選択である事実には変わりないのだ

90:デフォルトの名無しさん
13/06/20 19:38:50.52
シロナガスクジラにもでかすぎる釣り針で何が釣りたいんだ?

91:デフォルトの名無しさん
13/06/20 19:40:51.22
おろかなる旧人類よ
君たちが関数型の真価に気付き
種としての夜明けを迎えるのは何年後だろうか?

92:デフォルトの名無しさん
13/06/20 19:41:57.57
ここは、「ボクのかんがえたさいきょうのぷろへっしょなる」を開陳する場だぜ。

93:デフォルトの名無しさん
13/06/20 20:14:44.36
消費するスタックサイズ計算出来ない奴はお呼びじゃない

94:デフォルトの名無しさん
13/06/20 20:53:11.42
仕事で古いC++のアプリの保守することになったんだけど
今までC++の経験がなくて何から勉強すればという状態です。

保守するプログラムは
VC++6.0
MFCは使っていない

とりあえず、
新Visual C++6.0入門 ビギナー編
URLリンク(www.amazon.co.jp)
新Visual C++6.0入門 シニア編
URLリンク(www.amazon.co.jp)
を買ってみたんですがほかにお勧めとかあったら教えてください。
よろしくお願いします。

95:デフォルトの名無しさん
13/06/20 21:06:40.22
>>94
URLリンク(www.amazon.co.jp)

96:デフォルトの名無しさん
13/06/20 21:07:06.28
>>94
Bjarne Stroustrup. The C++ Programming Language Fourth Edition

97:デフォルトの名無しさん
13/06/20 21:13:52.65
ハゲの妄想本は糞
絶対読むな

98:デフォルトの名無しさん
13/06/20 21:23:04.31
いや、4th は買いだよ
立ち読みでいいから確認してみな

あれ以上に解りやすい説明を、おまえできるか?

99:デフォルトの名無しさん
13/06/20 21:43:14.62
>>94
仕様書が一番わかりやすいよ

100:デフォルトの名無しさん
13/06/20 22:24:47.90
VC++6.0 なのに C++ の本をすすめるのは間違い

101:デフォルトの名無しさん
13/06/20 22:47:47.60
>>94
その二冊はMFCの解説書でしょ…

102:デフォルトの名無しさん
13/06/20 22:51:27.92
きっとVC6が何かわかってないんだよ

103:デフォルトの名無しさん
13/06/20 22:54:06.68
>>94
このシリーズの1巻がおすすめだ。
2と3はあなたが持ってるのとかぶる。
あとは猫でもわかるのサイトとか

ジャンルがわからないけど
Windowsの仕組みの勉強のほうが先かも
URLリンク(detail.chiebukuro.yahoo.co.jp)

104:デフォルトの名無しさん
13/06/20 23:07:17.95
>>101
> その二冊はMFCの解説書でしょ…
そうですね・・・。よくみてませんでした。
IDEの使い方も載ってそうだし、中古安かったので買ってみました。

>>103
>このシリーズの1巻がおすすめだ。
1巻も買ってみます。

>>Windowsの仕組みの勉強のほうが先かも
うーん。一応VB.netでWindowsアプリの開発経験はあるんですが
Windows APIとかよくわからないのが多いんですよね。
参考にします。

105:103
13/06/20 23:19:17.54
>>104
ごめんこっちの1巻
URLリンク(www.amazon.co.jp)

106:デフォルトの名無しさん
13/06/20 23:19:48.72
MFC使わないんならC++も必要ない
Win32 のウインドウプロシージャ関連をぐぐればOK

…Cはわかってるんやろか

107:デフォルトの名無しさん
13/06/21 01:13:01.68
>>104
MFC抜きなら(GUIの場合だが)スケルトンの学習は必須。
アプリの開始位置のWinMain関数とウィンドウクラスの登録(クラスを登録する事で
登録した時の情報に従ったウィンドウのパターンが出来る。それを呼び出してウィンドウを作る)
そして最も手を加えるWindowProc(ウィンドウプロシージャ)コールバックとして登録することで
システムから呼び出される。キーが押された、マウスがウィンドウを通過した、マウスボタンが
押された、などの情報が全て送られてくる。それを条件によってさばいていくのが
MFC抜きのC/C++でのWindowsアプリの形。

108:デフォルトの名無しさん
13/06/21 01:25:09.14
まず、コンソールアプリなのか
サービスアプリなのかCOMライブラリなのか
Win32を使用したGUIアプリなのか
プログラムの形態を確認しろよ
Oracle Pro*Cのバッチプログラムだったら
WindowProcの知識なんて殆ど役に立たないぞ

109:デフォルトの名無しさん
13/06/21 01:42:31.17
スタンドアロンのGUIアプリ一択だろ
エスパー能力が足らんな

110:デフォルトの名無しさん
13/06/21 10:26:53.01
>>94
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

111:デフォルトの名無しさん
13/06/22 01:29:57.15
floatなどをクラス内で定数宣言をするにはどうすればいいでしょうか
static const int と同じようなものを作りたいと考えています

112:デフォルトの名無しさん
13/06/22 01:31:46.67
>>111
インライン関数使えや
Perlのように

113:デフォルトの名無しさん
13/06/22 01:51:45.96
>>111
諦めてクラスの外に書く
namespace unko {
 const float pi = 3;
}

114:デフォルトの名無しさん
13/06/22 02:07:55.85
>>112
public:
クラス名() : m_f(0.0f){}
private:
const float m_f;
ということでしょうか。Perlを触ったことがないのでアレです

>>113
C++の設計思想と言うか、考え的に確かクラス内定数は作らせたくないんですよね
諦めてクラス外に書く方が一番ですかね・・・

JAVAで言うpublic static final float ~~ みたいなことができたらなぁと思ったのですが・・・

115:デフォルトの名無しさん
13/06/22 02:15:51.24
クラス内に定数を置きたい理由って何だろう

116:デフォルトの名無しさん
13/06/22 02:22:04.56
>>115
使うかどうかは別として、できるのかなと気になったので・・・

117:デフォルトの名無しさん
13/06/22 04:21:40.13
C++11

118:KUSO KOTE
13/06/22 07:24:54.81
>>111
一応クラスの中の宣言…
URLリンク(ideone.com)

119:デフォルトの名無しさん
13/06/22 07:40:33.92
円周率 = 3

120:デフォルトの名無しさん
13/06/22 08:23:06.30
>>114
単純に、
classs Foo {
public:
 float e() const { return 2.718281828459045f; }
 void Print() { std::cout << e() << std::endl; }
};
みたいな、
Perlと違ってあくまでe()であってeとは書けないが、
- 定数の定義と宣言をクラス内で一挙にやれる
- 実行コストは#defineやクラス外でやるconst float e = ~;と同等の低さが気体できる
という意味で、>111な要求をおそらく満たすから無問題、みたいな

121:デフォルトの名無しさん
13/06/22 08:28:10.87
どうしても構文にこだわりたいのなら、namespaceを使っても一応同等のことができそうな、
つまり、
 namespace foo {
  const float e = 2.182.18459045f;
  void print { std::cout << e() << std::endl; }
 }
みたいな、

テンプレートを駆使すればもっと奇天烈奇怪で驚天動地な答えもあるかも試練が知らん

122:121
13/06/22 08:30:55.49
すまん
 誤: void print { std::cout << e() << std::endl; }
 正: void print { std::cout << e << std::endl; }

123:デフォルトの名無しさん
13/06/22 08:41:10.57
結論、C++はうんこ

124:デフォルトの名無しさん
13/06/22 14:13:52.58
>>120
なるほど、そのようなやり方が・・・
ありがとうございます!

125:デフォルトの名無しさん
13/06/22 15:53:47.24
完璧な言語など無いよ
しいて言えばC#だろう

126:デフォルトの名無しさん
13/06/22 15:56:03.63
>>123
ありがとうございます

127:デフォルトの名無しさん
13/06/22 16:15:57.53
>>126
ありがとうございます、じゃねーよ( ゚д゚)、ペッ

128:デフォルトの名無しさん
13/06/23 06:13:24.87
>>127
ありがとうございます

129:デフォルトの名無しさん
13/06/23 10:14:06.46
いえいえ

130:デフォルトの名無しさん
13/06/23 14:46:06.94
お先にどうぞ

131:デフォルトの名無しさん
13/06/23 20:29:23.29
ヘッダに静的変数を定義するにはどうしたらいいですか?
class unko {
public:
. static mutex lock1;
}
とすると定義がないと怒られるので
class unko {
public:
. static mutex lock1;
}
mutex unko::lock1;
としたところ多重定義と怒られました
class unko {
public:
. mutex& get_lock() { static mutex u; return u; }
}
とすると一応できるのですが、カッコ悪いのと、実行のシングルスレッドが保証できないのでできれば避けたいです

132:デフォルトの名無しさん
13/06/23 21:32:14.62
>>131
無理だと思う。

133:デフォルトの名無しさん
13/06/23 21:33:22.30
よくわからんがクライアントプログラムがインクルードする度に定義されたいの?

134:KUSO KOTE
13/06/23 21:36:13.98
>>131
これでOK…(たぶん)
URLリンク(ideone.com)

135:デフォルトの名無しさん
13/06/23 21:42:50.86
変数名unkoとかやめーい

136:デフォルトの名無しさん
13/06/23 21:48:16.64
ヘッダはstatic変数は宣言で
定義はcppが常識

137:デフォルトの名無しさん
13/06/23 22:15:03.49
UNCHI(United China)、UNKO(United Korea)はもうすぐ無断で使用不可になるから気を付けるように。

138:デフォルトの名無しさん
13/06/23 22:22:02.03
ホゲもクソも変わらん。
クソは確信的だろうけど、
むしろホゲを堂々と使う人の方が
ヤバいと思う。特にウニクサー。

139:デフォルトの名無しさん
13/06/23 22:32:40.40
最近は、MooとかMew使うことにしてる

140:デフォルトの名無しさん
13/06/23 23:19:13.52
>>137
United Koreaって北朝鮮のヤバさと
韓国の酷さが合体するの?

141:デフォルトの名無しさん
13/06/24 00:31:53.51
ネトウヨに一々反応するな

142:デフォルトの名無しさん
13/06/24 08:35:23.19
そういう事にしとけば楽だよねー。

143:デフォルトの名無しさん
13/06/24 10:06:19.25
すみません、相談いいですか?
二次元配列のvectorを管理するクラスでエラーが出て困っております。
classをコンテナとしたvectorの二次元配列を宣言をするには
 vector<vector<class型名(仮にAとします)*> >配列名(仮にBとします)
で大丈夫ですよね?そして二次元配列の行と列の長さを初期化のところで
確定させたいのでresizeを用いて行と列の長さを決定、
そのあと二重ループを用いて、二次元配列のすべての要素にAを格納させる。
これらのことをマネージャclass(仮名)でやっているのですがエラーが出てしまいます。
開発環境はvisualstudioなのですが、エラーはerror LNK2001: 外部シンボル云々というもので
(もちろん、セットでerror LNK1120: 外部参照 1 が未解決ですも続いてます)、
どうやら二次元配列の中にBが格納されておらず、
そこを読む処理が「無いぞ」とエラーを吐いてるみたいです。
<マネージャclassにて>
二次元配列の宣言 vector<vector<A*> >B;

初期化の関数内
void マネージャCLASS::Initialize(int m_line,int m_col){
B.resize(m_line);
for(int i = 0; i<m_line; i++){
B[i].resize(m_col);}

for(int line=0; line<m_line; line++)
{
for(int col=0; col<m_col; col++)
{
A* add = new A();
add->Initialize();
B[line][col] = add;}}
としています。これらに問題ありますか?
また、このような処理を書く場合に気を付ける箇所はありますか?
コンテナに使っているAクラスには変数と関数しか書いてません。

144:デフォルトの名無しさん
13/06/24 10:11:02.08
>>143
エラーメッセージを一字一句飛ばさずに読め、それでわからなければ、同じエラーの出るコードと
エラーメッセージを一字一句飛ばさずに貼れ。

それとは別にそのコード、 new で入れた A の delete はどうなってるの?
resize(), new, Initialize() など例外の飛びそうな操作が入り混じっていながら
直接メンバ変数 B をいじくってるんで、たぶん例外安全性の問題もある。

145:デフォルトの名無しさん
13/06/24 10:36:47.00
>>144
レスありがとうございます。

エラーの全文です(長すぎる行と規制が入ったので改行してます
(コンテナCLASSを型名とした二次元配列でそれはマネージャclassで宣言、初期化してます)

1>その配列を読もうとしてるクラス名.obj : error LNK2001: 外部シンボル ""public: static class std::vec
tor<class std::vector<class コンテナCLASS *,class std::allocator<class コンテナCLASS *> >,class std:
:allocator<class std::vector<class コンテナCLASS *,class std::allocator<class コンテナCLASS *> > > > マネ
ージャCLASS::配列名" (?配列名@コンテナCLASS@@2V?$vector@V?$vector@PAVコンテナCLASS@@V?$allocator@PAVコンテ
ナCLASS@@@std@@@std@@V?$allocator@V?$vector@PAVコンテナCLASS@@V?$allocator@PAVコンテナCLASS@@@std@@@std@@@2@@std@@A)" は未解決です。

>new で入れた A の delete はどうなってるの?
格納後のAのdeleteですか?Aの中でdelete作ってますが。。。

146:デフォルトの名無しさん
13/06/24 11:26:16.09
>>145
コードはどうした?

"コンテナCLASS" とか言ってるのは要素型のことなんだろうけど、一般的に
コンテナクラスと言えば vector などモノを入れるクラスのことを指すんで、その呼び名は
やめたほうがいいよ。

そのエラーメッセージは "public: static ... マネージャCLASS::配列名" の定義が無いと
言っている。

147:デフォルトの名無しさん
13/06/24 11:35:22.75
>>131 の続きに見えなくもない

148:デフォルトの名無しさん
13/06/24 12:15:23.21
>>146
>"public: static ... マネージャCLASS::配列名" の定義が無いと言っている。

どういうことでしょう??
>>143にて書いてるようにマネージャCLASSにて、vector<vector<A*> >B;と宣言はしております。

あとコードを張り付けるにもこの掲示板は行数規制がキツイみたいなので
連投せざるを得ません。例えば、確認したい箇所を限定して頂けないでしょうか?
エラーはどうやら、初期化後、別の場所からゲッターなどで要素の中身を確認しようとしたら吐くようです。

149:デフォルトの名無しさん
13/06/24 12:17:31.41
>>147
?一応申しますと、>>131は別の方です

150:デフォルトの名無しさん
13/06/24 12:42:02.88
>二次元配列の宣言 vector<vector<A*> >B;
本当にそう宣言してるか?static付けてないか?

151:デフォルトの名無しさん
13/06/24 12:44:47.38
>>150
はい、staticつけてます。
よくわかりましたね??
もしかしてstaticつけてたらダメなんでしょうか?

152:デフォルトの名無しさん
13/06/24 13:03:01.56
staticメンバ変数と非staticなメンバ変数の違いはわかってるか?

わかってて使ってるなら
staticメンバ変数はクラス定義の中に書いてもそれは宣言だけで定義したことにならない
クラス定義の外(かつプログラム全体のどこか一箇所だけ)で
 vector<vector<A*> > マネージャCLASS::B;
として実体を定義しなければならない

153:デフォルトの名無しさん
13/06/24 13:16:40.36
>>152
ご指摘通り、配列を実体化してませんでした。。。忘れてました。
どうもありがとうございます!!

154:デフォルトの名無しさん
13/06/24 13:40:54.89
tdmつかってます。cstdintをincludeしてもint64_tが使えないのはなぜですか?
つかえるようにしかた教えてください。

155:デフォルトの名無しさん
13/06/24 14:41:26.54
>>154
tdmつかってないけど、std::int64_tなオチじゃね?

156:デフォルトの名無しさん
13/06/24 14:59:41.36
じゃない。

157:デフォルトの名無しさん
13/06/24 15:06:14.54
#include <stdint.h>
ならstd::付けなくても大丈夫じゃね?

158:デフォルトの名無しさん
13/06/24 15:08:08.99
cstdintのヘッダーみてるとマクロで使えないようにしてあるみたいっす。

159:デフォルトの名無しさん
13/06/24 15:10:29.91
-std=c++0xオプションが要るとか
手持ちのg++ 4.4.3だとこのオプション付けないとワーニング表示するよ

160:デフォルトの名無しさん
13/06/24 15:13:00.16
オプションはつけてマッスルよ。

161:デフォルトの名無しさん
13/06/24 15:28:43.64
int64_tが無いKUSOコンパイラなんだよきっと
別に規格違反ではない

162:デフォルトの名無しさん
13/06/24 15:33:26.72
>>161
あんさんの使っているコンパイラーは何にょ?

163:デフォルトの名無しさん
13/06/24 15:35:52.74
c++0xオプションつけてるのにstd::int64_tが
マクロで抑制されているとなると、
Windowsで32ビットバイナリの時は使えないとか?

164:デフォルトの名無しさん
13/06/24 15:38:50.39
えっと、-m64でしたっけ・・・
つけてマンスリーよ

165:デフォルトの名無しさん
13/06/24 15:45:58.64
>>164
お前、どうせ後で
「みなさんがいつ正解に辿り着くか試していました。バカばっかですね」
とか言うつもりだろ?

166:デフォルトの名無しさん
13/06/24 15:47:21.58
馬鹿ばっかですね。

167:デフォルトの名無しさん
13/06/24 15:50:43.52
>>165
それをいうのは俺の仕事だ 邪魔すんな

168:デフォルトの名無しさん
13/06/24 18:40:26.30
>>154
馬鹿には使えないんです。諦めて下さい。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch