[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 05/30 19:11 / Filesize : 249 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2008/02/05(火) 01:18:41 ]
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.47【環境依存OK】
pc11.2ch.net/test/read.cgi/tech/1200464091/
【アップローダー】(質問が長い時はココ使うと便利)
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm


56 名前:デフォルトの名無しさん [2008/02/06(水) 14:57:04 ]
文字列 は参照ですが、stringもそうなりますか

57 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:06:37 ]
>>49
<iomanip>ヘッダ
setprecisionマニピュレータを使う。

double amount = 3.33333;
streamsize oldprec = cout.precision();
cout << setprecision(3) << amount << setprecision(oldprec) << endl;

58 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:17:12 ]
しかし1の位が0だと小数点以下が3ケタになってしまいます

#include <iostream>
#include <iomanip>

int main() {
   using namespace std;
   double amount=3.33333;
   double aaa=0.3333;
   streamsize oldprec = cout.precision();
   cout << setprecision(3) << amount << ' ' << aaa << setprecision(oldprec) << endl;
}

$ bjam precision-run
3.33 0.333

EXIT STATUS: 0

こういう場合は文字列処理に持っていくしかないですかねぇ?

59 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:34:32 ]
>>55
コンパイラは自動的にプログラムを書いたりはしてくれませんので、コンパイラに任せるなどということはできません
コンパイラは あなた が書いた通りに動きます
>>56
文字列(=文字の配列)への参照っていうと、こういうのでしょうか
void foo(const char(&s)[6]) {
printf("%s\n", s);
}
int main() {
foo("Hello");
}
あんまりやらないと思いますが

60 名前:58 mailto:sage [2008/02/06(水) 15:40:26 ]
#include <iostream>
#include <sstream>
#include <cassert>

using namespace std;

string foo (double n) {
  ostringstream os;
  string s;
  os << n;
  assert(os.str().size() >= 4);
  s = os.str();
  string::size_type b=0, e=0;
  b = s.find('.');
  e = b+3; --b;
  return s.substr(b, e);
}
int main() {
   double amount=3.33333, aaa=0.3333;
   cout << foo(amount) << ' ' << foo(aaa) << endl;
}
$ bjam
3.33 0.33

よくわからないので適当にsstreamで

61 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 15:41:03 ]
>>58
cout.setf(ios::fixed, ios::floatfield); をcout前に追加
setprecision(3) → setprecision(2)

62 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 17:21:15 ]
普通小さくするのがぬ゛うんキャストじゃないの?

63 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 17:56:43 ]
>>62
ごめん、よくわからない

64 名前:デフォルトの名無しさん [2008/02/06(水) 18:59:44 ]
MacOSXとGLUTの組み合わせで◯◯.appというディレクトリを作って
起動させると、はじめカレントディレクトリは
ルートディレクトリになってるんですけど
glutInit()を通過すると、◯◯.app/Contents/Resourcesが
カレントディレクトリになってんですよ
なんでこんな妙なところに行っちゃうんですかね

ちなみに◯◯.appの中身は以下の通りです
◯◯.app/Contents/Info.plist <--謎
◯◯.app/Contents/MacOS/○○.exe <--実際に動くc++コード
◯◯.app/Contents/Resources/icon.icns <--アイコンの絵



65 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:21:04 ]
D3DPRESENT_PARAMETERS d3dpp;
::ZeroMemory(&d3dpp, sizeof(d3dpp));



D3DPRESENT_PARAMETERS d3dpp = {0};

はちがいますか?

66 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:23:40 ]
詰め物

67 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 19:30:09 ]
>>64
そこがアプリケーションのリソースを置く場所だから、
親切に(あるいは余計なお世話か)移動してくれてるんじゃないかな

68 名前:デフォルトの名無しさん [2008/02/06(水) 20:39:50 ]
>>67
なるほど
Glutで何かしているのではなく
◯◯.exeに引数で渡してるんですね。
そんな気がしてきました。
ちょっとチェックしてみます。

69 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:00:07 ]
>>48
NULLポインタdeleteって問題ないんじゃないの?

70 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:03:06 ]
>>69
二重解放つったら解放したアドレスをもっかい解放のことだろ?

71 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:04:35 ]
deleteしただけで、0(NULL)になってるとは限らないんじゃないの?

