08/09/15 11:53:18
>>248
本当にメッセージそれだけ?
251:デフォルトの名無しさん
08/09/15 11:57:28
>>250
今はほかのパソコンにもVC++を入れてしまっているので確認はできないんですけど、もう少し長かったような気がします。
VC++を入れてない人のパソコンでも何かインストールをしなくても普通のアプリケーションみたいに実行できるようにしたいんです。
252:デフォルトの名無しさん
08/09/15 12:01:39
>>251
1. VC++のバージョンにあうランタイムライブラリをインストールさせる。
URLリンク(www.microsoft.com)
URLリンク(www.microsoft.com)
2. msvcr90.dllなどをMicrosoft.VC90.CRT.manifestなどと共にEXEと同じフォルダに置く。
253:デフォルトの名無しさん
08/09/15 12:22:30
>>251
基本的によく分からないエラーが出たら、
スクリーンショットを撮る事。
そのプログラムのプロジェクトプロパティの
共通言語ランタイムサポートが「使用しない」以外なら
.NET Framework Runtime をインストールする必要がある。
MFCの使用が「共有DLLで~」なら「スタティックライブラリで~」に。
構成プロパティ - C/C++のランタイムライブラリが「/MD」なら「/MT」に。
254:242
08/09/15 12:26:45
調べたらDebugフォルダの中の実行ファイルをただほかのPCに移動するだけでは、駄目らしいということがわかりました。
ソリューション構成をReleaseにしてコンパイルしたものを、ほかのPCに移動して実行すればいいんでしょうか。
今はそばにVC++が入ってないPCがないので確認ができないんですけど、それでいいのでしょうか。
>>253
今はエラーを確認できないのでスクリーンショットも撮れません。
255:デフォルトの名無しさん
08/09/15 12:30:06
pow DOMAIN errorのメッセージダイアログを出ないようにするにはどうすればいいですか
256:デフォルトの名無しさん
08/09/15 12:31:07
>>254
>それでいいのでしょうか。
お前、>>252-253を読んだ上で言ってるの?
257:デフォルトの名無しさん
08/09/15 12:51:00
STLSOFTが良さそう 日本語の解説すくない だれか教えて。 Windowsに限ればboostよりいい気がしてる。
URLリンク(www.stlsoft.org)<)).
ATLSTL (URLリンク(atlstl.org)<)).
.netSTL (URLリンク(dotnetstl.org)<)).
MFCSTL (URLリンク(mfcstl.org)<))
WinSTL (URLリンク(winstl.org)<)
258:デフォルトの名無しさん
08/09/15 12:51:32
>>255
どういうソースで出るんだ?
259:デフォルトの名無しさん
08/09/15 12:53:36
>>252
できればほかのパソコンに何かインストールする方法は避けたいです。
>2. msvcr90.dllなどをMicrosoft.VC90.CRT.manifestなどと共にEXEと同じフォルダに置く。
よくわかりませんでした。もう少し詳しく教えてください。
>>253
共通言語ランタイムサポートを使用しないになっています。
>MFCの使用が「共有DLLで~」なら「スタティックライブラリで~」に。
>
>構成プロパティ - C/C++のランタイムライブラリが「/MD」なら「/MT」に。
この設定でコンパイルすると
1>MSVCRT.lib(wcrtexew.obj) : error LNK2019: 未解決の外部シンボル _wWinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\Documents and Settings\****\My Documents\Visual Studio 2008\Projects\Othello\Debug\Othello.exe : fatal error LNK1120: 外部参照 1 が未解決です。
と、なってコンパイルできません。
>>256
調べてる間にレスがきてしまったので失礼しました。
260:デフォルトの名無しさん
08/09/15 12:55:16
>>257
自分で翻訳なり、ソース解析なり出来ないなら諦めた方が良い
問題が起きたとき、自力で解決出来んだろう
261:デフォルトの名無しさん
08/09/15 13:02:02
>>259
main() で始まるコンソールプログラムなのに コンソールプロジェクトになっていないんじゃ・・・
WinMain() で始まる windows プログラムなのに、
そのエラーとなると tchar.h あたりの UNICODE 関連が怪しい
262:デフォルトの名無しさん
08/09/15 13:02:51
>>259
「/MDd」を「/MT」にしてないか?
「/MDd」なら「/MTd」だぞ。MD→MTなんだから。
あとプロジェクトプロパティの左上に構成ってあるだろ。
デバッグ版とリリース版で設定が分かれてるから、それぞれ設定を変えること。
まぁ、リリース版だけでも良いと思うけど。
263:デフォルトの名無しさん
08/09/15 13:06:10
>>261 忘れて。 オプション変えたらリンク通らなくなっただけじゃ違うわ
264:デフォルトの名無しさん
08/09/15 14:03:24
2chでスレたてて盛り上げていこうぜ > STLport
日本語の解説サイトも作る
265:デフォルトの名無しさん
08/09/15 14:04:29
STLport > STLsoft ね。
266:デフォルトの名無しさん
08/09/15 14:29:55
>>258
こんな感じだそうです。
pow()は底 の乗数 乗の計算を行って返す関数である。底 がゼロで乗数 がゼロ以下の場合にはdomain errorが発生する。また、底 が負で乗数 が小数の場合にもdomain errorになる。計算結果がオーバーフローする場合はrange errorが発生する。
267:266
08/09/15 14:30:56
追記:その状態になってもダイアログを出したくないのです
268:デフォルトの名無しさん
08/09/15 14:54:55
double d;
d = pow(0.0, -2.1);
std::cout << d << std::endl;
d = pow(-2.1, 0.1);
std::cout << d << std::endl;
d = pow(10e10, 100);
std::cout << d << std::endl;
---------------
1.#INF
-1.#IND
1.#INF
再現出来ないな。何が違うんだろう。
269:デフォルトの名無しさん
08/09/15 15:01:17
ウィンドウプロジェクトにするとなります。
270:デフォルトの名無しさん
08/09/15 16:19:19
stlの質問です。
下記のプログラムを実行するとhoge関数が呼ばれて戻ってきた時には、TESTメンバのstrの領域はデストラクタで、
解放されてしまってます。この場合は、main()の最後でlistのstrを解放するしかないのでしょうか?
もっと別のやり方があれば教えて下さい。宜しくお願いします。
#include <string>
#include <list>
struct TEST {
std::string *str;
TEST() : str(NULL) {}
~TEST() { delete[] str; }
};
void hoge(std::list<TEST> &list)
{
TEST test;
test.str = new std::string[10];
list.push_back(test);
}
int main()
{
std::list<TEST> list;
hoge(list);
// list.str不適切なポインタ
return 0;
}
271:デフォルトの名無しさん
08/09/15 17:02:15
C++で数値計算を行なっていて、
計算結果を1ステップごとにfstream使ってファイルhoge.txtに出力していました。
上記とは一切関係ない部分のバグを取って再度実行したら、
ファイルへの出力が途中からされなくなってしまいました。
1000回計算するとしたら380回から出力されません。ただ、coutではきちんと値が表示されます。
出力されなくなった後もプ゚ログラム自体は動き続けているためエラーが出ず、原因がわかりません。
このような症状の場合、どのような原因が考えられるか教えていただけませんか?
272:デフォルトの名無しさん
08/09/15 17:12:59
・ストレージの空き容量が不足している。
273:デフォルトの名無しさん
08/09/15 17:20:56
・ストリームをフラッシュしていない(勿論、クローズしていない)。
274:デフォルトの名無しさん
08/09/15 17:23:12
そんなわけ・・・・マジだ、吊ってきます orz
エラーを出す方法とかありますか?
275:デフォルトの名無しさん
08/09/15 17:23:27
380回のあたりで異常な文字列を吐いてしまって
fstreamがエラー状態になっているとか。
276:デフォルトの名無しさん
08/09/15 17:24:33
>>270
TESTにきちんとコピーコンストラクタとoperator =を設ける。
277:271
08/09/15 17:25:52
>>274は>>272に対してのレスです。
申し訳ない
278:デフォルトの名無しさん
08/09/15 17:34:40
of.exceptions(badbit| failbit)としておけば、例外投げてくれる。
例外が嫌なら書き込み後にof.bad()とかof.fail()とか見ればいい。
279:242
08/09/15 17:40:36
ソリューション構成をReleaseにしてみたら知り合いに送ったところ実行できたそうです。
皆様ありがとうございます。
280:デフォルトの名無しさん
08/09/15 18:53:59
>>270
ポインタのメンバをディープコピーするTESTのコピーコンストラクタをきちんと書くこと。
281:デフォルトの名無しさん
08/09/16 00:20:58
このプログラムで値が変わるのはなぜですか?
main(){
char a[]="マルチバイト文字列 mbs の sz 文字分をワイド文字列に変換します。";
wchar_t b[300];
cout<<strlen(a)<<endl;
MultiByteToWideChar(CP_ACP, 0, a, n, b, 300);
cout<<wcslen(b)<<endl;
}
282:デフォルトの名無しさん
08/09/16 00:28:54
自己解決しました
283:デフォルトの名無しさん
08/09/16 00:46:12
自己解決しませんでした。 値が変わります? なぜですか?
int m,n;
char a[]="マル"; wchar_t b[300];
n=strlen(a); mbstowcs(b,a,n);
m=wcslen(b); wcstombs(a,b,m);
cout<<n<<" "<<m<<" "<<strlen(a)<<endl;
284:デフォルトの名無しさん
08/09/16 00:50:03
自己解決しました
285:デフォルトの名無しさん
08/09/16 01:08:59
chatとw_charの変換はWindows APIのほうが鈍いようです。
#include <windows.h>
#include <time.h>
#include <iostream>
using namespace std;
main(){
int m,n,r,k;
char a[500]="マクロの動作は、有効になっているコンパイラ ディレクティブによって異なる。変換元と変換先の型が同じ場合は変換は行われない。コンパイラ ディレクティブでは、T および OLE を次のように変換する。";
wchar_t b[500];
n=strlen(a); mbstowcs(b,a,n+1);
m=wcslen(b); wcstombs(a,b,m+1);
int cl=clock();
for(k=0;k<1000000;k++){
r=MultiByteToWideChar(CP_ACP, 0, a, n, b, 500); b[r]=0;
r=WideCharToMultiByte(CP_ACP, 0, b, m, a, 500, NULL, NULL ); a[r]=0;}
cl=clock()-cl; cout<<cl<<endl;
for(k=0;k<1000000;k++){
mbstowcs(b,a,n+1); wcstombs(a,b,m+1);}
cl=clock()-cl; cout<<cl<<endl;}
286:デフォルトの名無しさん
08/09/16 01:34:51
MultiByteToWideCharの使い方が間違っているからです
287:デフォルトの名無しさん
08/09/16 01:44:31
正しい使い方はどうすればできますか
288:デフォルトの名無しさん
08/09/16 10:03:56
MSDNをよく読む
289:デフォルトの名無しさん
08/09/16 12:28:05
サイズが決まっていないchar*型の文字列が10個ていどあって
一致する文字が存在するか見つける高速な方法はSTLのmapですか。
一番速い方法教えてください。 あと元データは削除、追加可能でお願いします。
290:デフォルトの名無しさん
08/09/16 12:32:39
Double-Arrayていうのがありますが、単語数は少ないので、そんな最新技術はいらないし、速く見つかる方法がいいです。
Double-Array は Trie を表現するためのデータ構造です. ハッシュ木, デジタルトライ, パトリシア木, Suffix Array による
擬似 Trieといった 他の Trie の実装に比べ高速に動作します.
オリジナル の Double-Arrayは, 動的に key の追加削除を行えるような枠組ですが,
Darts は ソート済の辞書を一括してDouble-Array に変換することに機能を絞っています.
URLリンク(chasen.org)
291:デフォルトの名無しさん
08/09/16 15:49:12
hashmapはそれほど速くないです。
#include <windows.h>
#include <iostream>
#include <map>
#include <hash_map>
#include <string>
#include <vector>
using namespace std;
map<string,int> stlmap;
hash_map<string,int> hashmap;
vector<string> vec;
string strgen(){ int R=10+rand()%10; string str=""; for(int j = 0; j < R; j++) str+=(char)(97+rand()%3); return str; }
int main() {
int i,cl; pair<string,int> p;
for(i = 0; i < 100; i++) { p = make_pair(strgen(),i); stlmap.insert(p);hashmap.insert(p);vec.push_back(p.first);}
int n=0; string searchword(strgen());
#define N 500000
// 空のループ
cl=timeGetTime();for(i = 0; i < N; i++) ;cl=timeGetTime()-cl; cout<<cl<<endl;
// STLmap
cl=timeGetTime(); for(i = 0; i < N; i++) stlmap.find(searchword); cl=timeGetTime()-cl; cout<<cl<<endl;
// STLport_hashmap
cl=timeGetTime(); for(i = 0; i < N; i++) hashmap.find(searchword); cl=timeGetTime()-cl; cout<<cl<<endl;
// Vector
cl=timeGetTime();
for(i = 0; i < N; i++)for(int j=0;j<vec.size();j++)if(vec[j]==searchword)break;
cl=timeGetTime()-cl; cout<<cl<<endl;}
292:十分速いじゃん…
08/09/16 16:25:57
#include <iostream>
#include <map>
#include <stlport/hash_map>
#include <string>
#include <vector>
#include <boost/progress.hpp>
using namespace std;
map<string,int> stlmap; hash_map<string,int> hashmap; vector<string> vec;
string strgen(){ int R=10+rand()%10; string str=""; for(int j = 0; j < R; j++) str+=(char)(97+rand()%3); return str; }
int main() {
int i,cl; pair<string,int> p;
for(i = 0; i < 100; i++) { p = make_pair(strgen(),i); stlmap.insert(p);hashmap.insert(p);vec.push_back(p.first);}
#define BEGIN { boost::progress_timer t;
#define END }
int n=0; string searchword(strgen());
#define N 500000
BEGIN;for(i = 0; i < N; i++) ;END; // 空のループ
BEGIN; for(i = 0; i < N; i++) stlmap.find(searchword); END; // STLmap
BEGIN; for(i = 0; i < N; i++) hashmap.find(searchword); END; // STLport_hashmap
BEGIN; // Vector
for(i = 0; i < N; i++)for(int j=0;j<vec.size();j++)if(vec[j]==searchword)break; END;}
g++ hashmap.cxx -I /usr/include/stlport/ -lstlport -O2
% ./a.out |tr "\n" " "
0.00 s
0.66 s
0.17 s
4.95 s
293:デフォルトの名無しさん
08/09/16 16:35:30
訂正: -O2 -> -O0
294:デフォルトの名無しさん
08/09/16 17:15:34
unordred_mapのがいいよ多分
295:デフォルトの名無しさん
08/09/16 17:35:55
unordred_mapきはなかなかですね。
#include <iostream>
#include <map>
#include <hash_map>
#include <string>
#include <vector>
#include <unordered_map>
#include <time.h>
using namespace std;
map<string,int> stlmap;
hash_map<string,int> hashmap;
tr1::unordered_map<string,int> unorderedmap;
string strgen(){ int R=10+rand()%10; string str=""; for(int j = 0; j < R; j++){int r=rand(); str+=(char)(97+r&3)+(char)(97+(r>>2)&3);} return str; }
int main() {
int i,cl; pair<string,int> p;
for(i = 0; i < 10000; i++) { p = make_pair(strgen(),i); stlmap.insert(p);hashmap.insert(p);unorderedmap.insert(p);}
int n=0; string searchword(strgen());
#define N 500000
// 空のループ
cl=clock();for(i = 0; i < N; i++) ;cl=clock()-cl; cout<<cl<<endl;
// STLmap
cl=clock(); for(i = 0; i < N; i++) stlmap.find(searchword); cl=clock()-cl; cout<<cl<<endl;
// STLport_hashmap
cl=clock(); for(i = 0; i < N; i++) hashmap.find(searchword); cl=clock()-cl; cout<<cl<<endl;
//unorderedmap
cl=clock(); for(i = 0; i < N; i++) unorderedmap.find(searchword); cl=clock()-cl; cout<<cl<<endl;}
296:デフォルトの名無しさん
08/09/16 18:02:46
GoogleCode sparse_hash_map GoogleCode dense_hash_mapのインストール方法が判りません。 教えてください。
ここのコードがコンパイルしたいです。 BCC2009かVC++2008のやり方判りたいです。
URLリンク(articles.blog79.fc2.com)
297:デフォルトの名無しさん
08/09/16 18:16:27
なんにもいれずにそのコードを実行しようとしてるようなレベルですか?
298:デフォルトの名無しさん
08/09/16 19:07:44
VC2008のhash_mapはstdext名前空間に入ってるのか
コンパイルできずにしばらく悩んだ
それにしてもDinkumwareは遅い・・・
299:デフォルトの名無しさん
08/09/16 23:05:05
>>298
SP1当てればstd::tr1::unordered_mapも使えるよ。
もちろん性能は変わらないだろうけど。
300:デフォルトの名無しさん
08/09/16 23:59:36
ある変数に連動して、複数のvectorのサイズを変更できますか?
自分で増減させると面倒です。
301:デフォルトの名無しさん
08/09/17 00:02:40
自己解決しました。 tasu(); hiku(); という関数を作ってそこで処理することにしました。
302:デフォルトの名無しさん
08/09/17 00:13:45
関数って良いよね……
造形が凄くソソるよね……
303:デフォルトの名無しさん
08/09/17 00:19:27
free(normal) functionより
major(static) function objectの方がそそります^q^
304:デフォルトの名無しさん
08/09/17 00:34:32
もっと俗っぽくresult_ofよりdecltypeのほうが欲しいな
305:デフォルトの名無しさん
08/09/18 02:44:47
a,b,c・・・は0に近い値とし、x,y,z・・・は自然数とします。
このとき、(1+a)^x (1+b)^y (1+c)^z ・・・・の(x+y+z+・・・)乗根を求めたいです。
どのように計算するのが速いでしょうか? 100項目程度あるとします。
306:デフォルトの名無しさん
08/09/18 02:47:04
つTaylor展開の低次の項
307:デフォルトの名無しさん
08/09/18 02:59:26
log経由で計算するのが速いと思うのですが・・・
>>306 C++のソース教えてください
308:デフォルトの名無しさん
08/09/18 03:02:51
2つの場合に限定してたとえば (1+a)^x (1+b)^y の(x+y)乗根 をRとおくと
(x+y)logR=xlog(1+a)+ylog(1+b)となり、logの計算量がどの位かかるかってことです。
309:デフォルトの名無しさん
08/09/18 03:23:15
>>307
ソースはめんどくさい
x+y+z+... = Sとおくと、答えはおよそ1+(ax+by+cz+...)/S
a<<1の時の近似式(1+a)^x=1+axを使って、a,b,c,...の1次の項だけ取り出すとこうなる
logとか使うまでもない
310:デフォルトの名無しさん
08/09/18 03:23:31
POWよりLOGのほうが速かったです。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 200000
main(){
int n, *a=new int[N];
float *x=new float[N];
for(n=0;n<N;n++){ a[n]=rand(); x[n]=(float)(a[n]&255)/1024;}
double kei=0; for(n=0;n<N;n++) kei+=a[n];
double s=1; int cl=clock();
for(n=0;n<N;n++)s*=pow(1.0+a[n],x[n]/kei); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++)s+=x[n]*log(1+a[n]); s/=kei; s=exp(s); cl=clock()-cl;
printf("%g %d\n",s,cl);
}
311:デフォルトの名無しさん
08/09/18 03:28:26
>>309
トンクス 教えてもらったものを付け加えましたが、値がかなり違っています。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 200000
main(){
int n, *a=new int[N];
float *x=new float[N];
for(n=0;n<N;n++){ a[n]=rand(); x[n]=(float)(a[n]&255)/1024;}
double kei=0; for(n=0;n<N;n++) kei+=a[n];
double s=1; int cl=clock();
for(n=0;n<N;n++)s*=pow(1.0+a[n],x[n]/kei); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++)s+=x[n]*log(1+a[n]); s/=kei; s=exp(s); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++) s+=a[n]*x[n]; s=1 + s/kei; cl=clock()-cl;
printf("%g %d\n",s,cl);
}
312:デフォルトの名無しさん
08/09/18 03:29:33
はじめとaとxの関係が違っているところが原因かもしれません 見直してきます
313:デフォルトの名無しさん
08/09/18 03:34:13
誤差は大体、max(a[n])^2*nくらいで抑えられるはず
314:デフォルトの名無しさん
08/09/18 03:42:10
あるていど近づきました。 aとxが逆になっていました。
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 200000
main(){
int n, *a=new int[N];
float *x=new float[N];
for(n=0;n<N;n++){ a[n]=rand(); x[n]=(float)(a[n]&255)/1024;}
double kei=0; for(n=0;n<N;n++) kei+=a[n];
double s=1; int cl=clock();
for(n=0;n<N;n++)s*=pow(1.0+x[n],a[n]/kei); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++)s+=a[n]*log(1+x[n]); s/=kei; s=exp(s); cl=clock()-cl;
printf("%g %d\n",s,cl);
s=0; cl=clock();
for(n=0;n<N;n++) s+=a[n]*x[n]; s=1 + s/kei; cl=clock()-cl;
printf("%g %d\n",s,cl);
}
315:デフォルトの名無しさん
08/09/18 03:47:04
しかし、おかしい点があります。 教えてもらった式は、小さい項を無視しているので
値が小さくなるはずですが、計算結果が他より大きいです。
あと、(1+A) (1+B) (1+C) ・・・のS乗根は、なぜ上のような式になりますか?
Aの値は1より大きいかも知れないですが・・・すると高次の項のほうが大きいかもしれません。
(Aはaxなどです。)
316:デフォルトの名無しさん
08/09/18 03:48:25
というか、100項目程度の話じゃなかったのか?
N=200000でやったら、そりゃ誤差でかくなるの当たり前
317:デフォルトの名無しさん
08/09/18 03:51:31
要するに求めるのは(1+a)^(x/S)(1+b)^(y/S)...≒(1+ax/S)(1+by/S)...≒1+ax/S+by/S+...
a,b,...<<1なんだから、ax/S,by/,...S<<1だよな
318:デフォルトの名無しさん
08/09/18 03:54:25
トンクス そういうことですか わかりました
319:デフォルトの名無しさん
08/09/18 13:14:45
質問です。 1バイト文字列とwchar_t文字列 (特にwchar_t型文字で可)はどのように
変換できますか? 自作できますか?
320:デフォルトの名無しさん
08/09/18 13:18:48
>>319
wchar_tの文字コードは処理系依存であって、変換はcharの文字コードとwchar_tの文字コードを明確に示してくれないと答えようがない。
とりあえず使ってるコンパイラから書くってのはどう?
321:デフォルトの名無しさん
08/09/18 13:20:55
VC++2008、BCC2009でおねがいします。
322:デフォルトの名無しさん
08/09/18 13:26:38
すみません。なるべく速く変換したかったのですが、いい方法が自分で判りました。
すべての一語を標準関数で求めておいて、配列にいれておくという方法です。
323:デフォルトの名無しさん
08/09/18 13:29:33
>>320
文字列を記録している文字コードにも依存しますか?
SJIS、EUCなど、それぞれで変換関数は変わりますか?
324:デフォルトの名無しさん
08/09/18 13:31:57
コンパイラのフォルダを検索しましたが、wcstombsのコードはみつかりませんでした。 本体はlibになっているとおもいます。
325:デフォルトの名無しさん
08/09/18 13:38:18
かなり簡単であるとおもいました。
wchar_t → charはこれでいいみたいです。
wctomb(char *s, wchar_t wc)
{
*s = (char)wc;
}
URLリンク(libc.blog47.fc2.com)
326:デフォルトの名無しさん
08/09/18 13:42:17
またまたご冗談を
327:デフォルトの名無しさん
08/09/18 13:58:54
下記のようなプログラムで、どのように記述すれば、正常に動作するのでしょうか?
やりたいことは、gushtUpdataAreaが配列であり、gulngUpdataAddressの示すアドレスに対してオフセットしたアドレスにgushtUpdataAreaの中身をコピーするというものです。
volatile static u_short *pushtWrAdr;
volatile static u_short *pushtRdAdr;
volatile static u_long ulngAdr;
u_long ulngI;
ulngAdr = (gulngUpdataAddress & 0x0fffffff) + 0x0c800000;
pushtRdAdr = gushtUpdataArea;
pushtWrAdr = (u_long *)ulngAdr;
for(ulngI = 0; ulngI < gulngUpdataDataCount; ulngI++ ){
*pushtWrAdr++ = *pushtRdAdr++;
}
pushtWrAdr = (u_long *)ulngAdr;の部分の記述が悪いと思うのですが、どうすればいいでしょうか?
328:デフォルトの名無しさん
08/09/18 14:10:06
>>327
コンパイルできてる?
gulngUpdataAddressの型が気になる。
329:デフォルトの名無しさん
08/09/18 14:13:42
memcpy(reinterpret_cast<char*>(gulngUpdataAddress) + オフセット量, gushtUpdataArea, sizeof(gushtUpdataArea));
330:デフォルトの名無しさん
08/09/18 14:14:37
結果が変です。こうでます。 なぜですか?
a[] no size = 3
65 130 160
b[] no size = 3
65 130 160
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
unsigned char a[]="Aあ";
wchar_t b[10];
printf("a[] no size = %d\n",strlen(a));
for(int n=0;b[n]!=0;n++) printf("%d ",a[n]);
mbstowcs(b,a,strlen(a)+1);
printf("\n\nb[] no size = %d\n",wcslen(b));
for(int n=0;b[n]!=0;n++) printf("%d ",b[n]);
}
331:デフォルトの名無しさん
08/09/18 14:18:48
mbstowcsという関数のバグと思います。
これはなんの変換もしていないみたいです。
BCC2009です。
332:デフォルトの名無しさん
08/09/18 14:19:29
ロケール設定してないからだろ
333:デフォルトの名無しさん
08/09/18 14:28:55
いい状態になりました
#include <iostream>
#include <locale.h>
using namespace std;
main(){
setlocale(LC_ALL, "japanese");
unsigned char a[]="Aあ"; wchar_t b[10];
printf("a[] no size = %d\n",strlen(a));
for(int n=0;a[n]!=0;n++) printf("%d ",a[n]);
mbstowcs(b,a,strlen(a)+1);
printf("\n\nb[] no size = %d\n",wcslen(b));
for(int n=0;b[n]!=0;n++) printf("%d ",b[n]);
}
334:デフォルトの名無しさん
08/09/18 16:43:57
while(true) {
for(int i=0; i < 10; i++)
;
}
上のやつってwhileが回っている間int型の変数分のメモリをどんどん食っていく?
開放せん?
335:デフォルトの名無しさん
08/09/18 16:46:52
ローカル変数は有効範囲をすぎると無くなります
336:デフォルトの名無しさん
08/09/18 16:48:58
ファイルを指定すると更新日を表示するプログラム。
VCで動いてたコードをBCCに持ってきたら動かない現象が発生しました。
_fstatで0が返ってくるのに中身がちゃんと入ってないみたいです。
URLリンク(up01.ayame.jp)
あれこれ弄ってみたけどうまくいかないorz
337:デフォルトの名無しさん
08/09/18 17:45:00
>>336
先頭にアンダーラインが付いてる関数は基本的に移植性がない。
BCCではPOSIX準拠の fstat() を代わりに提供している。
URLリンク(www.linux.or.jp)
338:デフォルトの名無しさん
08/09/18 17:50:16
コンパイラ限定の命令は使わないようにしよう
WinならAPIでいいだろう
無理なら、boostとかから探すとか
339:デフォルトの名無しさん
08/09/18 17:55:29
BCC って SEH の __try と __finary を実装しているのだろうか?
まず表面化することないだろうけどね Win32例外
340:デフォルトの名無しさん
08/09/18 18:03:06
>>339
__tryは実装していない。__finallyのみ実装しているが
これは__tryに対応するものではない。
341:デフォルトの名無しさん
08/09/18 18:07:07
>>340
ありがとー
WinAPI だからといって必ずしも全て利用可能ではない ってことか
ま、SEHはかなり特殊だから仕方ない部分ではあるな
342:336
08/09/18 18:22:33
>>337,338
stract _stat → stract stat
_fstat() → fstat()
に変更したらBCCでも問題なく動きました。ありがとうございます。
本業はマイコン/ラダー屋なのもあって、こういった部分はあまり気にする機会がなく勉強になりました。
Boost覗いてみました。
C++はBCBでも殆どC記述で組むような状態でオブジェクト指向が身についてないので
サンプルを見ながら少しずつ導入していこうと思います。
343:デフォルトの名無しさん
08/09/18 19:12:50
インクルードについて教えてください。
あるサンプルソースコードを入手して、
~~.slnを実行して、デバッグしたら動きました。
ファイル入出力をしようと思って、
メイン関数が書いてある.cファイルで#include <iostream>とすると、
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(35) : error C2059: 構文エラー : ':'
1>c:\program files\microsoft visual studio 8\vc\include\cstdio(36) : error C2143: 構文エラー : '{' が ':' の前にありません。
が大量に出てきてしまいました。
インクルードしただけです。
何がいけなかったのでしょうか?
344:デフォルトの名無しさん
08/09/18 19:16:53
cppにする
345:345
08/09/18 19:32:12
344さん、ありがとうございます。解決しました。
346:デフォルトの名無しさん
08/09/18 20:55:40
親クラス
┣親クラス及び全ての子クラスで使うデバッグ用クラス
┣子クラス
┣子クラス
・
・以下略
・
┗子クラス
┗子クラス
という構成なんですが、子クラスがデバッグクラスにアクセスする、定石のような方法ってどういうのがありますか?
今自分がやっているやり方は、子クラスをnewで作成した後に、デバッグクラスのポインタをchildcls->SetDebugCls( cls )みたいな感じで渡しています。
しかしそれだと、全ての子クラスにセットしなくてはならず、非常に手間がかかっています。
実際はデバッグクラス以外にも、全ての子クラスで使いたいクラスが数個あります。
良い方法があったら教えてください
347:デフォルトの名無しさん
08/09/18 21:13:31
単一のデバッグクラスのインスタンスを子クラスで共有するの?
348:346
08/09/18 21:25:09
>>347
はい。全ての子クラスで1つのデバッグクラスを操作したいのです。
デバッグでそれぞれのクラスのデータを集計し、統計のようなものを出したいデバッグクラスなので、単一の方向でお願いします。
349:デフォルトの名無しさん
08/09/18 21:32:10
基底クラスのインナークラスとしてデバッグクラスを記述して、
基底クラスがそのデバッグクラスを包含するのじゃ駄目なの?
350:デフォルトの名無しさん
08/09/18 22:39:51
デバッグクラスをグローバルにすればいいだけじゃないの?
それかシングルトン
351:デフォルトの名無しさん
08/09/18 22:58:27
俺もグローバルで良いと思うけど。
まぁグローバル変数が嫌なら、
デバッグクラスかそれへのポインタの
staticなメンバ変数でも用意すれば良いんじゃね?
352:デフォルトの名無しさん
08/09/18 23:12:31
流れが分からん
デバッグクラスが派生クラスにかかわらず単一なのは分かった
そのインスタンスは1個だけ?
それとも各インスタンスにつき1個ずつ?
いずれにしてもデバッグクラスを基底クラスの内部クラスとして定義して、
基底クラスの通常のメンバなり、静的メンバなりにそのデバッグクラスのインスタンスを持たせればいいと思うが
353:デフォルトの名無しさん
08/09/18 23:27:15
親クラスにstaticで持たせるのが正解の気がする
まだエスパー歴が浅いから間違ってるかもしれんが
354:デフォルトの名無しさん
08/09/19 00:36:34
文字の上下4ビットを入れ替える関数(RevChr)を作成しなさい。
ただし、RevChr関数の命令は1行で書かなくてはいけません。←ここ重要!
できた人から、提出するように。
って問題だされたんだけど。
355:デフォルトの名無しさん
08/09/19 00:43:55
>>354
強引にやってみた。アホだ、俺。
(char>>4 + char<<4)
356:デフォルトの名無しさん
08/09/19 01:42:15
優先順位・・・
357:デフォルトの名無しさん
08/09/19 02:28:18
319だけど、wcharをcharに変換する速度は、
WideCharToMultiByte 250ms
wcstombs 1720ms
あらかじめ計算しておいた配列を使う 2170ms
となって圧倒的にwinAPIが速かったです。 前にローケル設定しなくてwcstombsが速いとか間違えを書きました。
358:デフォルトの名無しさん
08/09/19 03:58:49
>>309
その後、実際につかう数字で計算してみたところ、3次の項までは必要となりました。
しかし、logで計算するより5倍は速いので助かりました。
359:デフォルトの名無しさん
08/09/19 09:39:44
for_each を使って、int型の配列 v の集計をしなさいという問題なので、
class sum
{
int total;
public:
sum() : total(0) { }
void operator()(int i)
{ total += i; }
int get()
{ return total; }
};
sum s;
s = for_each(v.begin(), v.end(), s);
としたのですが、代入しなければならないことが気に入りません。
for_each<vector<int>::iterator, sum&>
(v.begin(), v.end(), s)
とすれば出来たのですが、やっぱり何か違う気がします。
何かいい表現方法は無いでしょうか?
360:デフォルトの名無しさん
08/09/19 10:23:41
std::for_each(v.begin(), v.end(), std::bind1st(std::mem_fun(&sum::operator ()), &s));
なんで代入したくないのか知らんが、↓のように書いたほうがシンプルでいいと思うけど。
sum s = for_each(v.begin(), v.end(), sum());
361:デフォルトの名無しさん
08/09/19 11:01:51
なんでsumを使うか知らないが、↓のように書いたほうがスンプルでいいと思うけど。
int sum = std::accumulate(v.begin(), v.end(), 0, std::plus<int>());
362:デフォルトの名無しさん
08/09/19 11:28:36
>for_each を使って、int型の配列 v の集計をしなさいという問題なので、
363:デフォルトの名無しさん
08/09/19 11:30:31
>>361
for_each を使って、集計をしなさい
364:デフォルトの名無しさん
08/09/19 11:37:37
そうですかごめんなさい早漏にて候
365:デフォルトの名無しさん
08/09/19 11:51:24
>>359
TR1を使えば以下のようにできる。
std::for_each(v.begin(), v.end(), std::tr1::ref(s) ) ;
ただし、sumを次のように変更する必要がある。
class sum
{
public :
typedef void result_type ;//ネストされたresult_typeという型で、関数オブジェクトの戻り値の型を表す
//省略
} ;
あるいは、unary_functionを継承すること。
366:デフォルトの名無しさん
08/09/19 12:02:09
VC2008でマリオもどきを作ろうとしてるんですが、↓のソース(関係無さそうなメソッドとかは省略してます)をコンパイルすると
>v:\projects\mario\player.cpp(8) : error C2511: 'Player::Player(int,int,pleyer_type)' : オーバーロードされたメンバ関数が 'Player' にありません。
> v:\projects\mario\player.h(8) : 'Player' の宣言を確認してください。
となります。どこがおかしいのでしょうか?(見づらい質問でごめんなさい)
//Player.h
#include "Characters.h"
class Player : public Characters{
private:
enum player_type ptype;
public:
Player(void);
Player(int x,int y,enum player_type type);
};
//Player.cpp
#include "Player.h"
Player::Player(void){
this->x = 1;
this->y = 1;
this->ptype = PTYPE_NOM;
}
Player::Player(int x,int y,enum pleyer_type type){
this->x = x;
this->y = y;
this->ptype = type;
}
//Characters.h
class Characters{
enum char_type ctype;
public:
Characters(void);
Characters(int x,int y,enum char_type cp);
};
367:デフォルトの名無しさん
08/09/19 12:12:44
>>366
× pleyer_type
○ player_type
ってことだと思うよ
368:デフォルトの名無しさん
08/09/19 12:15:56
……死にたいorz
宣言と定義が違うって事だったんですか、回答有り難うございました
369:デフォルトの名無しさん
08/09/19 12:33:35
>>359
int s = for_each(v.begin(),v.end(),sum()).get();
370:359
08/09/19 12:41:58
みなさん、ありがとうございました。
>>365が
いいと思い、(自分の処理系ではTR1が使えないので)boost::refでやってみたら、
> error C2064: 1 引数を取り込む関数には評価されません。
と出て、ダメでした。
TR1とboostはほとんど一緒と聞いていたのに残念でした。
371:デフォルトの名無しさん
08/09/19 13:01:28
>>370
TR1は、確かにBoostを念頭においているとはいえ、より考えられている。
というのも、Boostは単にreference_wrapperで包んでいるに過ぎないので、
このままでは関数オブジェクトとして、operator ()を適用できない。
そこで、TR1では、メタプログラミングを駆使して、単項か二項として呼べるようになっている。
372:デフォルトの名無しさん
08/09/19 13:22:41
この出力は0になります。STLの新規のresizeは常に初期化されますか?
vector<int> r;
r.push_back(1);
r.push_back(2);
r.resize(1);
r.resize(2);
cout<<r[1];
373:デフォルトの名無しさん
08/09/19 13:29:32
されます
374:デフォルトの名無しさん
08/09/19 13:47:28
㌧クスです
375:デフォルトの名無しさん
08/09/19 15:54:53
これでどんな環境でも、メモリは解放されますか?
クラス側で解放処理をしなくても、STLを使っている範囲(newは使わない)では自動開放されますか?
class A{ public:vector<char> x; A(){x.resize(10000000);}};
main(){
map<string,string> w;
w["hage"].resize(10000000);
cout<<"enterを押すとstringのメモリを解放します。 ";
getchar(); w.erase("hage");
cout<<"メモリは解放されましたか。 "; getchar();
map<string,A> z;
z["piza"].x[0];
cout<<"enterを押すとクラスのメモリを解放します。 ";
getchar(); z.erase("piza");
cout<<"メモリは解放されましたか。 "; getchar(); }
376:デフォルトの名無しさん
08/09/19 16:01:47
STLのメモリ解放は変な点がありますから心配です。
というのも、vectorでclear();使っても全く解放できないからです。swapしかないので。
377:デフォルトの名無しさん
08/09/19 16:10:25
ブロックでくくれば抜けたとき解放されるだろ
378:デフォルトの名無しさん
08/09/19 16:11:03
何も変な点なんてねぇよ。
clearやresizeでメモリを解放する必要などない。
379:デフォルトの名無しさん
08/09/19 16:13:50
MinGW3.4.5を使っているのですが、
list<vector<int> > l;
vector<int> v(10,0);
l.push_back(v);
とすると、
stl_list.h:435: warning: '__p' might be used uninitialized in this function
という警告が出ます。
l.insert(l.end(),v);
とすれば警告は出ないのですが、何が問題となっているのでしょうか?
380:デフォルトの名無しさん
08/09/19 17:51:32
>>376
効率を上げるために、開放されないよ。
clearするってことは、次に直ぐ追加される可能性があるかもしれないってことで、バッファっは保持されるんだ。
381:デフォルトの名無しさん
08/09/19 18:39:19
AUX
CON
NUL
PRN
をファイル名に使うとバグりますか?
382:デフォルトの名無しさん
08/09/19 18:43:25
バグるかもしれないし、バグら無いかもしれない
383:デフォルトの名無しさん
08/09/19 18:45:05
DOSの予約デバイス名が入っていたときに処理がおかしくなる代表例を教えてください。
WindowsXP以上でAPIを使ったときバグりますか?
384:デフォルトの名無しさん
08/09/19 18:47:45
うちのパソコンだと、AUXを名前に含めても、エラーが出ずに
エクスプローラーで書き換えられます。 問題出ますか?
385:デフォルトの名無しさん
08/09/19 19:04:12
一意的な絶対パスに変換する方法教えてください。
下のpはパスとして正常なんですけど・・・
これを変換する関数は無いですか?
char p[]="C:\\hoge_hoge\\..\\windows\\Notepad.exe";
system(p); //パスが有効か?
char q[300];
GetLongPathName(p, q, 300);
wcout<<p<<"\n->\n";
wcout<<q<<endl;
386:デフォルトの名無しさん
08/09/19 19:20:50
自己解決しました
char p[]="C:\\////\\hoge_hoge\\..\\windows\\Notepad.exe";
char q[300];
GetFullPathName(p, 300, q, NULL);
printf("%s\n", q);
387:デフォルトの名無しさん
08/09/19 20:34:56
すみません。 wchar_t型配列に、世界各国語と英字の大文字・小文字が入っているとき
大文字を小文字に変換するにはどうしたら良いでしょうか?
388:デフォルトの名無しさん
08/09/19 20:47:41
towlower
389:デフォルトの名無しさん
08/09/19 21:00:05
すみません。このようにしたいんです。
中国語・・・ABCDF・・・中国語
→中国語・・・abcde・・・中国語
ロシア語・・・FUNCTION・・・ロシア語
→ロシア語・・・function・・・ロシア語
390:デフォルトの名無しさん
08/09/19 21:02:36
何語でも出来ますか??
towlower() の動作は、現在のロケールの LC_CTYPE カテゴリに依存する。
この関数を Unicode 文字に対して使うのはあまり適切でない。なぜなら、
Unicode には大文字(upper case)・小文字(lower case)・タイトル文字(title
case) という 3 つの "case" が含まれているからである。
URLリンク(manpages.ubuntu.com)
391:デフォルトの名無しさん
08/09/19 21:36:50
こんな感じ?
wchar_t
us_tolower(wchar_t c)
{
if(c<='A' && c>='Z')
{
c=c-'A'+'a';
}
return c;
}
392:デフォルトの名無しさん
08/09/19 21:45:26
unicodeて、どのOS、コンパイラでもアルファベットはASCIIと同じですか?
393:デフォルトの名無しさん
08/09/19 21:47:34
何?
394:デフォルトの名無しさん
08/09/19 21:48:44
>>391
なんか怪しいけど、せめてLを・・・
395:デフォルトの名無しさん
08/09/19 21:50:59
たまにはEBCDICも思い出してね
396:デフォルトの名無しさん
08/09/19 21:52:47
コンパイルした環境に依存しないで、たとえば日本のVC++でコンパイルして、
ロシアや中国でも小文字になりますか?
397:デフォルトの名無しさん
08/09/19 21:55:51
BCCでコンパイル中に任意のメッセージ書き出せるマクロみたいのってないよね?
398:デフォルトの名無しさん
08/09/19 21:59:15
GetUserDefaultLCID
と
LCMapString
でやってみます。
399:デフォルトの名無しさん
08/09/20 02:19:19
intel c++はisostream入っていませんか?
400:デフォルトの名無しさん
08/09/20 02:38:34
日本語体験版だと入ってないのかな?
なんかヘッダが足らないみたいです
インストールの失敗?
英語体験版をいれて日本語で上書きしたらいいかな?
401:デフォルトの名無しさん
08/09/20 02:50:42
わかりました。VC++2008との統合が失敗してたのですがそれが原因みたいです。
wikiより。
実行に必要なライブラリやリンカなどは付属していないため、他のコンパイラの環境に寄生した形で実行される。
WindowsではMicrosoft Visual Studioが、LinuxではGCCが必要である。
402:デフォルトの名無しさん
08/09/20 02:52:46
isostream?
403:デフォルトの名無しさん
08/09/20 17:52:54
あるところからC++のソースコードをダウンロードして、
そのフォルダの中のsample.vcprojというのを実行すると、
VisualStadioが起動しました。
サンプルコードのはずなので、F5を押して実行すると、
「シンボル情報がありません:firefox.exeのデバッグ情報が見つからないか、
または一致しません。シンボルが読み込まれていません」
というウィンドウが表示されました。どうすればよいでしょうか?
404:デフォルトの名無しさん
08/09/20 17:57:33
あるところって、どこ?
405:403
08/09/20 18:10:55
404さん
URLリンク(www.cs.umd.edu)
からann_1.1.1.zipをダウンロードして、
MS_Win32→sample→sample.vcprojを実行しました。
406:デフォルトの名無しさん
08/09/20 18:29:16
プロジェクトの構成がReleaseになってるだけじゃないの?
Ctrl+F5とかで実行したら?
407:403
08/09/20 18:36:34
406さん
プロジェクトの構成はDebugでした。
Ctrl+F5とすると、Firefoxが新しく起動しました。
プロジェクトの構成をReleaseにしてみて、
F5を押すと「デバッグセッションの実行可能ファイル」というウィンドウが出てきて、
「実行可能ファイル名」を選ばされました。
よく分からず、既定のWebブラウザを選んで実行しました。
それを過去にもやったため、Firefoxが動いているんだと思います。
「デバッグセッションの実行可能ファイル名」を何にすればよかったのでしょうか?
408:デフォルトの名無しさん
08/09/20 19:08:56
1回かたの消しちまって、めんどくさくなった。
>>407
落としたけど、スタートアッププロジェクトがdllになってない?
samleをスタートアッププロジェクトに設定しないと、VSからは起動できない。
あと、sampleをビルドして出来るのは、コマンドラインアプリだったので、
F5実行だと、DOS窓が一瞬出てすぐ消えた。
デバッグセッションの実行可能ファイル名で解決したいなら、
「展開したフォルダ\ann_1.1.1\MS_Win32\bin\ann_sample.exe」
じゃないかね
409:403
08/09/20 19:54:14
408さん
F5実行で、DOS窓が一瞬出てすぐ消えた、ところまではできました。
「引数無しで実行」したときはエラーになるようなので、
コマンド引数に「-df data.pts -qf query.pts」と設定して
実行してみました。すると「cannot open data file」と表示されました。
すこし前進したようです。
あとはどうやってファイルを開くのか試行錯誤しているところです。
query.ptsというのは点のデータだと思います。
Test dataフォルダには「data_pts」がありますがちょっと違う。
これを読めばいいのか、または別のところにデータがあるのか。。。
410:デフォルトの名無しさん
08/09/20 20:12:01
test1-data.pts,test1-query.pts,test2-data.pts,test2-query.pts
ってのがあるみたいだけど
411:デフォルトの名無しさん
08/09/20 20:13:07
俺が落としたヤツだと「ann_1.1.1\test\」の下に
test1-data.ptsとtest1-query.ptsってのが転がってたんで、
それを「ann_1.1.1\MS_Win32\bin\」の下にコピってからDOS窓で
ann_sample.exe -df test1-data.pts -qf test1-query.pts
って打ったら動いたけど。
VCからだとカレントフォルダ分かりづらいから
別にDOS窓起動した方が良いんじゃない?
引数の設定にフルパスで書いても良いと思うけど。
まぁそろそろ飽きたんで引っ込む。
412:403
08/09/20 20:16:28
411さん
長いことありがとうございました。
後は自分で進んでみます。
413:デフォルトの名無しさん
08/09/20 20:41:25
逆アセンブラしてCのソースに貼り付けたら、動かせますか?
コマンドラインの引数を、関数の引数に変換できますか
414:デフォルトの名無しさん
08/09/20 20:44:13
>逆アセンブラしてCのソースに貼り付けたら、動かせますか?
そのまま貼り付けてコンパイルしたら動かないね
いやそも逆アセンブラするってなんだよって話だが
>コマンドラインの引数を、関数の引数に変換できますか
main関数の引数になります
415:デフォルトの名無しさん
08/09/20 20:50:17
DOSプロンプトで動くツールで、ソースが無いものをパクリたいのですが・・
できないですか?
test.exe ファイル名 > 出力名
というツールを
char * test(char *ch){ アセンブラ }
という関数に出来ませんか
416:デフォルトの名無しさん
08/09/20 20:57:14
無理?
417:デフォルトの名無しさん
08/09/20 20:59:24
普通に通信して連携すれば?
418:デフォルトの名無しさん
08/09/20 21:00:36
速度はひとつにした方が速いと思うんですが
419:デフォルトの名無しさん
08/09/20 22:12:24
>>415
関数が export されていて、インターフェイスが公開されているなら簡単にできるが、それ以外だと面倒
グローバル変数を使ってたりしたら「自作のほうが楽じゃね?」ってなるかもw
420:デフォルトの名無しさん
08/09/21 02:22:25
すみません
こういうツールの作り方教えてください
圧縮ファイルをすべてのアプリに対してフォルダと認識させる方法です
wINDOWSエクスプローラのみなら昔からできたのですが
Zipファイルをマウントする?「Pismo File Mount Audit Package」
URLリンク(www.moongift.jp)
421:デフォルトの名無しさん
08/09/21 03:16:01
#include <stdio.h>
#include<math.h>
double simpson(double, double, double, double);
double func(double);
int main(void){
/* 必要な変数の定義をする */
double h,xkisu,xguu,s0,s1,s2,ans,x1,x2,n,x0,i;
scanf("%lf", &x1);
scanf("%lf", &x2);
printf("x1 = %f\n",x1);
printf("x2 = %f\n",x2);
/* 偶数の分割数を入力するまで繰り返す */
do{
scanf("%lf", &n);
printf("n = %f\n",n);
if ((n%2) != 0){
printf("!! Bunkatsu su ha gu-su- desu !!\n");
} else break;
} while (n%2!=0);
422:421
08/09/21 03:17:12
すみません、みすって投稿してしましました。
上のは途中までのプログラムなのですが
コンパイルすると
22: 浮動小数点の不正な使用(関数 main )
25: 浮動小数点の不正な使用(関数 main ) とでます。
なぜでしょうか?
423:デフォルトの名無しさん
08/09/21 03:33:07
小数を整数で割った余りって何なんだよ。
nはintとかにしとけ。
424:デフォルトの名無しさん
08/09/21 04:52:19
Cでのメモリの取られ方についてご教授いただけませんでしょうか。
下記のようなコードを書いた場合、
static const char *teststr[6] = { "00000", "1111111111", "2", "3", "444", "555555" };
それぞれの文字列でピッタリ埋まるサイズでメモリが確保されて、
それらを指すポインタがteststrに格納されるのでしょうか?
VCで試したところ、確かにteststrの各配列に指定した文字列が格納されていたのですが、
ポインタのみを確保して、その位置のデータを破壊して、指定文字列を格納しているということはないでしょうか?
組み込み(ARM)での開発に使用しようかと思っています。
よろしくお願いします。
425:デフォルトの名無しさん
08/09/21 05:02:09
そんなもの処理系によるとしか
426:デフォルトの名無しさん
08/09/21 05:12:15
Cで@や$や`記号が使われなかった理由ってあるんですか。
427:デフォルトの名無しさん
08/09/21 05:16:12
これ以上トリグラフ増やすのいやだったんじゃね
428:デフォルトの名無しさん
08/09/21 07:28:28
>>424
破壊はしない。
429:デフォルトの名無しさん
08/09/21 13:51:14
>>424
> それぞれの文字列でピッタリ埋まるサイズでメモリが確保されて、
> それらを指すポインタがteststrに格納されるのでしょうか?
そのとおり。
文字列はROM、ポインタはRAMに置かれる。
430:デフォルトの名無しさん
08/09/21 15:26:49
>>429
ポインタが RAM にいっちゃうのは teststr に const が付いてないからだよね?
431:デフォルトの名無しさん
08/09/21 15:27:21
Cから最近C++に移行しました。
関数を
void foo(char* filename);
と宣言して使うときに
foo("data.dat");
とやると deprecated conversion string constant to char みたいな
警告が出ます。これは何が不味いのでしょうか?
432:デフォルトの名無しさん
08/09/21 15:28:02
>>431
const 付けたらいいんじゃね?
433:デフォルトの名無しさん
08/09/21 15:28:17
>>431
文字列リテラルは書き換えできないから char const で受け取らないとあぶない。
434:デフォルトの名無しさん
08/09/21 15:34:55
マクロの中で " をあらわすにはどうしたらいいですか?
エスケープを使うとエラーになり、そのまま使うと文字列リテラルとして解釈されてしまいます。。。
435:デフォルトの名無しさん
08/09/21 15:35:43
つまり
foo(const char* filename);
と宣言すればよいということでしょうか?
436:デフォルトの名無しさん
08/09/21 15:35:48
>>434
状況が見えんな。エラーになるコードとエラーメッセージをどうぞ。
437:デフォルトの名無しさん
08/09/21 15:37:21
現在二次元配列と2重ループを習っている超初心者です
質問なのですが列和と行和を求めるプログラムで、
列和も行和も同じループ内で処理できるのは何故なのでしょうか?
438:デフォルトの名無しさん
08/09/21 15:37:56
>>435
foo の中で filename の指す先を書き換えないんなら、それでいいはず。
っていうか、試せよ。
439:デフォルトの名無しさん
08/09/21 15:39:09
>>437
日本語でどうぞ
440:デフォルトの名無しさん
08/09/21 15:39:55
>>437
それだけ言われてもわかんねーよw
二次元配列を一次元配列にキャストしてるとか?
441:437
08/09/21 15:47:42
すみません・・・どう表現していいかわからず整理しないまま打ってしまいました
考察の一部なんですが、これ以外文章にしようがなくて困っています
プログラムをあげたほうがいいでしょうか?
442:デフォルトの名無しさん
08/09/21 15:49:34
>>441
まだ相談したいならコード晒せ。あの文章じゃ無理だ。
コード晒せば答えが得られる保証はないけどな。
443:デフォルトの名無しさん
08/09/21 16:02:09
簡単なことだ
二重ループは行列の全ての要素にアクセスするための手段でしかないから
その扱いについては制限されない
あとは各行和各列和を格納する配列を定義して要素に応じてそれぞれ適切に加算していくだけ
444:441
08/09/21 16:07:01
初心者丸出しで長ったらしいプログラムなのでろだにあげてみました。
No.7729です。よろしくお願いします。
445:デフォルトの名無しさん
08/09/21 16:38:13
for(j=0;j<4;j++)
for(i=0;i<3;i++)
table[3][j]+=table[i][j];
これ行和しか求めてないよ。ソース中には列和を求める部分は見当たらなかったけど。
446:444
08/09/21 18:52:32
>>445
列和の計算を入れ忘れている事に気付きました。ありがとうございます
この行和と列和を求めるプログラムの考察で、
列和も行和も同じループ内で処理できるのは何故かと言う問いなのですが
理由は>>443でOKもらえますかね・・・?
447:デフォルトの名無しさん
08/09/21 19:11:38
>>446
>>443は日本語がちょっとおかしいのでちゃんとした文章を自分で考えてくれろ
正解かどうかは知らないし
448:デフォルトの名無しさん
08/09/21 19:54:02
すいません質問なのですが、とあるクラスのprotectedメンバはその派生クラスの派生クラスからはアクセスできないんでしょうか??
MinGWで色々やっているのですが、間接継承の関係にあるクラスのprotectedメンバにアクセスしているプロググラムを実行すると、フリーズしてしまいます。
アドバイス頂けると幸いです。
449:デフォルトの名無しさん
08/09/21 20:29:22
>>448
フリーズするならそれはまったく別の問題。
450:デフォルトの名無しさん
08/09/21 20:40:54
>>448
フリーズならどこかで無限ループしてるんじゃ
451:デフォルトの名無しさん
08/09/21 21:27:02
VCの_COM_SMARTPTR_TYPEDEFなんですけど
これで作ったCOMのスマートポインタもAttachで入れないと
カウントがずれるですか?
452:デフォルトの名無しさん
08/09/21 23:02:33
頻繁に使われる関数で常にメモリを100Kほど確保して置きたいのですが
どのようにしたら良いですか? マルチスレッド対応の方法教えてください
こういう警告と同じ箇所で英語のエラーがでます。
マルチスレッド アプリケーションのコンストラクタでローカル静的変数を使うことは危険
453:デフォルトの名無しさん
08/09/21 23:08:57
>>452 クラスにしとけ。
454:デフォルトの名無しさん
08/09/21 23:59:27
100K みたいに大きいバッファは
マルチスレッド関係なく動的に確保しる。
455:デフォルトの名無しさん
08/09/22 00:44:37
頻繁に使うから、再確保はしないでそのままにしておきたいのですが。
2個以上同時に使われるとバッファが壊れますが、どうしたらいいでしょうか?
456:デフォルトの名無しさん
08/09/22 00:49:20
確保してから、アプリケーションが終了する直前までずっと確保したままでいい。
とりあえずマルチスレッドプログラムを組む場合は同期オブジェクトを勉強してください。
457:デフォルトの名無しさん
08/09/22 01:34:08
寝る前だけど質問させてもらいます
C++で横スクロールするアクションゲームっぽいもの
作ってるのですがキャラクターをクラスで扱っていて
場面ごとの関数1つ1つにクラスの変数やメソッドを使うから
インスタンス定義ってのをやらなきゃいけないようで
そうするとそのせいで場面の移り変わりのときに
それまで使っていた変数が初期化されてしまって
URLリンク(www.dotup.org)
このようになってしまいますよね
キャラクターのクラスだけでなく他にも場面やステージを
隔てて初期値に戻ると困るものを保存したり引き継いだり
できればいいのですがどうすればいいのでしょうか・・・
458:デフォルトの名無しさん
08/09/22 01:38:03
>>457
保存したり引き継いだりすればいいよ。
コンストラクタ含めて関数には引数が渡せるだろ。
その画像のプレゼン能力はすばらしい。
459:424
08/09/22 01:43:49
>>428
>>429
回答ありがとうございました。
これから検討してみたいと思います。
460:デフォルトの名無しさん
08/09/22 01:45:46
スコープが広めのリサイクルオブジェクトコンテナ見たいなのを作って、シーン終了時に必要なものを追加
次のシーン初期化時に、シーンのオブジェクトコンテナに移し変える
461:デフォルトの名無しさん
08/09/22 03:08:24
質問です。
ファイルオープンで、ファイルから値を読込んでもう一つのファイルにその値を書込むプログラムで、
読込用はテキストファイル(.txt)、書込用はバイナリファイル(.bin)を用いました。
上記の2つのファイルサイズは少量ですけど違いました。
この違いは何によるものなんでしょうか。
462:デフォルトの名無しさん
08/09/22 03:13:07
改行コードじゃない?
463:デフォルトの名無しさん
08/09/22 03:52:47
読込ファイルの値はスペース区切りでした
テキストファイルから「1 2」という値を読み込みバイナリファイルに書き込んで
ファイルをエディタで開くと「01 00 00 00 02」と表示されますが、
つまりは書き込みがバイナリファイルだとスペースにもコードがあるから
ファイルサイズが大きくなる・・・ということでいいんでしょうか・・・?
464:デフォルトの名無しさん
08/09/22 04:06:47
>>461,463
読み込んで形式変えて書き込んでるんだから、そもそも同じになるわけがないな。
465:デフォルトの名無しさん
08/09/22 04:30:31
質問です。
他のプロセスのメモリを監視するプログラム作ろうとしています。
ReadProcessMemoryで値を取得することはできたのですが、
できればそのメモリアドレスの値が更新された時に取得を実行したいです。
この「メモリアドレスの値が更新された」というイベントを取得することは可能でしょうか?
466:デフォルトの名無しさん
08/09/22 04:54:21
>>451
コンストラクタならfalseー緒に渡せば、AddRefしないよ。
operator=は無理だな。
467:デフォルトの名無しさん
08/09/22 07:22:34
>>465
チートツールはほどほどにしとけよ
468:448
08/09/22 12:19:03
>>449
>>450
おっしゃる通り別の問題でした汗
ありがとうございましたm(_ _)m
469:デフォルトの名無しさん
08/09/22 12:42:19
327です。
>329
ありがとうございます。
u_char *ucharAdr;
ucharAdr = (u_char *)(gulngUpdataAddress & 0x0fffffff) + 0x0c800000;
memcpy( ucharAdr, gushtUpdataArea, gulngUpdataDataCount * sizeof(short));
で、いけました。
470:デフォルトの名無しさん
08/09/22 12:45:08
CImageで(a,b)から(x,y)まで直線を引く方法はありませんか??
MoveTo、LineToを使用せずに描きたいです。
471:デフォルトの名無しさん
08/09/22 12:48:25
なんでMoveTo、LineToを使用したくないの?
472:デフォルトの名無しさん
08/09/22 13:13:47
>>470
おいらのCImageなら、メンバにLine(CPoint from, CPoint to)があるからそれを使えるよ。
でも、あんたの言っているCImageにそれがあるかどうかは知らんけどね。
473:デフォルトの名無しさん
08/09/22 19:04:58
const char str1[] = "str";
const char * str2 = "str";
"str"が配置されるのは、前者の場合、配列に格納するコードのところ
後者では文字列を置いておくところだと思うのですが、どういうときに、どちらを選べばいいのでしょうか
自分で考えたところでは、
・上の場合は、コンパイル時に配列のサイズが決まるのでstrlenなどを使う必要がない
・下の場合は、自動変数の確保がポインタだけですむ(速い?)
というちがいだと思うのですが、ほかにも違いがあるのでしょうか
474:デフォルトの名無しさん
08/09/22 19:18:10
>>473
後者は str2 = "another" のような代入が可能になってしまう。たぶん意図したものじゃないだろう。
static const char str3[] = "str";
↑これなら挙げられた前者と同じメリットを得つつ、後者のメリットを上回る(自動変数の確保はゼロ)。
475:デフォルトの名無しさん
08/09/22 19:46:37
const char * const str2
476:デフォルトの名無しさん
08/09/22 20:16:33
>>474-475
ありがとうございます。
475さんのはstr2が同じものをさし続けるようにするのですね。
474さんのは静的変数の初期化に、コストを預けてるわけですね。
477:デフォルトの名無しさん
08/09/22 20:31:51
>>476
str3 の初期化にコストなんか要らないよ。どのケースでも必要になる文字列リテラルの
実体を直接割り付ければいいだけ。
478:デフォルトの名無しさん
08/09/22 22:16:49
>>473
#define str4 "str"
479:デフォルトの名無しさん
08/09/23 22:01:02
ここの場所でC2614のエラーが起きます。
クラスや構造体の初期化子リストに表示できるのは、メンバか基本クラスだけです。
規定クラスのメンバはどうやって初期化するですか?
class A
{
public:
A(int apple)
protected:
int m_banana;
}
class B : public B
{
B(int apple)
: A(apple), m_banana(8) ←ここ
{
}
}
480:デフォルトの名無しさん
08/09/23 22:04:32
基底クラスのコンストラクタで行う。
class A
{
public:
A(int apple)
protected:
A(int apple, int banana) : m_banana(banana) {}
int m_banana;
};
class B : public A
{
B(int apple)
: A(apple, 8)
{
}
};
481:デフォルトの名無しさん
08/09/23 22:05:16
できました。
ども
482:デフォルトの名無しさん
08/09/24 07:57:18
VC++2005を利用しています
例外を勉強しているのですが、例外を発生させたときに、
catchで例外を処理しても、デバッガに例外があったことが出力されます
catchで例外を処理するときは、
デバッガの出力に例外が発生したことが出力されるのを防ぎたいですが、どのようにすればいいでしょうか
483:デフォルトの名無しさん
08/09/24 12:37:12
>>482
出力って、例外時のデバッガのダイアログ?だったら、デバッグ->例外で設定できる
デバッグ出力の例外のレポートだったら気にするな。レポートが出すぎて困るのだったら例外の使い方が間違っている。
484:482
08/09/24 13:18:40
>>483
れす、ありがとうございます。後者です。
例外のつかいかたについては勉強していくところです。
もし、テストケースとかを今後記述するような場合に、デバッグ出力でOFFにできないのか探しています。
485:デフォルトの名無しさん
08/09/24 14:19:16
>>482
Visual Studio のスレで聞いたほうがいいんじゃないかな?
486:346
08/09/24 14:42:55
>>347-353
超連休で返事が遅くなって申し訳ない。レスありがとう。
グローバルとstaticがいい感じっぽいので、両方試してみます。
487:482
08/09/24 15:56:25
>>485
ありがとうございます。移動します。
488:デフォルトの名無しさん
08/09/24 16:35:28
private List<ISchedule> zTasks = new List<ISchedule>();
これを同じことを NET 1.1でやりたいんですが どうすればいいんですか?
489:デフォルトの名無しさん
08/09/24 16:39:34
ArrayList
490:デフォルトの名無しさん
08/09/24 17:15:17
>>489
すいません><
具体的なコードを教えてくれると助かります^^;
491:デフォルトの名無しさん
08/09/24 17:24:23
C#スレ行けよ
492:デフォルトの名無しさん
08/09/24 19:38:05
tchar.hをインクルードしてあるのですが、コンパイルすると、_tstofが未定義の関数なるのは何故でしょうか?
493:デフォルトの名無しさん
08/09/24 20:14:44
>>492
ちゃんと確かめて無いので間違ってるかもだけど、
_tstofは内部でatofや_wtofを使ってるので、それらを使う
ために必要な<stdlib.h><math.h><wchar.h>をincludeする必要があったかも?
494:デフォルトの名無しさん
08/09/24 23:14:43
>>493
その三つをインクルードしてみましたけど駄目でした。
環境の問題でこういう事ってありますかね?
495:デフォルトの名無しさん
08/09/24 23:56:07
>>493
その理屈はおかしいよ
496:マジレスチュウ ◆MaJi/01g.w
08/09/25 00:43:23 BE:279187542-2BP(50)
スペルはちゃんと合ってる?
497:デフォルトの名無しさん
08/09/25 06:09:59
BCC Developer使ってるんですけど、そのデバッガのTurbo Debugger
がダウンロードできません
どなたか入手方法教えてください
498:デフォルトの名無しさん
08/09/25 06:32:51
自己解決しました すいませんでした
499:デフォルトの名無しさん
08/09/25 06:37:59
turbodebugger.exe
500:デフォルトの名無しさん
08/09/25 21:54:04
>>492
includeする順番を変えてみたらどうだろう?
tcharではなかったかもしれないけど、以前にそんな感じの現象になったことがある。
そのときは、なにかのバージョン番号とかが順番によっては未定義になって
起きた現象だった。tchar.hの中をみて、どのように定義されているか確認すると
いいかもね。
501:デフォルトの名無しさん
08/09/26 01:31:26
VC++2008は.NETの関数を使えるんですか?
502:デフォルトの名無しさん
08/09/26 01:49:00
自己解決しました
C++/CLI言語で出来ることがわかりました
503:デフォルトの名無しさん
08/09/26 19:45:12
動的な配列を作るにあたって、
引数付きコンストラクタを呼び出したいんですが、何か方法はありますか?
Const なメンバ変数のために初期化リストを使いたいんですが・・・。
CHoge *hoge;
hoge = new CHoge[2] //ここでHoge( X )のように引数を指定したい
504:デフォルトの名無しさん
08/09/26 20:18:13
ない
505:デフォルトの名無しさん
08/09/26 20:20:29
0xかCLIでなら・・・・・・
506:デフォルトの名無しさん
08/09/26 21:32:03
プロパティページの中にスライダーコントロールをつけたいのですが
setRangeをする場所がわかりません。
コンストラクタの中でやるとエラーで落ちてしまいます。
OnInitDialogでやっても何もダメでした。
何かよい方法は無いでしょうか?
IMPLEMENT_DYNAMIC(CPropOption, CPropertyPage)
CPropOption::CPropOption()
: CPropertyPage(CPropOption::IDD)
, m_xvEditPenthick(_T(""))
, m_xvSliderPenthick(0)
{
// m_xcSliderPenthick.SetRange(0,10); //なぜかこれをつけると壊れる
}
VC 2003です
507:デフォルトの名無しさん
08/09/27 00:49:00
>>506
ありません
508:デフォルトの名無しさん
08/09/27 07:16:59
DLLをlibにするテクありませんか?
509:デフォルトの名無しさん
08/09/27 07:55:01
すみません。質問なんですけど、charとwchar_tを比べたとき、charでは表せない文字やファイル名はありますか?
VC++2008ではchar型は、SJISかEUCであってUNICODEは表せませんか?
510:デフォルトの名無しさん
08/09/27 07:59:35
char型に入るのは英数字とあといくらかなのでsjisとかeucだとか言う時点でなんかおかしい
511:デフォルトの名無しさん
08/09/27 08:03:10
char配列でおねがいします
512:デフォルトの名無しさん
08/09/27 08:32:29
>>511
ただのバイト列だからなんでも入るよ
513:デフォルトの名無しさん
08/09/27 08:51:14
>>509
charは只の8bitの数値。それをどの文字コードで解釈するかってこと。
文字コード表を比較してください
514:デフォルトの名無しさん
08/09/27 13:43:04
㌧クス
515:デフォルトの名無しさん
08/09/28 02:38:26
クラスが保持するstaticメンバ関数から
同一クラスのprivateメンバ変数へアクセスできない
書き方が悪いのか、それともそういうもんなの?
516:デフォルトの名無しさん
08/09/28 02:54:48
実体を渡せよ
thisとか
517:デフォルトの名無しさん
08/09/28 03:10:16
>>515
class AAA {
private:
int m_a;
public:
static void func(int arg, AAA* pinst);
};
void AAA::func( int arg, AAA* pinst)
{
pinst->m_a = arg;
}
こんな感じか
518:デフォルトの名無しさん
08/09/28 04:00:18
struct Hoge {
Hoge() {}
Hoge(const Hoge&) { Sleep(1000); }
Hoge& operator=(const Hoge&) { Sleep(1000); return *this;}
};
もしこのくらいコピーにコストがかかるクラスをSTLのコンテナに入れる場合、どうするのが良いですか。
特にvectorだとpush_backしていくうちに、サイズ増やすために全部コピーしたりしますよね。(listだとそういうことはないのでしょうか)
ポインタ(std::vector<Hoge*>とかstd::vector<std::tr1::shared_ptr<Hoge> >)で管理するのが普通ですか。
519:デフォルトの名無しさん
08/09/28 05:00:37
>>518
listやset、mapはpush_back(insert)しても新たにコピーされることは無い
ただまぁvectorと同じようには使えないので、boost::ptr_vectorあたりがお手軽か?
520:デフォルトの名無しさん
08/09/28 08:00:28
>>518
そのとおり、shared_ptrが無難
521:デフォルトの名無しさん
08/09/28 20:52:45
クラスAのメンバの配列を動的確保できるようにnewとdelete用の関数を作りました。
そうするとクラスAに全く関係のないクラスBのメンバの値がおかしくなりました。
調べていくと、
クラスBのコンストラクタで初期化完了
↓
クラスAのコンストラクタでnewを使う
↓
クラスBのメンバの値がおかしくなる
という流れでした。
これは何が原因なのでしょうか?
ちなみにクラスAのnew用関数ではクラスBは全く使用していません。
522:デフォルトの名無しさん
08/09/28 21:01:43
クラスBのデストラクタにブレークポインタ打ってみそ
523:デフォルトの名無しさん
08/09/28 21:08:37
>>522
プログラム終了時のみにしか呼ばれてませんでした
524:デフォルトの名無しさん
08/09/28 21:09:04
new用関数て?
operator new のオーバーロードをしてるわけじゃないよな
525:デフォルトの名無しさん
08/09/28 21:12:00
クラスBのインスタンスをウォッチしながらステップ実行してみそ
526:デフォルトの名無しさん
08/09/28 21:13:28
>>524
多次元配列なのでまとめてるんです
void New()
{
int i;;
for(i = 0; i < MAX; i++)
p[i] = new int [SIZE];
}
こんなのです
527:デフォルトの名無しさん
08/09/28 21:15:24
全く関係ないところでスタックやヒープを壊してる悪寒
528:デフォルトの名無しさん
08/09/28 21:23:12
>>525
ググって見たんですけどやり方が今一分かりませんでした。
クラスA・Bどちらのインスタンスもグローバル変数でクラスBのほうが先に作られます。
529:デフォルトの名無しさん
08/09/28 21:23:20
>>526
pの領域は確保してるか?
530:デフォルトの名無しさん
08/09/28 21:33:09
>>529
pは int *p[SIZEX]; と宣言してます。
531:デフォルトの名無しさん
08/09/28 21:41:51
>>528
VisualStudioだったら、ウオッチにCLASS Bのインスタンスを表示させてステップ実行すると、値が変わったところで赤くなる。
532:デフォルトの名無しさん
08/09/28 21:51:48
>>531
クラスAのコンストラクタでnew用の関数が終わったときに値が変わりました。
原因がつかめないのでnewする前にクラスBの値を保存しておいて終わったらそれを代入することにしました。
皆さんありがとうございました。
533:デフォルトの名無しさん
08/09/28 22:12:57
領域が重なってるんだヤバイ状態だ。
解決してから進まないと、あとで手が着けられない状態になるよ
534:デフォルトの名無しさん
08/09/28 22:13:29
>>532
MAX > SIZEX
になってない?
535:デフォルトの名無しさん
08/09/28 22:22:12
>>534
思いっきりなってました・・・
何で気づかなかったんだろう・・・
直したら正常になりました。
ありがとうございました。
536:デフォルトの名無しさん
08/09/29 01:08:29
Visual C++ 2003
MFC利用
でExcelファイルの読み書きをexcelのtypelibを使って行っているんですが、
CRangeオブジェクトのメンバ
CString get_Address(VARIANT RowAbsolute, VARIANT ColumnAbsolute, long ReferenceStyle, VARIANT External, VARIANT RelativeTo)
のReferenceStyleに設定すべき定数がどこにあるのかわからず困っています。
XlReferenceStyleをxlA1にすれば良いらしいのですが。
CRangeの"C8"などのアドレスを返す代替手段があればそちらでもかまわないです。
他の部分はほとんどなんとかなったんですがこれだけどうしようもないです。
よろしくお願いします。
537:デフォルトの名無しさん
08/09/29 10:10:33
>>508
インポートライブラリを作るってこと?できるよ。
環境によって違うけど。
538:デフォルトの名無しさん
08/09/29 12:01:34
fstreamでパスに日本語を含むファイルを開けないんですが、
std::localeとかimbue()つかってもダメで探してもlocaleのことしか見つかりません。
環境はVC2008使ってるけどやはりVCのバグ?fopenとか_openとか使えってことですかね?
539:デフォルトの名無しさん
08/09/29 12:05:07
ワイド文字版のコンストラクタを使えばいいよ
540:デフォルトの名無しさん
08/09/29 12:22:23
ストリーム関連のライブラリは設計段階でダメダメなので使わないほうがいい。
何しろ、一文字は7bitであるという前提が頭からこびりついて離れない西側諸国の連中が作ったんだから。
541:538
08/09/29 12:24:00
wfstreamでもダメだったんでやはりCライブラリですか
542:デフォルトの名無しさん
08/09/29 12:29:31
>>541
wfstreamはファイルの「中身」をワイド文字で読み書きしたいときに使うんだ
ファイル名の問題とは関係ない
つうか>>539嫁
VC8以降は、fstreamにワイド文字版コンストラクタがあるんだよ
543:541
08/09/29 12:34:34
つまりfstreamのインスタンス作成のときにアドレスをワイド文字で渡せばおkということですか
544:543
08/09/29 12:54:55
できましたー
>>542ご指摘ありです。
>>539理解できてなくてすません。
ところでVC8以降ってことはVC依存のコンストラクタ?他のビルダーとかだとマルチバイトで指定してもおk?
545:デフォルトの名無しさん
08/09/29 13:02:17
>>544
少なくとも非標準
他の環境でも利用したいのならboost使え
546:544
08/09/29 13:14:55
なるほど了解しました。
547:デフォルトの名無しさん
08/09/29 14:39:12
C++…というかC言語自体が初心者です。
C++の開発環境で、PCに『Visual Studio 2005』が入っていたのでそれを使おうとしたのですが、いまいち上手く使えません。
Visual Studio 2005 について解説しているサイトを見ながら設定し、それにのっているプログラムを丸写ししてみたのですが、ビルドが上手くいかなかったり、実行してもエラーが出たり出なかったりでよくわからない状態です。
これ以外で無料で使えて、それでいて使いやすい開発環境はありますか?
548:デフォルトの名無しさん
08/09/29 15:19:22
あきらめた方がいいよ
549:デフォルトの名無しさん
08/09/29 15:39:47
開発環境のせいじゃないだろ。
一歩ずつ進めてみては
550:デフォルトの名無しさん
08/09/29 20:20:09
>>547
VS2005は簡単な部類だからあきらめないでね。
551:デフォルトの名無しさん
08/09/29 20:23:04
>>547
2008を入れて、この本を買いなさい。
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)
552:デフォルトの名無しさん
08/09/29 20:25:45
なんか昔アカデミックのおまけについてたような本だなw
553:デフォルトの名無しさん
08/09/29 20:56:57
そういうツールの解説本は例外なく糞だ。
買うならこれだ。
URLリンク(www.amazon.co.jp)
554:デフォルトの名無しさん
08/09/29 21:01:45
コンパイルができないってのは、独学者がぶつかる最初の壁だろ。
周囲に訊く人間がいなかったら、バカっぽくても画面写真が載りまくりのような本を見るしかない。
555:デフォルトの名無しさん
08/09/29 21:19:19
その辺は、まともな本ほど載ってないような話題だしな
556:536
08/09/30 00:40:35
自己レスです。
enum XlReferenceStyle
{
xlA1 = 1,
xlR1C1 = -4150
};
でした。全て解決しました。
557:デフォルトの名無しさん
08/09/30 03:31:12
クラス名をつけたらコンストラクタ出来ますが、クラス名無しで変数だけ定義したら
コンストラクタは出来ませんか?
558:デフォルトの名無しさん
08/09/30 03:34:39
日本語でおk
559:デフォルトの名無しさん
08/09/30 03:47:13
class cls{
int a;
public: cls(){・・・} };
というクラスを
class {
int a;
public: } hensuu;
と書いた場合に、初期化が出来るか教えてください
560:デフォルトの名無しさん
08/09/30 04:12:46
それを構造体にしない理由は?
561:デフォルトの名無しさん
08/09/30 07:25:39
>>560
後者にコンストラクタは定義できませんか? 構造体にしないのは初期化したいからですよ。
562:デフォルトの名無しさん
08/09/30 07:27:22
>>561
構造体にすれば初期化できるよw
563:デフォルトの名無しさん
08/09/30 07:29:54
初期化は、代入だけとは限らないですが出来ますか? 普通のプログラムも掛けますか
564:デフォルトの名無しさん
08/09/30 07:43:16
POD(Plain Old Data)の定義からも、
PODの初期化のルールからもはずれるから初期化されないと思う。
第一privateなint a;はどこからもさわれない、そこで警告なりなりラーなりになるような。
565:デフォルトの名無しさん
08/09/30 07:47:18
クラス名を付ければ、初期化出来ますけど、クラス名無しだと初期化は無理って事ですか?
566:デフォルトの名無しさん
08/09/30 07:57:35
クラス名のあるなしは関係ない。
グローバル変数としてhensuuがあったら初期化ずみ。
ローカル変数としてhensuuがあったら未初期化。
このへんは普通の変数と同じ考え方でいい。
あとはPODでググる。PODならnewを使った場合にコンストラクタなしでも初期化される。
それから新規の質問以外はsageる。
567:デフォルトの名無しさん
08/09/30 08:07:47
struct {
int id;
char *name;
} table[] = {
{ 0, "zero", },
{ 1, "ichi2, },
};
が出来るのだから
デフォルトの公開性が違うだけのclassでも
class {
public:
int id;
char *name;
} table[] = {
{ 0, "zero", },
{ 1, "ichi2, },
};
と出来るだろ。
やったことないけど。
568:デフォルトの名無しさん
08/09/30 08:14:06
>>567
そこまで書いたらやってみればいいよwww
569:デフォルトの名無しさん
08/09/30 08:15:04
それでいいはず。
なんでint a; が何でprivateなのだろ。
publicならPODだから、newやhoge xx = {} で初期化可能になる。
570:デフォルトの名無しさん
08/09/30 08:18:42
初期化っていうのはコンストラクタを起動出来るかという質問です。
class cls{
int a;
public:
cls(){a=10;} };
っていうのは出来ますけど、クラス名無しだと標準のコンストラクタ名が使えないですけど
なんとか出来ますか?っていう質問です。
571:デフォルトの名無しさん
08/09/30 08:21:59
無名ではコンストラクタは指定できない。メンバーをpublicにする。以上。
572:デフォルトの名無しさん
08/09/30 08:28:57
>>570
つーかいちいちあげるな
573:デフォルトの名無しさん
08/09/30 08:30:28
>>570
無名クラスではコンストラクタは作れないです
もし名前空間を汚染したくないだけであれば無名名前空間を使うのも手です
574:デフォルトの名無しさん
08/09/30 08:43:28
トンクス
575:デフォルトの名無しさん
08/09/30 09:22:14
すみません質問良いでしょうか。
関数chk()の戻り値がFALSEになるまで待つにはどうしたらいいですか?
576:デフォルトの名無しさん
08/09/30 09:26:52
なるべくCPUを使わず、即座に進める方法おねがいします。
577:デフォルトの名無しさん
08/09/30 09:40:57
自己解決しました。 関数の戻り値を監視するには、定期的に関数を呼び出すしかないようですね。
578:デフォルトの名無しさん
08/09/30 12:26:27
>>577
戻りが変わった可能性があることをイベントを使って検出してから見にいくといい。
OSのAPIにはそういうイベント関係の関数が多数ある。
579:デフォルトの名無しさん
08/09/30 12:36:18
>>570
PODをクリアするテンプレートクラスを作って、それをクラスに所有させる。するとデフォルトコンストラクタで初期化できるようになる。
template<class T)
class tclear
{
T a;
public:
tclear()
:a(0)
{
}
};
class X
{
tclear<int> a;
};
580:デフォルトの名無しさん
08/09/30 15:54:03
ICL10.1(win)でXP32bit用アプリ?をゴニョゴニョしてるんだけど、
SSEのインラインアセンブラとか組み込み関数を使うと、/archとか/Qxとかに関わり無くなぜか勝手に拡張命令を使うみたいなんで困ってます><
インラインアセンブラはともかく組み込み関数は汎用命令で何とかしてくれると思ってたのに・・・
汎用命令以外吐かないようにする方法を教えてください、よろしくお願いします。
581:デフォルトの名無しさん
08/09/30 17:28:52
もうSSEの無い環境なんて切り捨ててもいい時期に来てるってことだろ。
582:デフォルトの名無しさん
08/09/30 18:14:32
そうだな C3 だとハングアップするソフトも結構あるしな ><
583:デフォルトの名無しさん
08/09/30 20:23:58
いや、SSE2未満なら切捨てでいいと思うけど
オレが使いたいのはSSSE3(_mm_hadd_epi16)までなんでチョットまずいかなと・・
俺自身SSSE3が動かないPCも使ってるし困るんです><
てかQaxがマトモに機能してれば困らない事に気付いたよ!!
ICLがコピーと論理演算位しかベクトル化してくれないのが全部悪いんだ!!!
型が複数あると出来ないとか、無理矢理全部intでやったら複雑すぎとかふざけてるとしか思えない
てことで普通の自動ベクトル化があるコンパイラ教えてください、お願いします。
584:デフォルトの名無しさん
08/09/30 21:35:54
空の書き込み可能なテンポラリディレクトリを確保する命令ありますか?
WindowsXPです。
585:デフォルトの名無しさん
08/09/30 21:38:29
GetTempFileName()のフォルダ版ないですか? 存在していない空のフォルダを作りたいのですが
586:デフォルトの名無しさん
08/09/30 21:51:20
同じ名前のファイルとフォルダは同時に存在できない。
587:デフォルトの名無しさん
08/09/30 22:01:53
GetTempFileNameで取った名前使ってディレクトリ作れば?
588:デフォルトの名無しさん
08/09/30 22:16:51
>>587
それは無理。
GetTempFileNameの作ったファイルを消してディレクトリを作らないといけないから、
その間に他のプロセスに割り込まれる可能性がある。
589:デフォルトの名無しさん
08/09/30 23:15:32
これで出来ました。
GetTempdir(){
wchar_t w[1000], z[1000];
GetTempPathW(1000, w);
if(!GetTempFileNameW(w, L"aa", 0, z) ) {
wcscpy(w,L".\\temp\\"); CreateDirectoryW(w,NULL);
if(!GetTempFileNameW(w, L"aa", 0, z) )
wcscpy(w,L"c:\\temp\\"); CreateDirectoryW(w,NULL);
}
wchar_t ch[9];
for(int n=0;n<100000;n++){
swprintf(ch,L"aa%06d",n);
wcscat(w,ch); CreateDirectoryW(w,NULL);
if( (GetFileAttributesW(w)&FILE_ATTRIBUTE_DIRECTORY) )break;
w[wcslen(w)-8]=0;}
}
590:デフォルトの名無しさん
08/09/30 23:26:38
まちがえました
wchar_t ch[9];
for(int n=0;n<100000;n++){
swprintf(ch,L"aa%06d\\",n);
wcscat(w,ch);
int flg=GetFileAttributesW(w);
if( flg==-1 || !(flg&FILE_ATTRIBUTE_DIRECTORY) )
{CreateDirectoryW(w,NULL); break;}
w[wcslen(w)-9]=0;
591:デフォルトの名無しさん
08/09/30 23:30:25
GetTempdir が使われてないのと>>588の意見を全つっぱした理由が気になるな
592:デフォルトの名無しさん
08/10/01 04:40:03
GetTempFileNameはファイル作らないよ?
593:デフォルトの名無しさん
08/10/01 21:41:36
>>592
作ったり作らなかったりする。
MSDN嫁あほ
594:デフォルトの名無しさん
08/10/01 23:21:58
C++なんですけど、(Cも同じでしょうか)
グローバル変数でstatic付けるのと付けないのと、どんな違いがあるのでしょうか。
595:デフォルトの名無しさん
08/10/01 23:28:51
>>594
その名前がコンパイル単位の外から見えるかどうかが変わる。
C++ では無名の namespace に入れるのが推奨されてる。
596:デフォルトの名無しさん
08/10/01 23:34:01
>>594
つけると静的になり、ファイルスコープになる。
つまり、外部に公開しないで済む。
597:デフォルトの名無しさん
08/10/02 04:58:54
template< class T > class Base を継承したクラス Derived を作りたいのですが
クラス定義はどのように記述すればいいんでしょうか?
598:デフォルトの名無しさん
08/10/02 05:15:16
template<class T>
class Deriv : public Base<T>
こうだろうか?
599:デフォルトの名無しさん
08/10/02 05:19:28
#include <iostream>
template <class T>
class Base {
T a;
public:
Base(T b) : a(b) {}
void print() const {
std::cout << a << std::endl;
}
};
template <class T>
class Derived : public Base<T> {
T c;
public:
Derived(T a, T b) : Base<T>(a), c(b) {}
void print() const {
Base<T>::print();
std::cout << c << std::endl;
}
};
int main()
{
Derived<int> d(1, 2);
d.print();
}
600:デフォルトの名無しさん
08/10/02 06:48:15
おふっ。
できました。ありがとうございます。
601:デフォルトの名無しさん
08/10/02 09:35:56
例外を扱うとき場合
実行中どういう例外を吐いたかログを取るような仕組みを組みこんだりするのでしょうか?
その場合、どういう方法でログ取りの仕組みを実装するのがよいでしょうか?
602:デフォルトの名無しさん
08/10/02 10:29:09
SYSLOGでも利用すれば
603:デフォルトの名無しさん
08/10/02 16:47:32
イベントログも使えば
604:594
08/10/02 18:21:18
>>595-596
ありがとうございます。
staticはローカル変数でしか使ったことがなく、ちゃんと理解してませんでした
605:デフォルトの名無しさん
08/10/02 18:31:59
まあ、まず使わん仕様だがな。
606:デフォルトの名無しさん
08/10/02 19:44:00
質問があります。私は今WindowsGUIプログラムで、WinMainのスレッドでGUIの処理、別に作ったスレッドで
ファイルへの書き込みを行っています。一定時間間隔で複数のデータをサンプリングしてファイルへ書き込んで
いるのですが、メインスレッド終了時に、同時刻上のデータがすべて書き込み終わっている様にしたいのです。
ファイル書き込みスレッドを終了させた場合、どこまで処理を終えているのか確定できませんが、どのようにコントロール
するのが一般的なのでしょうか。よろしくお願いします。
607:デフォルトの名無しさん
08/10/02 19:46:01
>>606
fflush 相当のことをすればいいんじゃないかと
608:デフォルトの名無しさん
08/10/02 19:57:36
>>606
書き込みスレッドにイベントを送って、書き込みスレッドがファイルをクローズしその後スレッド終了するようにすればいい。それを待ってwinmainのスレッドを終了させる。
609:デフォルトの名無しさん
08/10/02 22:00:18
イベントについて調べたところ、これで大丈夫そうです。ありがとうございました。
610:デフォルトの名無しさん
08/10/02 22:52:18
クラスをリスト化してるのですが
クラスの一番最初のメンバ変数をsortを使って
昇順や降順に変更したいと思っています
何かいいやり方はないでしょうか?
611:デフォルトの名無しさん
08/10/02 22:55:20
reverseのが早いんじゃない?
使えるリストなのかは知らないけど
612:デフォルトの名無しさん
08/10/02 22:55:44
>>610
STLを使おう
613:デフォルトの名無しさん
08/10/02 22:57:42
>>609
豆知識
スレッドの実行が終わると、スレッドのハンドルがシグナル状態になる。結構便利
614:デフォルトの名無しさん
08/10/02 23:27:10
豆知識ていうか必須知識だろ
615:デフォルトの名無しさん
08/10/02 23:37:04
>>606
文章の酷さが気になった
もう少し読み書きしようぜ
616:デフォルトの名無しさん
08/10/03 02:04:13
int hoge(int a) {
return a++ * ++a;
}
という関数があるときに
hoge(5)
とすると、Return値は5×6で30になると思ったんだけど、g++とVC++の両方で
答えが36になりました。これってどうしてでしょうか?
どうかお願いします。
617:デフォルトの名無しさん
08/10/03 02:20:56
>>616
それは未定義動作なのでそういうコードは書いちゃいけないけど、
あえてコンパイラの気持ちを大便するなら、
1. a++を発見。「評価後にaの値を+1する」と覚えておく
2. ++aを発見。「評価前にaの値を+1する」と覚えておく
3. コード生成開始
4. 評価前なのでaの値を+1するコードを生成
5. a*a のコードを生成して、その結果が返り値となるようにする
6. aの値を+1するコードを生成する。意味がないから最適化で削除されるかも。
618:デフォルトの名無しさん
08/10/03 02:23:42
水に流せってことですか
619:デフォルトの名無しさん
08/10/03 03:35:14
変な物を放り込むと詰まるという意味も
620:デフォルトの名無しさん
08/10/03 04:08:33
template < class T > class Hoge;
で const の T を受け取った時に、
クラス内部で非 const な T 型を使いたい場合には
どうすればいいんでしょう?
例えば Hoge< const string > というように呼ばれたとき、
内部で(非 const な) string 型を扱いたいのです。
621:デフォルトの名無しさん
08/10/03 07:54:20
>>620
boostのtype_traitsにconstを外した型を返せる
remove_cってのがある。
URLリンク(www.kmonos.net)
手法としてはtemplateの特殊化で行ってるらしい。
622:デフォルトの名無しさん
08/10/03 07:55:16
すまん、remove_constだね
623:デフォルトの名無しさん
08/10/03 08:36:56
サンクスです。boostが必要ということは
もともと const 修飾された型から 非 const の型を特定するのは
難しいプログラム技術が必要だってことなわけですね・・・。
自作のiteratorを作ってたんですが、こりゃー自分には無理かな。・_・
624:デフォルトの名無しさん
08/10/03 08:59:29
>>623
いや、試してないけど実装はたったこれだけで良いっぽいよ。
// remove_const : const修飾の除去
//非constが渡されたらこれが実体化
template <typename Type>
struct remove_const {
typedef Type type;
};
//constの場合はこちらが実体化
template <typename Type>
struct remove_const<Type const> {
typedef Type type;
};
//用例
remove_const<const int>::type i; //constが外れる
625:デフォルトの名無しさん
08/10/03 11:00:15
>>617
未定義動作じゃなくて不定動作だろ。
a++と++aの評価順が決まってない。
626:デフォルトの名無しさん
08/10/03 11:08:18
>>617
副作用完了点について理解しとかないと泣きを見るよ。
627:デフォルトの名無しさん
08/10/03 11:48:35
またそうやって「何かをわかってるフリ」したデタラメを書くw
628:デフォルトの名無しさん
08/10/03 11:51:43
>>625
↓にはそういったコードは未定義だと書いてあるが・・・
URLリンク(www.kouno.jp)
629:デフォルトの名無しさん
08/10/03 11:59:34
ANSI-C89より前では「不定動作」だったがANSI-C89からは「未定義動作」
に改められたね。
630:デフォルトの名無しさん
08/10/03 13:17:57
>>624
おぉ!すごい!できました!革命的!
が、これは安全なんでしょうか。^^;
VC++2008では
allocator::allocate, allocator::construct は const オブジェクトを引数に取れますが
allocator::deallocate. allocator::destroy は const オブジェクトを引数に取れません。
つまり、例えば const string 型のオブジェクトのためのメモリ領域は確保できますが、
その領域を開放する術はありません。そこで、
// T は const string 型とする。
// T* p;
// allocator< T > alloc;
typedef typename remove_const< T >::type * not_constT; // T 型からコンストはずし
alloc.destroy( const_cast< not_constT >( p ) ); // p からコンストはずし
のようなコードを書いたわけですが、これが正常なのかどうか…。
コンパイルは通っており、テストもパスしていますが、メモリの中身を覗く術がわからないので
もしかしたらメモリリークでもしてるのでは、と。
631:デフォルトの名無しさん
08/10/03 14:29:18
スレッド、セマフォ、ミューテックス辺りを次の業務でするんだけど
プロセスとスレッドの違いが良くわかりませぬ。
スレッドってなんだ?
632:デフォルトの名無しさん
08/10/03 14:42:34
ここのこと
それはスレッド
633:デフォルトの名無しさん
08/10/03 14:44:55
>>632
それだけは言って欲しくなかった…
634:デフォルトの名無しさん
08/10/03 14:54:21
プロセス・・・プロセスごとにメモリ空間(=グローバル変数とかヒープとか)が別々
スレッド・・・全部のスレッドでひとつのメモリ空間を共有
メモリ空間を共有するので複数のスレッドからひとつの変数を
同時に書き換えたりとかわけわからんことにならぬよう注意せよ
セマフォとかは普通にプロセス間でも使えるんじゃ?
635:デフォルトの名無しさん
08/10/03 15:15:19
>>634
ありがとう
確かに共有メモリがどうの聞いた!
636:デフォルトの名無しさん
08/10/03 15:17:08
「業務」で未知状態でマルチスレッドか……
ご愁傷様って奴だな
637:デフォルトの名無しさん
08/10/03 15:25:13
共有メモリとメモリ空間共有とは違うw
638:デフォルトの名無しさん
08/10/03 15:36:17
えらんツッコミのせいでせっかくの感動が台無しだ
639:デフォルトの名無しさん
08/10/03 15:40:48
地獄への第一歩で感動とかされても
640:デフォルトの名無しさん
08/10/03 15:50:50
Windows3.xやWin32sのプロセスはスレッドだったのか
641:デフォルトの名無しさん
08/10/03 16:06:45
地獄とかやめて
確かに既に炎上してるらしいが
642:デフォルトの名無しさん
08/10/03 16:16:21
既に炎上してるところに知識のない奴が投入されるのか・・・
ご愁傷様という他ないな
643:デフォルトの名無しさん
08/10/03 16:16:35
passive hell and death
644:デフォルトの名無しさん
08/10/03 17:19:33
デスマーチのプロジェクトは働かなくても給料もらえるからいいじゃない。
だって、どうせ出来上がらないんだから!
645:デフォルトの名無しさん
08/10/03 17:22:18
const char *hoge[5]={"test","test2","test3","test4","test5"};
というのを宣言します。
char *hoge2;
hoge2 = hoge[3]; という代入をしたいんですが、コンパイルが通りません。hogeのほうにconstをつけなければいけるんですが・・・
教えてください
646:デフォルトの名無しさん
08/10/03 17:26:08
>>645
そういうのを通さないためのconstです。
明示なcastをしてください。