- 1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.48【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1202141921/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 100 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:50:15 ]
- >>98
パソコンから取り外せば全容量使えるよ。
- 101 名前:デフォルトの名無しさん [2008/02/21(木) 21:50:59 ]
- WindowsXPです
- 102 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:53:40 ]
- じゃあタスクマネージャだな
- 103 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:54:02 ]
- >>101
毒餃子を食わす国の人ですか?
- 104 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 21:54:36 ]
- >>101
GlobalMemoryStatus で調べろ
- 105 名前:デフォルトの名無しさん [2008/02/21(木) 21:57:57 ]
- サンクス
- 106 名前:デフォルトの名無しさん [2008/02/21(木) 22:27:36 ]
- newやvectorで確保が失敗したかチェックするにはどうすればいいですか?
- 107 名前:デフォルトの名無しさん [2008/02/21(木) 22:31:16 ]
- あとメモリが少なくて、確保に時間がかかる場合、途中で止めるか、かかる時間を予測できますか?
- 108 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:32:24 ]
- VC9なのですが、SHA-256の定番なライブラリってないでしょうか?
JpegのIJGライブラリみたいなものがあると嬉しいのですが
- 109 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:32:32 ]
- >>106
長い思考の旅の後には、失敗しないからチェックは不要という結論になるよ。
- 110 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:43:28 ]
- >>106
bad_alloc 例外をつかまえる。
- 111 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:45:29 ]
- bad_alloc例外が必ず捕まえられる保障はないそうだよ。
by Sutter
- 112 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:48:48 ]
- set_new_handler
- 113 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:52:19 ]
- >>106
たくさんのレスが付くと思う。 そして、>>109にたどり着くと思う。
- 114 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 22:56:42 ]
- メモリ確保できなきゃ
大抵はそのまま異常終了するしかない事が多い。 ダウンするとマズいシステムの場合は そうも言ってられないが。
- 115 名前:デフォルトの名無しさん [2008/02/21(木) 23:19:36 ]
- ビルドのエラーについて質問です。
timeGetTime関数を呼ぶだけの関数を作成したのですが、 ビルドで以下のエラーになりました。 LNK2019: 未解決の外部シンボル __imp__timeGetTime@0 が関数 "int __cdecl MainRoutine(void)" (?MainRoutine@@YAHXZ) で参照されました。 ソースは以下になります。 #include <windows.h> #include <mmsystem.h> int MainRoutine() { DWORD dwTime; dwTime = timeGetTime(); return 0; } VC2008 Express Editionを使用しています。 他に何か設定が必要なのでしょうか?
- 116 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:20:20 ]
- ライブラリのリンクが必要。
- 117 名前:デフォルトの名無しさん [2008/02/21(木) 23:29:07 ]
- >115です。
すいません。記述漏れです。 以下の設定はすでにしていました。 「ツール」-「オプション」-「プロジェクトおよび〜」- 「VC++ディレクトリ」-「ライブラリリンク」にて、 C:\Program Files\Microsoft Platform SDK\Lib ほかのライブラリのリンクが必要なのですか? 必要な場合、どこのライブラリをリンクすればいいでしょうか?
- 118 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:30:16 ]
- それはライブラリを検索するディレクトリを指定しているだけで
リンクするライブラリを選択するオプションではない。 何をリンクすればいいかはググれ。
- 119 名前:デフォルトの名無しさん [2008/02/21(木) 23:38:58 ]
- >115です。
今は、ライブラリのリンクが出来てなかったと言うことなんで、 リンクの方法、リンクするライブラリについては、また調べてみます。 回答ありがとうございました。
- 120 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:46:57 ]
- ifやswitchってこんな風に書くのあり?
if(i==(1||2||3||4||5)) switch(i){ case (1||2||3||4||5): break; }
- 121 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:48:33 ]
- おかしくね
- 122 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:49:51 ]
- >>120
C++ で operator をオーバーライドすれば可能かもしれませんね
- 123 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 23:54:50 ]
- >>120
caseの中身は定数でよろしく
- 124 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:01:36 ]
- >>120
switch(i){ case 1: case 2: case 3: case 4: case 5: break; }
- 125 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:02:21 ]
- d caseの方は間違ってるのね
ifの方も駄目?
- 126 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:03:55 ]
- >>124
ああ、caseでbreak書かなかったらそのまま下までいくからそういう風に書いたらいいのか
- 127 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:06:12 ]
- C#では見事に禁止だな
- 128 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:07:40 ]
- >>125
文法的に間違いではないが、お前の期待する動作はしないと思う (1||2||3||4||5)は常に真となり、それとiの値が等しいかどうか だよ?これ
- 129 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:08:18 ]
- >>125
ifの方も意図しているであろう動作はしない。 ただしコンパイルは通る。警告くらい出してくれるかも知れんが・・・
- 130 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:11:14 ]
- ありがとうございます。自分でもためしてみたけど無理だった
コンパイル通ってたから上手く動いてると思ってそのままつかってたよ…
- 131 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:19:40 ]
- >>127
C#も124みたいにcaseラベルを並べるのはありだと聞いた。
- 132 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:22:16 ]
- 並べさせるくらいなら、コンマ区切りで書かせてくれてもいいのにね。
- 133 名前:デフォルトの名無しさん [2008/02/22(金) 00:27:11 ]
- クラスの定義と代入を同時にやるにはどうやればいいですか?
int a=10; のようにです
- 134 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:28:19 ]
- 「代入」 は既に宣言されている変数に対して行う操作なので
同時に出来る訳が無い。 初期化なら別だが。
- 135 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:30:45 ]
- operator を使おう
- 136 名前:デフォルトの名無しさん [2008/02/22(金) 00:30:52 ]
- 事故解決しました
- 137 名前:デフォルトの名無しさん [2008/02/22(金) 00:32:34 ]
- これでできました
int main() { class Test{ int x; public: Test (int y) {x=y;} print(){ cout<<x<<endl; } }; Test a=10; a.print(); return 0; }
- 138 名前:デフォルトの名無しさん [2008/02/22(金) 00:35:31 ]
- Test a=10;
a.print(); a=20; a.print(); もできるんですね C++はすごいですね
- 139 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:37:27 ]
- 往々にして望まない機能だけどな。
基本的に引数1つのコンストラクタには explicit つけとけ。
- 140 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:42:12 ]
- それよりも、構造体って感じの型でないクラスなのに
コピーコンストラクタとoperator =をコンパイラ任せにしているのが嫌だね。
- 141 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:43:15 ]
- コンパイラ任せに出来る時は
コンパイラ任せでいいよ。
- 142 名前:デフォルトの名無しさん [2008/02/22(金) 00:48:46 ]
- 138じゃないですが、
>>139 なんでですか? (本当に理由を知りたいです。)
- 143 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:59:34 ]
- #include <iostream>
#include <vector> class Vector { public: Vector(size_t size) : m_array(size) { } void output() const { for(std::vector<int>::const_iterator it = m_array.begin(); it != m_array.end(); ++it) { std::cout << *it << ' '; } std::cout << std::endl; } private: std::vector<int> m_array; }; void Foo(const Vector& v) { v.output(); } int main() { Foo(5); ←←←←←←← } これが直感的な挙動ではないことは分かってもらえると思う。 でも、コンパイル通るし、正常に動く。 explicit つけるとこういう時にコンパイルエラーにできる。 それでも Foo(Vector(5)); なら可だが、これは問題ないと感じてくれると思う。
- 144 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 00:59:53 ]
- >>91
どんなバグがでるのですか? 呼び出し側なにか影響でうるのですか?
- 145 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:01:23 ]
- input を変更した後に、
input が変更されていない事を前提とした処理を書いてしまうかもしれない。 あるいは、そういう処理があるにも関わらず、 それより前の地点で input を変更してしまうかもしれない。 そうなっていないか注意して探すよりは、 引数をいじらない方が良い。
- 146 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:08:46 ]
- みんな仮引数にconstって使わないんだよね。
- 147 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:09:55 ]
- 一時期付けてみたけど、
あんま意味ないと思ってやめた。
- 148 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:12:29 ]
- >>145
なるほど 別にいじること自体がやばいわけじゃなくて いじると間違い起こす原因となる可能性があるわけですね ありがとうございました
- 149 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:14:13 ]
- だって関数の定義では付けてもいいけど、宣言では付けたくないので、
コピペじゃ済まなくなる。
- 150 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:14:45 ]
- >>131
fall throughは禁止じゃなかったっけ 何かキーワードがあったと思う 情報が古いかもしれんが
- 151 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:19:06 ]
- >>150
caseが連続する場合のみOK。その他は禁止。スレ違い。
- 152 名前:デフォルトの名無しさん [2008/02/22(金) 01:19:25 ]
- >>143
ありがとうございます。 explicitは、暗黙の変換を抑制する機能なのですね。 しかしなんか上の例のコードは、すごくC++書き慣れた人な感じがしました。
- 153 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:20:21 ]
- >>150
>>124のように空のcaseラベルを並べたときはフォールスルーできる。 msdn2.microsoft.com/ja-jp/library/06tc147t.aspx スレ違いすまん。
- 154 名前:133 [2008/02/22(金) 02:00:16 ]
- 関数の引数にクラスを使いたいのですが、クラスの宣言と代入を同時にするにはどうやればいいですか
intのようにコンストラクタではできませんでした test y = f( x ); のようにです fはクラスを返します intではないです
- 155 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 02:11:42 ]
- >>154
testというのがクラスなら、testにconst test&型の引数を1つ取るコピーコンストラクタを作るんだ。
- 156 名前:デフォルトの名無しさん [2008/02/22(金) 02:14:25 ]
- サンクス
- 157 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 07:02:49 ]
- >>154
何度も言うが、それは代入じゃない。 初期化だ。 初期化の場合、= を使っていても test y = f(x); は test y(f(x)); と同義。
- 158 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 07:24:55 ]
- まったくのプログラム初心者です。
はじめににインストールする言語?をどれにするかがわかりません。 どういう意味かというと ボーランド、とかマイクロソフトのvisual studioとかどれにすればいいのかです。 有料とか無料とかいろいろありますね。 できたら将来有料ソフトを販売可能なものがいいです。 今考えているのはマイクロソフトのVC++を考えているのですが、 C++とVC++は違うとか どっかで聞いたりもしたので 初心者にはちんぷんかんぷんでわかりません。 よろしくお願いします
- 159 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 07:30:50 ]
- C++ は言語名。
VC++ は C++ を使って開発を行うためのツールの名前。
- 160 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 08:05:40 ]
- >>159
ありがとうございます。
- 161 名前:デフォルトの名無しさん [2008/02/22(金) 11:08:37 ]
- VC++ はMSがWindows用ソフトを開発するために拡張した言語ともいえる
VC++のコードはほかのものでは動かせないものが多い
- 162 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:42:07 ]
- www.xlsoft.com/jp/products/jet/index.html
このソフトを使えばJavaでもネイティブアプリケーションが作れると書いてあるのですが、そんなうまい話があるんですか? もし本当ならJavaのパフォーマンス面での不利がだいぶ改善されると思うのですが
- 163 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:45:45 ]
- ここはC/C++スレですが
- 164 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 11:57:29 ]
- システム構築売るならまだしもソフト売るのにJavaはないだろ。
VCにしとけ。
- 165 名前:デフォルトの名無しさん [2008/02/22(金) 11:59:00 ]
- perl2exeみたいなやつでは? 実行環境を圧縮してexeに詰め込む
利点としてはランタイムとかの導入がいらないだけで
- 166 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:21:11 ]
- スレ違い。ここでやれ
gcjって使ってる人います? ttp://pc11.2ch.net/test/read.cgi/tech/1046627795/l50
- 167 名前:デフォルトの名無しさん [2008/02/22(金) 12:31:13 ]
- この直し方教えてください!
IEBrowser->Document.charset="shift_jis"; error C2039: 'charset' : '_com_ptr_t<class _com_IIID<struct IDispatch,&struct __s_GUID _GUID_****> >' のメンバではありません。
- 168 名前:167 [2008/02/22(金) 12:35:30 ]
- 文字コードの変換をしたいのですが・・・
この様に定義してあります SHDocVw::IWebBrowser2Ptr IEBrowser; IEBrowser.CreateInstance( __uuidof( SHDocVw::InternetExplorer ) );
- 169 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 12:51:05 ]
- >>167
こうでは? IEBrowser->Document->charset= L"shift_jis";
- 170 名前:167 [2008/02/22(金) 12:55:40 ]
- >>169
error C2039: 'charset' : 'IDispatch' のメンバではありません。 になりました・・・
- 171 名前:167 [2008/02/22(金) 13:05:44 ]
- 文字コードの変更方法わかったら教えてもらいたいですけど
そこだけVBAスクリプトを呼び出す事にします
- 172 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:08:27 ]
- >>170
じゃあこれはどう? SHDocVw::IHTMLDocument2Ptr document = IEBrowser->Document; docment->charset = L"shift_jis";
- 173 名前:167 [2008/02/22(金) 13:13:13 ]
- だめでした
- 174 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:23:38 ]
- QueryInterface
- 175 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:33:26 ]
- 適当に書いたらやっぱダメだったか、すまん。
#import <mshtml.tlb>した上で、MSHTML::IHTMLDocument2Ptrだ。
- 176 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 13:34:40 ]
- >>174
ナントカPtr(の実態_com_ptr_t<>)のコンストラクタや代入演算子の中でQueryIntefaceが行われている。
- 177 名前:デフォルトの名無しさん [2008/02/22(金) 14:08:38 ]
- πの値は、自分で3.1415926535...とかって書くしかないでしょうか。
numeric_limits<int>::max()とか、そういう書き方はないですか?
- 178 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:13:43 ]
- #ifndef M_PI
# define M_PI 3.1415926535 #endif
- 179 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:30:07 ]
- math.hをインクルードしたらM_PIとしてdefineされてる。
計算して出したいなら4*atan(1.0);
- 180 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 14:32:27 ]
- 標準ではないのが玉に瑕。
- 181 名前:デフォルトの名無しさん [2008/02/22(金) 15:02:49 ]
- >>178-180
ありがとうございます。 #include <cmath> としてたのですが、M_PIでコンパイル通りました。
- 182 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 15:58:04 ]
- C初心者です。
実数→整数変換ですが、 double dval; char buf[80]; int ival; dval = -19.99; /* -19.99〜19.99 */ dval = dval * 100.0; sprintf(buf,"%.0f",dval); ival = atoi(buf); printf( "%f %d %d\n",dval,ival,(int)dval); /* printf( "%f %d %d\n",dval,ival,(int)ceil(dval)); */ ivalを求める場合、上記の方法が一番精度が良いのですが これ以外に方法はありますでしょうか? ceil() や floor() 使っても誤差が出てしまいます。
- 183 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:05:51 ]
- >sprintf(buf,"%.0f",dval);
それ四捨五入してるだけだぞ そんなんでいいなら ival = floor(dval * 100 + 0.5) とでもやればいい 元々 -19.99 という値自体が誤差を持ってるから、これを無くすことは出来ない printf("%.20f\n", -19.99); とかやってみればわかる 本当に誤差が嫌なら、浮動小数点を使わない、という方法しかない
- 184 名前:182 mailto:sage [2008/02/22(金) 16:12:26 ]
- >>183
早速のRESありがとう御座います。 >そんなんでいいなら ival = floor(dval * 100 + 0.5) とでもやればいい 了解です。これで行きたいと思います。 どうもありがとう御座いました。
- 185 名前:デフォルトの名無しさん [2008/02/22(金) 16:53:31 ]
- char []型の要素を破棄して動的確保できませんか? 消せなくてもいいので別のアドレスに確保できませんか?
f(char *ch){ delete ch; ch=new char[10]; strcpy(ch,"ssssssss"); } main(){ char *ce=new char[2]; f(ce); cout<<ce<<endl; char ch[]="test"; f(ch); cout<<ch<<endl; }
- 186 名前:デフォルトの名無しさん [2008/02/22(金) 16:55:19 ]
- もしくは、char *型とchar []型を判別して、書き換えられないなら始めにエラーにするのでもいいです
- 187 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 16:59:46 ]
- >>185
ごめんfで何がしたいのか分からない。 まぁ俺の第六感で回答すると、ポインタのポインタ使えばいいんじゃね
- 188 名前:デフォルトの名無しさん [2008/02/22(金) 17:05:10 ]
- char a[10];
をコード内で書き換えてたとえば100個まで使えるようにしたいんです はじめのaは破棄できなくてもいいので、a[50]とかにアクセスできるようになりませんか
- 189 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:07:46 ]
- Stringクラスの使い方でも覚えるとか
- 190 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:08:43 ]
- >>188
設計が間違ってるよ >>185 みたいにすると激しく管理が難しい事になる
- 191 名前:デフォルトの名無しさん [2008/02/22(金) 17:12:10 ]
- ポインタで文字列のアドレスが渡されたら、それが[]なのか*なのか渡された側にはわかりません
どうしたらいいですか
- 192 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:14:17 ]
- 配列サイズも渡す
- 193 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:17:53 ]
- 閃いたw
初めから1000個くらい確保しとけばいいじゃん
- 194 名前:デフォルトの名無しさん [2008/02/22(金) 17:21:28 ]
- 無理か
main(){ char ch[]="test"; char *ce=new char[20]; strcpy(ce,"ssss"); ch=ce; //ここでエラー cout<<ch<<endl; }
- 195 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:22:10 ]
- あほすぎ
- 196 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 17:29:05 ]
- >>191
呼び出し側で呼び出す関数を変える >>194 なにがしたいの?
- 197 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 18:10:41 ]
- >>194
こうすれば? main(){ char chx[]="test"; char *ch = chx; char *ce=new char[20]; strcpy(ce,"ssss"); ch=ce; //エラーなし cout<<ch<<endl; }
- 198 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 18:36:59 ]
- >>185
恐らく、引数でもらった文字列を元に新な文字列を返そうと考えてるんだろうけど、 そうしたいのなら、 char* func(const char* str) { char* s = new char[ほにゃらら]; ほげほげ return s; } とした方が良い。 そもそも char ch[] = "test"; の ch は配列の先頭のアドレスを返す「定数」なんだから、newで確保した領域を割り当てられるわけないよ。
- 199 名前:デフォルトの名無しさん [2008/02/22(金) 19:05:33 ]
- レスありがとうございます
同じような質問なんですが、*chが確保されていてもいなくても、deleteするにはどうすればいいですか? 確保していないと実行時にエラーになります
- 200 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 19:08:14 ]
- 言ってる事がよく分からんが、こういうこと?
if( ch )delete ch;
|

|