72 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 22:32:43 ]
とりあえず gcc だとなってないな

73 名前:デフォルトの名無しさん [2008/02/06(水) 23:35:43 ]
質問です。g++を使っています。O2 で最適化してます。

クラスの中で定義した関数は勝手に inline となるのでしょうか?
inline をつけても意味は無いのでしょうか?

74 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:38:40 ]
deleteした後自分で0をポインタに代入するというTipsがある位だからな



75 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:44:29 ]
>>73
inline指定してるのと同じになる。
実際にinline化されてるかはコンパイラ次第。

76 名前:デフォルトの名無しさん mailto:sage [2008/02/06(水) 23:48:07 ]
ありがとう。何か勘違いしてたみたい
deleteした後nullになるわけじゃないのね
WM_DESTROYが来た時点ではOSかが自動的にdeleteしちゃってるから多重解放
でエラーでかうのかな

77 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:42:46 ]
OSは自動的にdeleteなんてしません

78 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:47:50 ]
libhoge.so
をスタティックリンクすることってできるんでしょうか?

79 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 00:54:20 ]
はい。それがスタティックリンクできるようなアーカイブやオブジェクトモジュールであれば。

80 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 03:40:14 ]
>>77
じゃあ何でエラーでるの?
newしたまま終了してしまっても最悪OSがエラー処理として解放してくれるって聞いたけど

81 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 05:19:50 ]
>>80
エラーが出る事と自動的にdeleteする事を同列に考えるなよ
そもそもソース出してないのに的確な答えが出せると思える?
つーか自分で考えて答え出すか出たんなら帰れよ、必要最低限のレスは付いたんだから

82 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 05:55:50 ]
的確な答じゃないなら断言口調で書くなよ、紛らわしい。

83 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 06:04:00 ]
>>81
その考えをおまえが否定したから聞いてきてるんだろ

84 名前:デフォルトの名無しさん [2008/02/07(木) 06:42:38 ]
vector って大きさが可変のはずですが、vectorの配列のポインタ操作ってうまくいくのでしょうか?


たとえば以下のように double の vector の配列を作ったとします。

std::vector<double> a[3][4];

この vector 配列の要素ごとに違う回数だけ push_back() で値を入れたとします。
そして vector のポインターを引数にとる以下の関数があり

void hogehoge (std::vector<double>* arg ){

 for(std::vector<double>::const_iterator it=arg[0].begin();
  it!=arg[0].end();
  it++){
   std::cout<<"arg[1] "
 }
}

その引数に a[1] を以下のように入れた場合は

hogehoge(a[1]);

arg[0]というのは a[1][0] をちゃんとさしてくれるのでしょうか?



85 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 06:44:38 ]
否定したんじゃなくて、ありがちなパターンに陥っていそうだから指摘しただけだろ。

86 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:16:58 ]
>>84
当然さす

87 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:18:13 ]
>>80
newしたまま終了って、main/WinMain すら終了した後の話だぜ

88 名前:84 [2008/02/07(木) 07:20:43 ]
>>86
ありがとう!
ってことは sizeof(vector<double> は要素の数にかかわらず値は変わらないって事か。
不思議。

89 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:23:40 ]
>>88
意味が分からん。

ポインタに [0] をつけたら
そのアドレスにあるオブジェクトを指す。
極めてシンプルな答え。

90 名前:84 [2008/02/07(木) 07:30:44 ]
メモリを動的に作ってるからコンテナの要素が増えてもポインタは同じ所にあるって事か

91 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:31:39 ]
vectorの中身はnewで確保したメモリへのポインタ(と管理情報)だからな

92 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:35:21 ]
>>88
要素自体は動的確保されているからな

93 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 07:35:52 ]
いいえ。

94 名前:デフォルトの名無しさん [2008/02/07(木) 09:42:52 ]
vectorの中の要素をソートしたいのですが、そのとき、自分で定義した関数によって
ソートしたいです。どうすればよいですか?



95 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 09:45:44 ]
vectorは連続領域に格納される(配列と同じように扱える)から普通にソートしたらいい。

96 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 10:00:45 ]
>>94
std::sort

97 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:14:42 ]
スタティックリンクとかシャードリンクとかそのあたりのことが勉強できるサイトありませんでしょうか?

98 名前:デフォルトの名無しさん [2008/02/07(木) 14:26:10 ]
>>96
sort(vec.begin(), vec.end(), func);
と書きたい時、funcはどういう風に書けばよいでしょうか?
class func : public binary_function
{
bool operator()(const string &a, const string &b){}
};
と書いてみたのですが、コンパイルも通りません。
どうかお願いします。


99 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:29:08 ]
binary_functionでぐぐれ

100 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:30:57 ]
>>98
厳密に言うとstrict weak orderingを満たすように書く
ことになるが、

struct func : public binary_function
{
bool operator()(const string &a, const string &b) {
    return a < b; //辞書順で昇順
}
};

sort( vec.begin(), vec.end(), func() );

とかでどう?


101 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:31:04 ]
質問です。
VC6.0で自前のライブラリをまとめたStatic Link Libraryを作っています。
そのライブラリを実際に他のプロジェクトで使う際、リンクのところで以下のように躓きました。

・すでに LIBCMTD.lib(crt0dat.obj) で定義されています
これを筆頭に、大量にリンク警告がでました。
調べたところ
ttp://m--takahashi.com/bbs/pastlog/08900/08806.html
libの方はシングルスレッドで。テストプロジェクトのほうはマルチスレッドでコンパイルしているのが問題のようでした。
両方マルチスレッドにしたところ…

・"libcmt.lib" は他のライブラリの使用と競合しています
今度はこれだけでました。
調べたところ
ttp://m--takahashi.com/bbs/pastlog/03900/03888.html
libがReleaseコンパイルで、テストプロジェクトがDebugコンパイルなのが悪いようでした。
libをRelease版とDebug版の両方をつくり、適切にリンクするようにしたところ、エラーがきえました。

ここで疑問なのですが、今後の汎用性を考えるとlibは
・シングルスレッドDebug版
・シングルスレッドRelease版
・マルチスレッドDebug版
・マルチスレッドRelease版
をそれぞれ用意しておかなければならないのでしょうか?

一般的に用意されている"winmm.lib"などは、何も考えずにstdafx.hに
#pragma comment(lib, "winmm.lib")
と書いておけば、シングルスレッドだろうがマルチスレッドだろうが、DebugだろうがReleaseだろうが適切にリンクされました(警告やエラーでません)

自作のlibも同じくらい気軽に使えるようにするには、どのようにしたら良いのでしょうか?

102 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:32:02 ]
おっと、
>>99を見て
struct func : public binary_function<string, string, bool>
{
bool operator()(const string &a, const string &b) {
    return a < b; //辞書順で昇順
}
};

か。

103 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:38:33 ]
const が有った方がいいな。

104 名前:デフォルトの名無しさん [2008/02/07(木) 14:39:36 ]
ハードディスクへの書き込みで、メモリへのキャッシュを自動で行ってくれる命令ありますか



105 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:52:29 ]
おっと、
>>103を見て
struct func : public binary_function<string, string, bool>
{
bool operator()(const string &a, const string &b) const {
    return a < b; //辞書順で昇順
}
};

か。おれはconstをよく忘れる。


106 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:53:31 ]
>>101
・Debug版は公開しちゃいけません
・現行VCはシングルスレッド版ランタイムがありません

>>104
そんな「命令」なんてあるもんですか。

107 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 14:59:57 ]
>>106
MFC等のデバッグ版DLLの再配布が禁止なだけで
自前ライブラリのデバッグ版配布は禁止じゃねえだろ。

108 名前:デフォルトの名無しさん [2008/02/07(木) 15:05:41 ]
>>106
自前でキャッシュ用意しましたよ

109 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:16:46 ]
>>106
101です
お返事ありがとうございます。

>・Debug版は公開しちゃいけません
確かにそもそもDebug版は用意しておく必要ないですよね
ただ、d3d9.lib も、デバッグ版らしき d3d9d.libというものがあります。

もしかして「Debug/Releaseで自動的にリンクを変えている」なんていうのは私の妄想で
d3d9d.libは使われていないのでしょうか?

>・現行VCはシングルスレッド版ランタイムがありません
これはつまり、世の中に配布されてるlibはマルチスレッド版で作られており、
マルチスレッド版libは、シングルスレッドなプロジェクトで利用しても特に問題が起きないということでしょうか?
(実際試してみたところ、シングルプロジェクトからマルチLibを呼び出してもエラーとなりませんでした)

そもそも「_beginthreadを使うためにはマルチスレッド版にする必要がある」という認識しかもっておらず、
「マルチスレッド版にしないことによる利点」は知らないのです

110 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 15:21:59 ]
>>109
まず、デバッグ版のlibがあるやつはpragmaで切り替えてるはず。
自分の作ったlibが物によって変わるのは、そいつの中でデバッグ版や
MT版のlibを呼んでるから。

そういうの避けたければスタティックリンクしてしまうといいかも。

111 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:08:21 ]
>>109です
>(実際試してみたところ、シングルプロジェクトからマルチLibを呼び出してもエラーとなりませんでした)
これですが、勘違いでした。
やはり「マルチスレッド版のlibファイル」を「シングルスレッド版のプロジェクト」からリンクすると、
LINK : warning LNK4098: defaultlib "LIBCMTD" は他のライブラリの使用と競合しています; /NODEFAULTLIB:library を使用してください
となってしまいました。
(上のは、Debugマルチ版LibをDebugシングル版のプロジェクトにリンクした場合の警告です)

>>110
なるほど。hファイルあたりで、#ifdef _DEBUG やら色々としているのでしょうか。

>そういうの避けたければスタティックリンクしてしまうといいかも。
ちょっとこの意味合いがわからないのですが、詳しく教えていただけますでしょうか
どこかのサイトへのリンクでも構いません



112 名前:デフォルトの名無しさん [2008/02/07(木) 16:26:09 ]
教えてください。
以下の式で、shinが偽になるのはなぜでしょうか?

unsigned int a =10, b = 20;
char shin = ((a - b) < (b - a));

(a - b) = -10, (b - a) = 10 なので、shin = 真になるように思うのですが。。。


113 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:29:04 ]
unsigned同士の演算の結果はunsigned

114 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:32:12 ]
int型変数(-32768〜32767)に-40000とか入れようとしたらどうなると思う?



115 名前:デフォルトの名無しさん [2008/02/07(木) 16:32:16 ]
ありがとうございます

116 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:37:11 ]
>>101
コンパイラオプション/ZlってVC6にない?
これはobjファイルにLIBCMTD.LIBとかCRTへの参照を
埋め込まないようにするコンパイラオプション。
1つのlibで全てを賄えるようにもなる。

けど現実的には最適化・デバッグオプションの有無で、
少なくともRelease/Debugの2種用意すべきだと思うけど。

117 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:48:16 ]
>116
Zlオプションを使ったところ、DebugプロジェクトからReleaseLibを使っても警告がでなくなりました。
ありがとうございます。
(最初 Zl が ゼット・アイだと思って混乱しましたw ゼット・エルですね)

しかし、StaticLibraryの作り方を詳しく解説しているサイトって全然見当たりませんね…。

Lib側としては、Releaseだけ用意しておけばいいと思うのですがどうでしょうか?
Libがバグっていないと仮定して利用するのが前提ですけど

118 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:51:38 ]
>>101
winmm.libってwinmm.dllの単なるインポートライブラリでは?
VCのランタイムをリンクしないライブラリならそういった問題は当然起きない

119 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 16:52:47 ]
別にReleaseだけでもいいと思う。
DLLだとデバッグ版も提供なんて話聞かないし。

120 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:02:19 ]
>>118
あ、なるほど。そういえばlibにはもうひとつ「DLLとリンクするためのインポートライブラリ」という役目がありましたね。
winmmはそっちですか。
(拡張子変えればいいのになぁ…)

>>119
了解しました。

>ALL
大変参考になりました。
ありがとうございました!

121 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:19:25 ]
デバッグ版のlibを提供するのはlibをデバッグしてもらおうということじゃなくて、
それを使ったプログラムもLibのソースをトレースできるようにだよw

122 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:23:39 ]
>121
誰への返事だ??

123 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:26:13 ]
環境依存のレスはすべてスルーしてます

124 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 17:36:05 ]
スレタイももちろんスルーです



125 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:04:43 ]
template<typename T>
void foo() {
T x = T();
}

intやint*などの基本型に対してテンプレートでのデフォルト初期化
を可能にするために上のような表記が許されておりint*ポインタも渡せます。
(NULLポインタに初期化されている)

しかし、以下のポインタの初期化は許されていないのでしょうか?

int* p = int*(); //コンパイルNGでした

int i = int(); //OK

126 名前:デフォルトの名無しさん [2008/02/07(木) 18:05:37 ]
ISO 9660ファイルを参照できるDLLとかありませんか

127 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 18:28:40 ]
>>125
それはできないけど、これならできる。
typedef int* pint;
template<typename T>
struct identity
{
  typedef T type;
};
int* p1 = pint();
int* p2 = identity<int*>::type();

128 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:05:06 ]
メモリが解放されてるかどうか確認する方法ってなんかあるかな?

void a( void* p ) {
if( rand() %2 ) delete p;
}

void main () {
char*pc = new char[100];
a(pc);
// pcが解放されてなかったら解放
if( soreppoino( pc ) ) delete pc;
}

みたいな。

129 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:08:34 ]
すまん誤爆った・・・ってここでもいいのかなこれ

130 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:13:57 ]
>>127
typedefで可能ということは単なるシンタックスの問題だという
ことですかね。だとしてもfoo<int*>()は結果的に
int*()となるからNGのような気もしますがね。

131 名前:デフォルトの名無しさん [2008/02/07(木) 19:31:29 ]

リスト管理の時
リストのアイテムをdeleteしたとき、自動的に所属するリストからはずれる機能は、
stlでvectorとかlistとか使って所属リストを覚えて、リストからはずすより、
前後のポインタを持った、自己連結クラスのほうが速度的に早いですか?
というか、deleteしたとき、自動的に所属するリストから外れるtemplateみたいなもの
STLみたいな標準ライブラリにありますか?


132 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 19:34:12 ]
>>130
単純にシンタックスの問題っぽいよ

>postfix-expression:
> simple-type-specifier ( expression-listopt )
(略)
>simple-type-specifier:
> ::opt nested-name-specifieropt type-name
> ::opt nested-name-specifier template template-id
> char
> wchar_t
> bool
> short
> int
(略)
>type-name:
> class-name
> enum-name
> typedef-name
>class-name:
> identifier
> template-id

intやクラス名やtypedef名はOKだけどint*は構文に合致しないっていう・・

133 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:03:47 ]
>>128
そういうクラスでも用意しない限り、ありません。
つーか、そんな阿呆なメモリ管理戦略はありえません。

>>131
逆に、リストにあるオブジェクトをremoveするときにdeleteしては?

134 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:22:12 ]
1904年の日露戦争の際に、ロシア正教会は全教会をあげて日本に天罰を
下すように神に祈りをささげた。結局なにも天罰は降りず、ロシアは負けた。
20年後、日本で関東大震災が発生。ロシアの物理学者カピッツァはこの事実から
「神はわれわれから9光年以内にいる」と結論を下したという。



135 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:47:14 ]
 お、おかしいアル・・・
/'⌒`ヽ、 5年後の世界に行ったらチューゴクがなかったアル・・・
ヽ、┗ ノ  
  `ーー'        γ⌒`ヽ           /'⌒⌒ヽ、
  ,-ーー-、      .|| ̄ ̄             (     ┃  ⌒ヽ
 /  ┃  )    ||    ∧_∧       \ ━┛    )
.(.   ┃   )   ||.   ( `ハ´;)
 ヽ、__,ノ     ||  _(つ¶¶と)__
           /||'''''|  三  |    |'(⌒)
        /    '―――――`  ̄ \
        `============'


136 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 20:51:06 ]
>>132
なるほど。まあテンプレートのときのために用意されてる
規則なので、そのときだけ利用します。
ありがとうございました。

ところで、みなさんは原文の規格を持ってるんですか?
買うと4万近かったので高くてとても買えません。


137 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:14:24 ]
JISならオンラインで読めるじゃん。画像だけど。

138 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:17:09 ]
Visual C++ 6.0を使っているんですけど
C++のプログラムを実行すると

c:\program files\microsoft visual studio\vc98\include\new(16) : error C2143: 構文エラー : ';' が '<class-head>' の前に必要です。
c:\program files\microsoft visual studio\vc98\include\new(16) : error C2501: '_STD_BEGIN' : 識別名を宣言するのに、型が指定されていません。
c:\program files\microsoft visual studio\vc98\include\new(16) : fatal error C1004: 予期せぬ EOF が検出されました。

と出てしまいます。
どんなプログラムでもこのエラーが出てしまい実行できません…
どのようにすればこのエラーはなくなりますか?

139 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:18:22 ]
>>137
そこでドラフトですよ。
若干現規格と違うけど、
古いドラフトだとまあまあ現規格に近いから十分参考にはなる。

140 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:25:29 ]
>>138
必要なものが入ってないか入れる設定にしていない。

_STD_BEGINってのはSTLが使う宣言だからSTLが使えないんだろう。
(vectorでも使ってるんかね?)

俺はSTL使ってないんで後はぐーぐる先生か他の人にまかすわ

141 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 21:37:29 ]
>>137
>>139
あれ検索できないから不便ですよね。まあ無料なのでたまに見ますが。
正式版を無料で配布して欲しいですね。

142 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 22:03:32 ]
>>138
Visual C++ 2008 Expressとかだとどうなる?

143 名前:デフォルトの名無しさん [2008/02/07(木) 22:50:19 ]
>>105
(遅くなりましたが)
ありがとうございました。

144 名前:デフォルトの名無しさん mailto:sage [2008/02/07(木) 23:20:56 ]
>>128
標準では用意されていないので、人によっては解放したらその領域を指
していたポインタ変数を (* 自分で *) NULL にしておくようにしてい
る人もいる。

どっちかって言うと、バグってた時の二重解放除けとか、変な領域を壊さ
ないようにと言う防御策だが。

void a( void** p ) {
if( rand() %2 ) delete *p;
}

void main () {
char*pc = new char[100];
a(&pc);
// pcが解放されてなかったら解放
if( soreppoino( pc ) ) delete pc;
}



145 名前:デフォルトの名無しさん [2008/02/08(金) 01:48:10 ]
確保していないのにdeleteするとバグるんですが対処法ありますか

146 名前:デフォルトの名無しさん [2008/02/08(金) 01:50:44 ]
単独ではつかわないでコンストラクタ、デストラクタ内で使えば安全かなあ

147 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 01:59:05 ]
void a( void** p ) {
  if( rand() %2 ){
    delete *p;
    *p = NULL;   // delete後はNULLを入れておく
  }
}

void main () {
  char*pc = NULL;    // ポインタは普通NULLで初期化しておく
  if( rand() %2 )
    new char[100];
  a(&pc);
  delete pc;      // pcがNULLなら何もしない
}

148 名前:デフォルトの名無しさん [2008/02/08(金) 01:59:41 ]
while (cin) {
...
}
という処理についてなんですが、cinって最初はとりあえずtrueになるのですか?
すると、いつfalseになるんですか?
エラーフラグがたってればfalse、それ以外はtrueになるのかな?
cinで何かデータを読み込んだ後だけtrueになるのかと思ってました。


149 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:00:03 ]
> new char[100];
pc = new char[100] でした。

150 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:04:09 ]
スタート

標準入力からデータがcinに行く

cinがtrueになる

while(cin)が評価される

というかんじなんじゃね?

151 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 02:12:09 ]
>>147
C++では汎用ポインタへのポインタって合法だったっけ。

152 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 03:44:28 ]
問題ない。

153 名前:デフォルトの名無しさん [2008/02/08(金) 03:55:20 ]
coutとfstream(適当なファイルに対してオープン済みのもの)とのそれぞれに、ほぼ同じ処理を書くのですが、
1つの関数にまとめたいと思うのですが、どうすればいいでしょうか?

void print((型が分からない) stream) {
stream << "hogehoge" << endl;
 ...
}
こんなのも考えてみたのですが、コンパイルできず、ダメでした。
template<class T>
void print(char *filename) {
T outStream;
if (filename) outStream.open(filename);
outStream << "hogehoge" << endl;
...
}
どうかよろしくお願いします。


154 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 07:25:40 ]
>>138
new ヘッダをインクルードする前に
new をマクロで置き換えてないか?



155 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 10:49:42 ]
>>153
std::ostream

156 名前:デフォルトの名無しさん mailto:sage [2008/02/08(金) 11:53:19 ]
サクラエディタのソースコードを眺めていたのですが、コメント部でよくわからない表記があります。
@param などはなんとなく想像がつくのですが、「//!<」や「/*! */」は何を意図しているのでしょうか。
どなたか教えてください。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef