07/08/05 06:18:18
プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2以降。
■質問する人へ
質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。
・ぐぐる
・マニュアルで探す
・FAQを読む 例えば URLリンク(www.bohyoh.com)
質問には以下を書くこと。へたくそな質問は再提出を要求される。
・詳しい内容(「動きません」「うまくできません」では回答しようがない)
・エラーメッセージ(なるべくそのままで)
・実行環境(OS名、コンパイラ名)
・最終的にやりたいこと(もっとよい方法がある場合が多いので)
回答してくれた人には「ありがとう」のひとことをいってあげて。
■回答する人へ
相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。
それができないならこないこと(だって小心者スレだもん)。
・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。
・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。
・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
宗教的な話題は禁止します。
2:デフォルトの名無しさん
07/08/05 07:14:37
____
/__.))ノヽ
.|ミ.l _ ._ i.)
(^'ミ/.´・ .〈・ リ このスレはわしが育てる
.しi r、_) |
| `ニニ' /
ノ `ー―i´
3:デフォルトの名無しさん
07/08/05 20:58:50
1001帰れ
4:デフォルトの名無しさん
07/08/05 22:20:30
前スレ
スレを勃てるまでもないC/C++の質問はここで 2
スレリンク(tech板)l50
5:デフォルトの名無しさん
07/08/11 16:46:20
#include <cstring>
と
#include <string>
と
#include <string.h>
の違いを教えてください
6:デフォルトの名無しさん
07/08/11 17:01:51
#include<cstring>
cstringというファイルをincludeする
#include<string>
stringといf(ry
それぞれのファイルの中見てみればきっといい勉強になるに違いない。
7:デフォルトの名無しさん
07/08/11 17:52:10
まあ標準C++の場合だとこうなっている。
<cstring>は、Cの<string.h>相当のヘッダで、
中の宣言はstd名前空間に入っている。
<string>は、basic_string<>のヘッダ。
<string.h>は、内部で<cstring>をインクルードしており、
個々の識別子に対して大域名前空間上でusing std::strcpy;などのように
using宣言がなされていることになっている。
実際には、<cstring>が<string.h>をインクルードして、
std名前空間上でusing宣言を書いている実装がほとんど。
8:デフォルトの名無しさん
07/08/26 14:20:20
ofstreamではバッファの容量は指定できないのでしょうか?
9:デフォルトの名無しさん
07/08/26 14:24:28
>>8
rdbufメンバ関数でそのストリームに関連付けられたバッファが得られる。
その中のメンバにそれっぽいものがあるはず。
10:デフォルトの名無しさん
07/08/27 16:00:38
質問です。
i = (char*)malloc(sizeof(char) * 256);
でメモリ領域を確保したのですが、256バイト以上使用することができます。
なぜでしょうか?教えてください。
11:デフォルトの名無しさん
07/08/27 16:05:01
>>8
std::streambuf::pubsetbuf()がお望みのものだが、
実装によってはopen済みのストリームに対して実行しても無視されるので注意
12:デフォルトの名無しさん
07/08/27 16:08:03
マルチすんなカス
13:デフォルトの名無しさん
07/08/27 16:12:17
うむ、そうだな。小心者スレにしては、随分と大胆だ。
14:デフォルトの名無しさん
07/08/27 21:42:16
>10
memcpy(0x00,1,1)
これでいい
15:デフォルトの名無しさん
07/08/27 22:16:24
別に256バイト使えるのは正常だな
16:デフォルトの名無しさん
07/08/28 07:38:45
>>10
OutOfRange を誰も発行しないから。
17:デフォルトの名無しさん
07/08/29 03:39:55
C++のソースファイルって、
拡張子がたくさんあるみたいですけど
どれが一番メジャーで、どれを使用するべきですか?
18:デフォルトの名無しさん
07/08/29 03:45:31
.cpp
19:デフォルトの名無しさん
07/08/29 10:32:50
.C
.c++
.cxx
.cpp
.cc
バリエーションはこれくらいかな。
20:デフォルトの名無しさん
07/08/29 11:35:05
質問です。
環境
XP
visual C++
for(t=0;t<T;t++){
pw=pow(exp,(1.0*t)/25.0);
printf("pw=%f\n",pw);
}
といった感じで計算結果を表示させていきたいのですが、実行結果が
pw=1.000000
pw=1.#INF00
pw=1.#INF00
pw=1.#INF00
と2番目から#INFというのが表示されてしまいます。計算結果を正しく出力させるにはどうしたらいいのでしょうか?
21:デフォルトの名無しさん
07/08/29 11:38:42
>>20
pwに代入している行のカンマの位置が怪しいけど、要はオーバフローしているんだろ。
それから、"%f"ではなく"%g"推奨。
22:デフォルトの名無しさん
07/08/29 11:39:45
つーか、expはいくつなのかと。
23:20
07/08/29 12:03:41
>>20さん、>>21さんへ
ありがとうございます。
expは下記のように定義し、2.71828としています。
#include <stdio.h>
#include <math.h>
#define T 30
#define exp 2.71828
void main(){
int t=0;
float pw;
24:デフォルトの名無しさん
07/08/29 12:27:45
ただエディタヘ貼り付けただけで、特に手を加えていないんだが、
こんな具合にきちんと出力されていくぞ。
pw=1.000000
pw=1.040811
pw=1.083287
ところで、1.0をかけるのは意味がない。やるならせめてdoubleへのキャストにしろ。
float使うなdoubleにしろ。
eの累乗ならexp関数にしろ、こっちのほうが精度も速度もいい。
25:20
07/08/29 12:50:12
>>24さんへ
レスありがとうございます。
exp関数を用いたところ
error C2064: 1 引数を取り込む関数には評価されません。
とエラーが出てしまいます。
他の部分がおかしいのでしょうか・・・。
fpout=fopen("outputvoltage.txt","w");
p1=vout;
for(t=0;t<=T;t++){
if(0<=t&&t<=t1){
pw=exp(t/25.0);
inver=1.0/pw;
vt=-1.0*vin*(1-inver);
printf("V=%g\n",pw);
*p1=vt;
++p1;
fprintf(fpout,"output voltage = %g\n",vout);
}
として、累乗計算の時点で前述のような計算結果になってしまい質問した次第です。
26:デフォルトの名無しさん
07/08/30 00:20:56
>>25
「C2064」でググれ…と言いたいトコだが。
「exp」っていう名前の変数使ってないか?
こういうのはアウトだぞ
int printf = 0;
printf("Hello world!"); // C2064 error
解決するには
1:関数名にスコープ解決演算子をつける
int printf = 0;
::printf("Hello world!"); // ok
2:変数名を変える
int count = 0;
printf("Hello world!"); // ok
関数名と同じ変数名を使うとロクな事が無い。留意の事。
27:デフォルトの名無しさん
07/08/30 00:34:01
おそらく23に書いてある#define exp 2.71828を
そのままにしているだけだろう。
28:デフォルトの名無しさん
07/09/07 15:06:58
string hogeっていうのがあったとして
hogeのn番目の文字を取り出してcharに入れたいんですが
どうすれば出来ますか?
29:デフォルトの名無しさん
07/09/07 15:13:43
hoge[n]
30:デフォルトの名無しさん
07/09/29 08:13:39
>>29
うまくいきました。本当にありがとうございました。
31:デフォルトの名無しさん
07/10/02 21:49:32
ぬっちゃけ回答者ってプロ級の人ばかり?
32:デフォルトの名無しさん
07/10/02 22:01:02
いいえ
33:デフォルトの名無しさん
07/10/02 23:23:20
プログラミングについて色々お話聞かせて><
34:デフォルトの名無しさん
08/01/16 23:54:59
まだC/C++勉強してんの?
35:デフォルトの名無しさん
08/02/19 11:59:22
一次元の配列を同じ値で埋めたいのですが、何か高速な方法はありませんか?
36:デフォルトの名無しさん
08/02/19 12:05:46
array[10] = {0}
じゃ駄目かい
37:デフォルトの名無しさん
08/02/21 20:09:38
coutで出力するときに最初にたとえば
processing
って表示して
processing.
processing..
processing...
みたいに一文字ずつ書き足していきたいんだけどまじめにどうしたらいい?
cout<<"."とかputchar('.')で実行すると、改行がくるまでターミナルに表示されなくて困ってます。
38:デフォルトの名無しさん
08/02/21 20:16:23
cerrはバッファリング無しだからどうか
39:デフォルトの名無しさん
08/02/21 20:17:39
std::cout << std::flush でいけたような
40:デフォルトの名無しさん
08/02/23 02:43:53
>>38
>>39
エラー出力とバッファリングのメンバー変数(?)ですよね。
勉強になりました。㌧クス
41:デフォルトの名無しさん
08/03/29 13:33:03
cstringとstringって何が違うのですか?
42:デフォルトの名無しさん
08/03/29 15:49:32
<string.h>と<cstring>はほぼ同じもので、
cの標準ライブラリ(strcatとかstrcpy)が宣言されている
前者は大域名前空間になる
stringはC++の文字列ライブラリで<string>に宣言されている
CStringはまた別のライブラリ
で、だいたいあってると思うw 確認してないが
それぞれの使い方は調べれ
43:デフォルトの名無しさん
08/04/29 19:07:22
メールソフトはタイムゾーンをどのようにして取得しているのでしょうか?
独自にテーブルを持っているのでしょうか?
それともOSから取得できるのでしょうか?
44:デフォルトの名無しさん
08/04/30 00:46:51
<開発環境>[OS:WinXP SP2][コンパイラ:VC++2005 Pro]
<やりたいこと>PC(WinXP pro)の特定ソフトを特定のIPアドレスにアクセスさせたくない。
<前提条件>ルーターではなにもしてはいけない(ソフトで解決すること)
<調べたこと>IPHLPAPIでルーティングテーブルをいじって対応? ルーティングテーブルのゲートウェイをありえないところにする?
これだとすべてのソフトでIPアドレスにアクセスできなくなるが、、、。
上記、ヒントなりをいただければと思います。
45:デフォルトの名無しさん
08/04/30 00:58:42
>>44
・まともなセキュリティソフトをインストールして個別設定でそのアプリの動作を制御する。
・そのアプリを改修する。
・諦める。
46:デフォルトの名無しさん
08/04/30 01:07:24
>>45
早速の返信ありがとうございます。
>・まともなセキュリティソフトをインストールして個別設定でそのアプリの動作を制御する。
セキュリティソフトについてはすでに導入しているのですが、
設定しても恐らく、"その設定自体をユーザーが変えてしまう"ことが予想されます。
>・そのアプリを改修する。
現状問題となっているアプリケーションは、P2Pソフトだったり、ゲームだったりと多岐にわたります。
(説明不足で申し訳ありません)
>・諦める。
orz
47:デフォルトの名無しさん
08/04/30 01:14:52
> その設定自体をユーザーが変えてしまう
お前の作るソフトウェアも同じだろ。
設定を変えられないとしても、強制終了されればおしまい。
ただ、ユーザが管理者 (Administrators)でないと仮定できるなら、
どのソフトでも結構いける。その手のソフトは
たいてい管理者しか設定をいじれないようにできるはずだから。
サービスなんかにしてしまえばただのユーザは終了させることもできない。
48:デフォルトの名無しさん
08/04/30 01:44:48
>>47
返信ありがとうございます。
>お前の作るソフトウェアも同じだろ。
おっしゃる通りです、、、orz
>ただ、ユーザが管理者 (Administrators)でないと仮定できるなら、
ユーザーはAdminです、、、orz
すでにこの段階で問題なのかも知れません。
もう少しなにかいい方法がないか思案してみます、、、。
49:デフォルトの名無しさん
08/04/30 03:53:28
企業だったら、セキュリティコンサルに相談することお勧め。
最近は、ログ解析だけを定期的に行なうなんてことをするコンサルもあることだし。
50:デフォルトの名無しさん
08/04/30 14:25:35
>>49
返信ありがとうございます。
コンサル入れたりするのも1つかもしれません。
検討してみます。
現状、IPHLPAPIを使用して
GetTcpTableを使い、定期的に監視して、
あらかじめ用意したブラックリストと照らし合わせ、SetTcpTableでアクセスできないようにすることをやってみます。
(サービス用アプリとして作成して様子をみます)
51:デフォルトの名無しさん
08/05/03 13:36:21
Visual C++ 2008 Express Editionのコンソールアプリプロジェクトで
using namespace std;
を使うにはどうしたら良いのでしょうか。
stdafx.hに書くと「C2871: 'std' : この名前を指定された名前空間は存在しません。」と怒られます。
ソールファイルに
std::cout << "orz" << endl;
などど書いても「C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。」と怒られます。
空のプロジェクトで一から書くと出来るようですが、Unicodeアプリにならないので困っています。
52:デフォルトの名無しさん
08/05/03 13:49:42
>>51
標準C++ライブラリをなにかインクルードしてるか?
53:51
08/05/03 14:50:25
標準C++ライブラリが具体的に何を指すのかは解りませんが、stdafx.hに以下内容を追記したらコンパイルが通りました。
初歩過ぎる質問に答えていただき本当にありがとうございました。
#include <iostream>
using namespace std;
54:デフォルトの名無しさん
08/07/13 19:48:30
ユニークな名前ってどうやって生成するの?
55:デフォルトの名無しさん
08/07/13 19:59:03
ひらめきが大事だね。
56:デフォルトの名無しさん
08/08/05 15:26:30
どのクラスにでも当てはまりそうな戻り値はどのように管理するのが一般的なのでしょうか?
例としては無効な引数、~が見つからない、致命的なエラーなどです。
クラス毎に static const ~ としてもいいのですが、同じ値に保つのが面倒になりそうだし、、、
専用のクラスを作り下記のようにしようかと考えたのですが、スマートではない気がしています。
皆さんはどうされていますか? よろしくお願いします。
class CResultCode {
static const int s_success = 1;
static const int s_falal_error = -1;
static const int s_invalid_param = -2;
static const int s_file_not_found = -10;
static bool IsSuccessful(int in_result) { return in_result > 0; };
};
class CHoge {
int Hoge(){ return CResultCode::s_successed; };
};
void main() {
CHoge hoge;
int res = hoge->Hoge();
if ( !CResultCode::IsSuccessful(res)){
エラー処理
}
}
57:デフォルトの名無しさん
08/08/05 15:52:09
// cost.h //
extern PGDLLIMPORT double seq_page_cost;;
を含むヘッダーファイルがあり,PGDLLIMPORTはべつのヘッダーで
#define PGDLLIMPORT __declspec (dllexport)
と定義されてます
これをcostsize.cというファイルにインクルードしてるんですが.
extern PGDLLIMPORT double seq_page_cost;;
ってどういう意味なのかわかりません
どういう意味を持つのか教えてください.
お願いします.
ちなみに __declspec (dllexport)で調べてもようわかりませんでした
58:デフォルトの名無しさん
08/08/05 18:19:11
>>56 enum
59:デフォルトの名無しさん
08/08/05 18:21:13
>>57
> ちなみに __declspec (dllexport)で調べてもようわかりませんでした
↓このサイトがおすすめ。
URLリンク(www.google.co.jp)
60:デフォルトの名無しさん
08/08/05 18:39:28
それで判るくらいだったら聞かねぇよ!
61:デフォルトの名無しさん
08/08/05 18:45:50
公式のドキュメントも使ってる人の記事もいっぱいヒットするのに、
それ以上の説明がここでできるとは思わない。
62:56
08/08/05 19:11:19
>>58
ありがとうございます。 度々すいませんが、その場合は専用のnamespaceを設けてという事でしょうか?
それともヘッダ1つ増やして個々にインクルードするだけで良いのですか?
となると、成否判定に#defineマクロを使いたくなってしまうのですが許されるのでしょうか。。。
「C++ならdefine使うな」って怒られたりしませんか…? よろしくお願いします。
63:デフォルトの名無しさん
08/08/05 21:20:07
>>59
レスどうも
すでに試してまして・・・
で,いかんせん,どこの何というDLLから何を
エクスポートしてるのか,てんでわからんのです
64:デフォルトの名無しさん
08/08/05 21:22:11
>>62
ResultCodeクラスを作るなら、戻り値を整数型にしないでResultCode型にしちゃえばいいじゃん。
で、適当なキャストオペレータを用意しておけば成否判定に使えるし。
65:デフォルトの名無しさん
08/08/05 21:23:14
>>63
>57と>63で質問していることが全然違うわけだが。
66:デフォルトの名無しさん
08/08/05 21:32:06
>>65
自分初心者なもので
質問に一貫性が無いのは,すいません
なんというか両方答えて頂ければと思うんですが…
67:デフォルトの名無しさん
08/08/05 21:48:21
>>57
>どういう意味を持つのか教えてください.
どこぞの何とかいうDLLから何ぞやをエクスポート
>>63
>で,いかんせん,どこの何というDLLから何を
>エクスポートしてるのか,てんでわからんのです
costsize.cで作られるDLLからseq_page_costを
68:56,62
08/08/05 23:44:56
>>64
ありがとうございます。そうしていこうと思います。
値渡しで返して嫌がられたりする事はあるのでしょうか? ← ここが一番心配なのです。
最適化すれば一時オブジェクトは作られないのかなあ…
69:デフォルトの名無しさん
08/08/05 23:51:25
ResultCodeクラスにメンバなんかenum値一個しか要らんでしょ。
そんなもん値渡ししたって参照よりもコンパクトなくらいだ。
70:68
08/08/06 00:01:01
>>69
お蔭で解決する事が出来ました。 何度もありがとうございました。
71:デフォルトの名無しさん
08/08/18 08:29:05
int *p = new int [4];
の時
delete [] p;
delete p;
って使い分けないといけないの?
72:デフォルトの名無しさん
08/08/18 08:39:40
>>71
new[] の場合は delete[]
使い分けないといけない
73:デフォルトの名無しさん
08/08/18 08:45:23
>>72
さんくす
74:デフォルトの名無しさん
08/08/18 13:19:15
delete p;
だと1個目しか消せない。
75:デフォルトの名無しさん
08/08/18 13:22:42
そうなんか?
そう書き間違えた場合の、文法チェックとか、メモリリーク調査とか、可能?
76:デフォルトの名無しさん
08/08/18 13:25:37
>>74
ダウト
処理系によってはコア吐くぞ
77:デフォルトの名無しさん
08/08/20 08:54:58
intならデストラクタが無いからどっちも同じ
78:デフォルトの名無しさん
08/08/20 08:56:18
どっちも同じってことはない。
79:デフォルトの名無しさん
08/08/20 09:57:39
Visual C++ 2008 ではC++でなくCのコンパイルできないの?
80:デフォルトの名無しさん
08/08/20 10:38:50
できるよ
81:デフォルトの名無しさん
08/08/20 10:48:53
CLRにするとC++/CLI専用になるから *.c はコンパイルできない。
Win32のプロジェクトならできる。
82:デフォルトの名無しさん
08/08/20 11:53:10
サンクス
83:デフォルトの名無しさん
08/08/20 13:17:31
>>74
未定義じゃない?ANSIの仕様とか読んでないけど
処理系によってはdeleteとdelete[]が等価だったりするし
84:デフォルトの名無しさん
08/08/21 01:12:31
PCモニタをオフにするようなコードって,どうやって書けば良いんでしょうか?
下のフリーソフト,アセンブラで見たらWindowsAPIのKernel32.Sleep呼んでるみたいですけど・・・
URLリンク(hp.vector.co.jp)
85:デフォルトの名無しさん
08/08/21 03:01:07
>>83
うん。未定義。
86:デフォルトの名無しさん
08/08/21 09:12:35
>>84
うろ覚えだが
PostMessage(HWND_BROAD_CAST, WM_COMMAND, MONITOR_OFF)みたいな感じで。
87:デフォルトの名無しさん
08/08/21 12:26:14
>>86
ありがとうございます!やってみます。
88:デフォルトの名無しさん
08/08/22 12:32:13
>>86
SendMessageで出来ました。引数はもろにそんな感じでした。
Sleepは一休みしてから電源オフに持ってくためだったんですね。。。
あと,モニタ電源オフの状態からオンに復帰するときに,
マウスの移動は無視して,
マウスのクリックやキーを押すときのみに反応するコードはどんな風に書けばいいんでしょうか?
誰かやさしい人おしえてください。
89:86
08/08/22 20:34:20
>>88
ちょうどそんなフリーソフトを作った。(でもしばらく公開予定はない。)
自分は以下のような方法を使ってる。
・モニタをオフに
・グローバルフックでマウスの操作を監視
・マウスの移動を検地した場合はモニタをオフにする
90:デフォルトの名無しさん
08/08/22 22:35:59
>>89
一体いつモニタをオンにするんだ?
91:86
08/08/23 00:05:54
>>90
プログラムでオンにする必要はない。マウスのボタン押下やキー押下で勝手にオンになるから。
92:デフォルトの名無しさん
08/08/23 11:31:45
int main()
{
unsigned char *s; // 文字列用ポインタ用意
s = "Test";
・・・・
・・・
・・
このようなプログラムがあるのですが、二つほど質問があります。
unsignedでchar型を宣言すると、何かいいことがあるのでしょうか?
また、参考本には載っていなかったのですがこのような文字列の
代入方法は正しいのでしょうか?文字配列を用意して、strcpyで代入するとしか載ってなかったので…
93:デフォルトの名無しさん
08/08/23 13:19:11
>>91
>・マウスの移動を検地した場合はモニタをオフにする
オンではなくてオフ?
94:デフォルトの名無しさん
08/08/23 13:29:57
>>93
>90、>91
>>92
sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。
# つまり、s = "Test"の後でs[0] = 't'とはしてはいけない。
尚、charをunsignedで宣言しておくと、標準関数を呼ぶたびに(厳密には)キャストが必要になるので巧くない。
その代わり、2バイト文字などを扱うときに多少扱いやすくなる。
95:86
08/08/23 15:17:23
>>93
>>88
>>あと,モニタ電源オフの状態からオンに復帰するときに,
>>マウスの移動は無視して,
マウスの移動があるとオンになっちゃうからオフにする。
96:デフォルトの名無しさん
08/08/23 19:42:47
>>92
実質的な違いはない。後の処理の関係でどっちにするか選ぶとかその程度。
>>94
>sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。
ちがうよね?
97:96
08/08/23 19:44:58
>>92
さっきのは「unsignedでchar型を...」のみの回答でした。
>このような文字列の代入方法は正しいのでしょうか?
正しいです。
98:デフォルトの名無しさん
08/08/23 19:52:38
正しいし便利なのでオススメ
99:デフォルトの名無しさん
08/08/23 23:12:12
>>89
モニターの電源切っておけばいいんじゃね?
100:86
08/08/24 11:33:50
>>99
マウス・キーボード操作でONにならない状態にするってことだよね。
調べた範囲では無理そうだった。
もしかしたら低レベルな方法であるのかも知れないけど。
それにこの場合マウスの移動だけ無視したいので、
マウス操作の監視は必須で、手間は変わらないと思う。
101:デフォルトの名無しさん
08/08/24 20:41:41
一時的にマウスのドライバを無効にしとくのはどう?
クリックも無視していい状況だよね?
102:デフォルトの名無しさん
08/08/24 21:02:48
難しそうだお
103:86
08/08/24 21:24:58
>>101
>>88
クリックは無視しちゃだめ
104:デフォルトの名無しさん
08/08/24 22:19:27
そうか、マウスのクリックでもモニタの電源ONになるのか
知らなかった
105:デフォルトの名無しさん
08/08/24 22:32:36
>>95
>マウスの移動があるとオンになっちゃうからオフにする。
な~るほどね!うまい。
106:デフォルトの名無しさん
08/08/25 01:15:51
俺はCoolMonitorOffってソフトを使ってて>>86はその作者かと思ったんだけど、
>>89で(でもしばらく公開予定はない。) とあるから別人か。
Pauseキーに割り当てて愛用してるよ。作者さんありがとーね。見てないだろうけど。
107:86
08/08/25 18:57:42
>>106
うん。別人。CoolMonitorOffは知らなかったんだけど似てるな。
コマンドライン引数でモニタオフにするまでの時間の指定やWindowsのロック、
マウス移動での復帰有無などを指定できるようにしてる。
公開して色んな人に使ってもらいたいんだけど、
やり方知らないのと、面倒そうなんでやってないんだよね。
そのうち自分のホームページ作って公開しようかなと考え中。
欲しかったらよかったらあげるよ。ソースもつけて。
108:デフォルトの名無しさん
08/08/25 21:28:21
>>107
ソース見てみたいです。ください。
109:86
08/08/26 10:31:42
>>108
アップしました。
URLリンク(a-draw.com)
ミニアップローダ(~20MB)の up4006.zip
pass:dispoff
110:デフォルトの名無しさん
08/08/26 23:49:05
>>109
ありがとう。
「アプリケーションが初期化できませんでした。エラー0xc015002~」
とでるんですが,原因はなんでしょうか。
111:86
08/08/27 20:22:16
>>110
dllとexeでリンクするランタイムのタイプが違ってた。これかな。なぜか自分の環境では動くけど。
修正して再アップしました。
URLリンク(www.hsjp.net)
up38638.zip
パスワード:なし
112:デフォルトの名無しさん
08/08/28 02:04:33
>>111
な~るほどね!ソースみて納得。勉強になりました。ありがとう。
113:デフォルトの名無しさん
08/09/02 21:57:31
Windows用USBデバイスのインストーラ及びアンインストーラをVCで
作ってます。
汎用性を持たせるためにinf及びdelファイルを書き換えるだけで
インストーラ、アンインストーラは再コンパイル不要とした作りに
したいと思っています。
そこで、特定のINFファイルから"USB\VID_xxxx&PID_xxxx"を
抜き出して行うような方式としたいとおもうのですがなにか
方法(Win32 API)は無いでしょうか。
114:113
08/09/02 22:28:12
デバドラ板で質問してみます。
115:デフォルトの名無しさん
08/09/06 22:55:49
C#がWindowsプログラミングし易いのはわかっているけど、
もうC++にどっぷり浸かっているから。
Javaは演算子のオーバーロードがないから、複素数計算では
致命的だし。
でも、C++0xでまた仕様が大幅にかわるのかな。もういいかげ
んにしてほしいな。
116:デフォルトの名無しさん
08/09/07 00:13:09
C++のことだし、建前としては今までのプログラムも
そのままコンパイルできるってことになっているはず。
117:デフォルトの名無しさん
08/09/07 00:17:27
std::string name = "unko";
std::cout << "name = " << name << std::endl;
error C2679: 二項演算子 '<<' : 型 'std::string' の右オペランドを扱う演算子が見つかりません (または変換できません)。
コンパイルできません。なにこれ。
118:デフォルトの名無しさん
08/09/07 00:18:58
>>115
仕様が大きく変わった場合、書き直しを辞さないほどのよっぽど有益なメリットが無い限り普及なんてしない。安心して良し。
119:デフォルトの名無しさん
08/09/07 00:22:55
>>117
1行目を読んで、続きを読む気力が失せた
120:デフォルトの名無しさん
08/09/07 00:27:56
>>117
#include <string> 抜けてない?
121:デフォルトの名無しさん
08/09/07 00:32:05
>>120
書いてないですが、std::string はコンパイルエラーになってないので大丈夫です。
122:デフォルトの名無しさん
08/09/07 00:35:42
>>121
「書いてないですが」とかそういう問題じゃない。書け。
123:デフォルトの名無しさん
08/09/07 00:37:27
>>121
現に<<でエラーになっているじゃないか。全然大丈夫じゃないだろ。
124:デフォルトの名無しさん
08/09/07 00:43:05
あまりいじめないでsください
125:デフォルトの名無しさん
08/09/07 03:55:34
つ[s]
126:デフォルトの名無しさん
08/09/07 07:55:24
C++はまったく糞だな
127:デフォルトの名無しさん
08/09/07 10:13:52
おまえがな
128:デフォルトの名無しさん
08/09/07 15:15:09
char c[ 12 ]; // ok
const int dim = 12;
char c[ dim ]; // ok
int x = 12;
const int y = x;
char c[ y ]; // error !
「配列の要素数はコンパイル時に決められていなければならない」
っていうのの意味がわからん・・・ ・_・
129:デフォルトの名無しさん
08/09/07 15:29:05
>>128
コンパイラの気持ちになって出力するアセンブリコードを考えないと、確かにわかんないだろうねぇ。
そういう制約が嫌なら std::vector を使っておけばいいよ。
130:デフォルトの名無しさん
08/09/07 23:06:26
newって中でなにやってるの?
APIでメモリ確保してコンストラクタ呼んでるだけ?
131:デフォルトの名無しさん
08/09/07 23:08:23
>>130
そう思って差し支えない。もっと詳しく知りたければアセンブリの出力を見れ。
132:デフォルトの名無しさん
08/09/08 15:04:21
ググるのにも限界感じたので、教えてください。
BCB 6.0 Personal でTWAIN.DLLを読んで、画像をスキャンするものを作っています。
OSはWindows XPです。
画像をスキャンしてImageコンポーネントに貼り付けるところまで書いたのですが、
Imageに表示される画像が縦に2分割されて、左右反対になってしまうので困って
います。何か考えられる原因はないでしょうか?
TWAINにアクセスする部分はVectorでダウンロードしたフリーのVC++向けライブラリ
を使っていて自作ではないのですが、TWAIN本家サイトの説明書と比べて、取り立
てて変わったことをしてるとは思えません。Imageに貼り付けるのは下のようにしてい
ます。
HANDLE dib;
mTwainManager.Scan(Handle,&dib); //フリーのライブラリに
if ( dib == 0 ) return;
LPBITMAPINFO bmi = (LPBITMAPINFO)::GlobalLock(dib);
ImageScan->Picture->Bitmap->Height = bmi->bmiHeader.biHeight;
ImageScan->Picture->Bitmap->Width = bmi->bmiHeader.biWidth;
SetDIBits(
ImageScan->Picture->Bitmap->Canvas->Handle,
ImageScan->Picture->Bitmap->Handle, 0,
(UINT) bmi->bmiHeader.biHeight,
(Byte*)((Byte*)bmi + sizeof(BITMAPINFOHEADER)),
bmi, DIB_RGB_COLORS );
::GlobalUnlock( dib );
::GlobalFree( dib );
133:デフォルトの名無しさん
08/09/08 21:21:54
あー、一つだけ言えることができる。
ANSI Cあたりまではなんとかなったんだが、C++3.0くらいになると
かなり複雑。あまり触りたくなかった。
134:デフォルトの名無しさん
08/09/09 12:49:51
>>132です。自己解決。
ハンドルとか初期化しまくったら、良く分からないけど直りました。
お騒がせしました。
135:デフォルトの名無しさん
08/09/14 19:35:07
いままでソース分割してコンパイルでなんとも無かったんですが
template入れたとたんソース分割コンパイルが通らなくなってしまいました
分割したファイルをコピペでひとつにするとコンパイルできるのでコードが間違ってるわけではないと思います
templateを使うとソース分割できなくなる仕様なんでしょうか?
コンパイラはBCCを使ってます
136:デフォルトの名無しさん
08/09/14 20:05:48
URLリンク(d.hatena.ne.jp)
ここでも読んでみ
137:デフォルトの名無しさん
08/09/15 15:29:33
500000までの素数を判定して、出力するプログラムを作っているのですが、実行するとカーソルが点滅したまま止まってしまいます。
どのようにすればよろしいでしょうか。よろしくお願いします。
#include<stdio.h>
long i=0,j=0,primecounter=0,chk_prime[500000],x=0,y=0;
int main (void)
{
for(i = 2;i < 500000;i++){
for(j = 1;j < i;j++){
if(i % j == 0){
primecounter++;
}
if(primecounter == 2){
printf("%ld",chk_prime[x]);
chk_prime[x] = i;
x++;
primecounter = 0;
}
else{
primecounter = 0;
}
}
}
for(y = 0;y <= x;y++){
printf("%ld",chk_prime[y]);
}
return 0;
}
138:137
08/09/15 15:39:38
すみません。環境を書き忘れてました。
環境は
OS Mac OS X 10.5.4
コンパイラ GCC4.2
です。
すみませんでした。
139:デフォルトの名無しさん
08/09/15 16:05:26
C++オセロ完成したよー\(^o^)/
URLリンク(www8.uploader.jp)
URLリンク(www8.uploader.jp)
後はあれだ、COMの頭脳を書いていくだけだ・・・。
みんなでCOMクラスのselectメソッドを書き換えて勝負させようぜ!!
140:デフォルトの名無しさん
08/09/15 16:07:16
C言語で素晴らしいオセロを作らないか?
スレリンク(tech板)
こっちでもないか
141:デフォルトの名無しさん
08/09/15 16:07:17
>>139
zipの方にはソースとexeファイルが入ってる。
exeファイルの方は、>>139にテキストでうpしたソースの最後に
system("pause");を足したものをコンパイルしただけ。
心配なら自分でコンパイルしてね!!
142:デフォルトの名無しさん
08/09/15 16:10:00
>>140
俺はこのスレで4日前くらいからC++でオセロを作ってるんだ・・・(´・ω・`)
ム板なんて!!ム板なんて・・・!!時々行くけどね。
C++の勉強がしたいだけだからそのスレには用はないかな・・・。
オセロのアルゴリズムを考えるには参考になりそうだけどね。
143:デフォルトの名無しさん
08/09/15 16:10:50
ごめん、激しく板違いでしたwwww
恥ずかしい誤爆したぜ!!ww
VIPに帰ります。。。
144:デフォルトの名無しさん
08/09/15 16:18:07
次はWindows GUIに挑戦だ
145:デフォルトの名無しさん
08/09/15 16:26:16
>>137
URLリンク(kansai2channeler.hp.infoseek.co.jp)
見るの面倒だったので、てきとうに作ってみた。
無駄が多いけどね。
146:デフォルトの名無しさん
08/09/15 16:30:52
char prime[500000]; を1で初期化して、
n=2 → √500000と動かして
prime[n]==1ならば、nの倍数の配列すべてに0を入れる
するとprimeが1のもの
147:デフォルトの名無しさん
08/09/15 16:32:29
エラトステネスのふるい
でググれ
148:デフォルトの名無しさん
08/09/15 16:42:35
コンピュータの対戦できるソフト
BearRev Professional Edition
URLリンク(www.vector.co.jp)
149:デフォルトの名無しさん
08/09/15 16:43:45
まぁついでなので>>139のソースに関して何かコメントあれば下さい。
C++まだ初めて4日目(多分)なので、オブジェクト指向的なプログラミングになれてません。
ここはこうした方がいいぜ!!ってのあればよろしくお願いします。
>>144
もちろんそのつもりだよん
150:デフォルトの名無しさん
08/09/15 16:46:31
動けばいい 動かなかったら何言語使っていてもだめ
151:デフォルトの名無しさん
08/09/15 16:51:58
>>137
ループの終了条件
{}の位置
ついでにprintの位置
152:137
08/09/15 17:02:14
>>145
ありがとうございます
参考になります
>>146
ありがとうございます。
チェックしてみます。
>>147
ありがとうございます。
その方法でも試してみたいと思います。
>>151
具体的な指摘ありがとうございます。
終了条件がどのように間違っているか指摘していただきたいのですが、よろしければお願いします。
153:デフォルトの名無しさん
08/09/15 17:11:17
>>137
デバッガ
154:デフォルトの名無しさん
08/09/15 19:12:51
>>152
for(j = 1;j < i;j++){
if(i % j == 0){
primecounter++;
}
1とそれ自身で割れるかどうかをチェックしてるのにj < iだと自身で割ることなく終了する
j <= iに変えれば自分で割ったときもチェックできる
155:トミー ◆xb8eIST5.k
08/09/15 21:51:15
初めまして。質問させていただきます。
C言語を始めようと思い、いろいろなページを見てみたら、ほとんどにおいて
「まずコンパイラをダウンロードしましょう」と書いてあり、中でも例として
Borland C++ 5.5がよく書いてあったので、これをダウンロードしてみようと
思いました。
URLリンク(www.codegear.com)で「C++ Compiler
5.5/Turbo Debugger」をクリックし、個人情報も登録しましたが、最後に出てき
たダウンロードボタンを押してみると、「サーバーが見つかりません」と出てしま
いました。
見ると、「上記のダウンロードサイトにアクセスできないときは、CodeCentral の
ダウンロードページをお試しください。CodeCentralのダウンロードページを利用
するには、CDNへのログインが必要です。」と書いてあるので、「CDNへのログイン」
の文字をクリックしてみましたが、英語のページで、Login nameやpasswordを入力
する欄が出てきました。(日本語のページもあるようです。)
わたしはCDNには会員登録していません。CDNに登録しないと、C++ Compiler 5.5/
Turbo Debuggerをダウンロードすることはできないのでしょうか。
回答お願いします。
156:デフォルトの名無しさん
08/09/15 22:02:22
以下のコードでコンパイルエラー(C2440)が出るのですが、何が間違っているのでしょうか?
環境は、VC++6.0です。
class CBase
{
public:
CBase& operator=(int val) {}
};
class CDerived : public CBase {};
int main()
{
CDerived val = 1; // この行で、コンパイルエラー
return 0;
}
エラーメッセージは、
C2440: 'initializing' : 'const int'から'class CDerived'に変換すrことはできません。
コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。
157:137
08/09/15 23:29:29
>>154
ありがとうございます
肝心なところですね
カーソルが点滅したまま終了しないですが、、
何度も申し訳ございませんが、何が問題か分かる方お願いします。
158:デフォルトの名無しさん
08/09/15 23:33:54
>>156
operator =はCDerivedで定義される暗黙のやつがCBaseのを隠してしまう。
だから、CDerivedで定義し直すなどしないといけない。
もっとも、CDerived val = 1で行われるのは代入ではなく初期化なので、
そういうことをやりたければ、CDerivedにint型の引数を取るコンストラクタを作る必要がある。
159:デフォルトの名無しさん
08/09/15 23:59:55
>>137,157
回している回数じゃないかな
Sigma[i=1...499998]i = 499998*(1+499998)/2 = 124999250001
待っていればいつか終わると思うよ
160:デフォルトの名無しさん
08/09/16 00:05:22
>>157
{}の位置が悪い
自分より小さい数で割るたんびにcountを0に戻してる
自分より小さい数で全部割りおわってからcountが2であるかどうか調べないと
161:156
08/09/16 00:21:21
>>158
なるほど、そういうことか。
確かに、operator=を定義していなくても、オブジェクトの代入とか出来ますからね。
あれは暗黙で定義されているからってことか。一つ賢くなりました。
ありがとうございます。
162:137
08/09/16 01:03:17
>>159
ありがとうございます。
デバッガで見てみると回ってはいるようなので、しばらく待ってみることにします。
>>160
基本的なアルゴリズムが間違っていたのですね、、
ありがとうございます!
163:デフォルトの名無しさん
08/09/17 14:09:12
引数にリファレンスを渡すとオーバーヘッドが小さくなるんですか?
164:デフォルトの名無しさん
08/09/17 14:42:16
値のサイズがリファレンス(=ポインタ)のサイズに比べてかなり大きければなる
165:デフォルトの名無しさん
08/10/04 23:05:01
今勉強のために文字列クラスを自作しています。
それでoperator+=で文字列の代入結合まではなんとかできたのですが、
operator+の定義がうまくできません。
CString a, b, c;
a = "abc";
b = "def";
c = a + b; //"abcdef"にならない
デバッガで確認したところ、
CString CString::operator+(CString& str)
{
CString temp(*this);
temp += str; //ここまではうまくいっている。
return temp; //ここでデストラクタが呼び出されて、正しい結果を返せない。
}
一応デストラクタはこんな感じです。
CString::~CString()
{
if(ptr) delete[] ptr;
}
tempをstatic宣言したら、結合はうまくいったのですが、プログラム終了時に例外が出るようになってしまいました。
どうすればうまくいくのかどなたか教えて下さい。
166:デフォルトの名無しさん
08/10/04 23:14:22
>>165
コピーコンストラクタとoperator=作ってる?
167:デフォルトの名無しさん
08/10/04 23:16:07
いろいろと辺
168:165
08/10/05 08:09:11
>>166
operator=は作っていたのですが、コピーコンストラクタは作っていませんでした。
(operator= を定義しておけば必要ないと思っていたもので・・・)
コピーコンストラクタを作ったところ、うまく動作するようになりました。
どうもありがとうございました。
169:デフォルトの名無しさん
08/10/05 08:46:10
CString::operator+で、足し算定義しているのに、なんでその関数内部で
足し算が出来るんだよ? コンパイル通るのかよ
170:デフォルトの名無しさん
08/10/05 10:41:38
+ と += は別物だよ
171:デフォルトの名無しさん
08/10/05 11:27:46
べつなのはわかっている ここはなぜいいんだよ
temp += str; //ここまではうまくいっている。
172:デフォルトの名無しさん
08/10/05 11:38:20
// 実は勘違い
173:デフォルトの名無しさん
08/10/05 11:40:14
すまん間違えた
174:デフォルトの名無しさん
08/10/06 14:08:04
単純な事質問するんだけど
型の宣言って複数の関数をまたいでするって出来ないのかな?
うまく説明出来ないんで悪いんだけど
例えば
read.cpp
global.h
test.cpp
の3つがあった場合。
read.cpp内でint型を宣言するとread.cppで宣言した型を使った関数を作る(ここで代入)。
次にglobal.h内でread.cppで作った関数をextern void 何々();とする。
そして、test.cppでglobal.hをインクルードして、test.cpp内でread.cppで作った関数内で代入されたint型を読み込ませたい。
記述は間違ってないと思うんだけど、ビルドするとtest.cppで読み込んだはずの代入されたint型が読み込まれてなくて、定義されてないと出る
・・・初歩的な事で悪いんだけど、根本が違うのかな?ご教授お願いします。
175:デフォルトの名無しさん
08/10/06 14:11:48
>>174
「int型を宣言」とか「int型を読み込む」とか、かなり奇怪な話になっててよくわからん。
どうせ単純なミスかなんかだろ。実際のコード晒してみるのがいいよ。
176:デフォルトの名無しさん
08/10/06 14:19:44
余計な所省いて晒してみる、まだ日が浅くて酷いコードでごめん。
ReadingFile.cpp
int enemy_img;
void readingfile(){
enemy_img = LoadGraph("date/img/enemy.bmp");
}
GlobalM.h
extern void readingfile(); //全ての素材
enemy_move.cpp
void enemy_move_02(){
move02.enx+=sin(PI*move02.eny/80)*5;
move02.eny+=1.5f;
DrawGraph( move02.enx , move02.eny , enemy_img , TRUE ) ;
↑ここでReadingFile内の関数で指定したのを読み込ませたい。
DeleteGraph( enemy_img ) ;
}
177:デフォルトの名無しさん
08/10/06 14:28:55
>>176
extern int enemy_img;
178:デフォルトの名無しさん
08/10/06 14:35:16
>>177
ありがとおおお
でもどうしてintも読み込ませないといけないんだ?
既にReadingFile.cppで読み込んでいるし、多重定義になるかと思ってた。
179:デフォルトの名無しさん
08/10/06 14:47:41
コンパイラは、各ソースファイルを別々にコンパイルしている
他のソースに何か書いてあっても、
今コンパイルしてるソース (と、そのインクルード先) に書いてなければ、コンパイラには判らない
180:デフォルトの名無しさん
08/10/06 15:15:44
>>177は「int型のenemy_imgという変数がどこかにあるはず」という情報。
コンパイラはその「あるはず」という仮定をオブジェクトファイルに埋め込む。
そしてリンカが全部のオブジェクトファイルからその変数を探して、実際のアドレスに直す。
(見つからなかった場合はリンクエラーになる)
181:デフォルトの名無しさん
08/10/16 01:38:42
>>155ではありませんが、今私、全く同じ状況で困っています。
どなたかお答えいただけませんか?
182:デフォルトの名無しさん
08/10/16 02:10:05
>>181
URLリンク(www.microsoft.com)
これじゃだめなの?
183:デフォルトの名無しさん
08/10/16 03:47:20
問題文:2つの円の位置関係(交わる(交点)、含まれる、離れている)
先週C++を始めたばかりなので色々と書き方が解りません;;
考え方は解るのですが……
二乗や平方根などなど……
184:デフォルトの名無しさん
08/10/16 04:27:08
>>183
//
// 2つの円の重なりをチェックする。
//
// 引数
// x1, y1, r1 円1の中心x座標、中心y座標、半径
// x2, y2, r2 円2の中心x座標、中心y座標、半径
//
// 戻り値
// 0: 接する 正: 離れている 負: 重なる
//
int circle_check(int x1, int y1, int r1, int x2, int y2, int r2)
{
return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) - (r1+r2)*(r1+r2);
}
185:デフォルトの名無しさん
08/10/16 15:19:36
srand(0)とsrand(1)が同じ系列を生成するので、ソースコードを見てみたいのですが、
srandのソースコードってどこにありますか?
186:デフォルトの名無しさん
08/10/16 16:02:43
お使いのコンパイラによって実装は異なる
187:181
08/10/16 19:24:11
>>182
参考書を買って勉強しようと思っているのですが、その参考書で
『C++ Compiler 5.5/Turbo Debuggerをダウンロードして、それを使って勉強』
なものだったので、別のソフトだと操作方法がわからないんじゃないかと不安だったのです・・・。
とりあえずこれでやってみます!回答ありがとうございました。
188:デフォルトの名無しさん
08/10/16 20:24:04
C++の質問です。2つお願いします
・CString 形式のデータで""hogehoge""というデータが入っていた場合、
前後のダブルクォーテーションを簡単に除去する方法はありませんか?
・char buff[255][3][255] のようなデータをファイルで入出力したいのですが、
何か良い方法はありませんか?
189:デフォルトの名無しさん
08/10/16 21:18:55
>>188
メモリマップドファイルとstd::stringならsubstr
190:デフォルトの名無しさん
08/10/16 21:36:55
VC++2008proにて
特定のコード上で右クリックすると確実にフリーズするんですが
似たようなケースさらには対処法あったら教えてください。。
ググったけどほとんど情報が無く、似たような質問がされている所も未だ解答がなかったとです。。
原因は調査中です。ヘッダーファイルを適当にインクルードしまくったから無限ループ起きたか?
と思って全部コメントアウトしてみたけど無意味でした。。
他の情報としては、
普通はマウス乗せたらメンバの情報が出てきますが、そのコードではそれすら出てきません。
一応左クリックおよびファイルの編集はできます。
右クリックだけ永久砂時計が発動します。
他も何か手がかりになりそうな所あれば探したいんで
アレがひっかかってるんじゃね? とか言っていただけると助かります。
191:190
08/10/16 22:42:32
すまんスレチだったか。過疎なのか?
ちょっと他のところで聞いてみます。
192:デフォルトの名無しさん
08/10/16 22:44:03
インストールしなおしかな?
193:デフォルトの名無しさん
08/10/16 22:51:43
>>192
と思ったらこんなタイミングで……なるほど。
しかしDream SparkでDLした奴なんでもう一度isoをDLできるかどうか……?
MSに報告したほうがいいんでしょうかね。
194:190
08/10/16 23:35:13
他スレにて解決しました。お騒がせしました。
別件ですがついでにこちらで質問してみたいことが。
bool b1,b2,b3,b4;があって、
if(b1 && b2 && b3 && b4)
{ ~~ }
のようにやることは
if(b1){
if(b2){
if(b3){
if(b4){
~~
}
}
}
}
のようにやる事と同じように働いてくれるんでしょうか?
それとも前者はb1~b4をすべて求めてから論理積を計算し、
後者はfalseがあった時点で処理をやめる、という違いが生じるんでしょうか?
前々から疑問に思っていました。
195:デフォルトの名無しさん
08/10/16 23:42:58
前は、if-ifの方が速いと思ってたけど、実測すると論理積の方が速い
分岐予測より、論理積のコストは少ない
196:デフォルトの名無しさん
08/10/16 23:46:47
>>194
短絡評価と言って、左から順に見ていきfalseが出てきたら残りは評価されない。
だから上と下のどっちの書き方でも同じ意味になる。
もちろん、実際にコンパイラがどういうコードを吐くかは別として。
197:190
08/10/16 23:51:54
>>195-196
本当ですか、安心しました。
短絡評価、まぁ考えてみたら、してくれないとスマートじゃないですよねw
実測とかしたことない……やっぱそういう経験も役に立つんですね。
ありがとうございましたm(__)m
198:デフォルトの名無しさん
08/10/17 00:54:32
>>189
亀レスだけどサンクス、調べてみるよ。
199:デフォルトの名無しさん
08/10/17 02:49:46
>>198
str.trim('\"')でできそう!
200:デフォルトの名無しさん
08/10/17 09:01:45
>>185
メルセンヌツイスターのソースを使えば良いジャマイカ
201:デフォルトの名無しさん
08/10/17 14:06:39
簡単にコピペできるのはXORシフト ライセンスとかあんまりなさそうだし
商用に組み込んだとしても問題にならないのでは
202:デフォルトの名無しさん
08/11/04 18:46:54
文字列を入力して、それを配列に1文字ずつ入れていきたいのですが、どのようにすればよいですか。
具体的にソースを挙げて教えてください。
よろしくお願いします。
203:デフォルトの名無しさん
08/11/04 18:58:54
>>202
char buf[適当な長さ];
fgets(buf, sizeof(buf), stdin);
204:デフォルトの名無しさん
08/11/04 19:18:29
>>203
返信ありがとうございます。
205:デフォルトの名無しさん
08/11/05 14:47:28
typedef unsigned char bBuffer[128];
typedef DWORD wBuffer[32];
bBuffer A;
wBuffer B;
AからBにキャストするにはどうすればよいのでしょうか?
でるぴだと B:= wBuffer(A); なんですけど
206:デフォルトの名無しさん
08/11/05 15:24:37
キャストに配列を指定してはいけない。つまり、foo = (Foo [])bar;こういうのはできないのよ。
代入したいのならmemcpy()でも使う。
それにしてもObjectPascalは、型が緩いんだろうか。
207:205
08/11/05 16:37:40
>>206 ありがとうございます。
memcpy()で期待通りに出来ました。
delphiだとなぜか使えるんです。
208:デフォルトの名無しさん
08/11/07 16:14:41
wiiリモコンのライブラリってどこにあるんですか
URLリンク(www.thinkit.co.jp)
に載ってるところ探しても無いんですが
209:デフォルトの名無しさん
08/11/07 23:43:09
あるじゃん
210:デフォルトの名無しさん
08/11/08 01:32:35
あ、あった
ここですね
URLリンク(wiiyourself.gl.tter.org)
どうもです
211:デフォルトの名無しさん
08/11/08 02:14:04
ここで聞いていいのかわからんけど一応きいてみる
スレチならごめん
今、ユーグリット云々つかって最大公約数を求めるプログラム作ってて
URLリンク(kansai2channeler.hp.infoseek.co.jp)
ってとこまではできたんです。2つはできるんですけど
問題は3つ以上の数を調べるときなんです。普通に文字数を増やして計算させるだけじゃできないようで、
いろいろしたんですけど詰まってしまいまして
どこをどう変更すれば、3つ以上の数の最大公約数をしらべるプログラムになるのでしょうか
212:デフォルトの名無しさん
08/11/08 02:15:22
gcd(gcd(x, y), z);
213:デフォルトの名無しさん
08/11/10 19:33:43
¥nで文字数があわなくて1日中悩んでいたが
¥r¥nかよ!
ゲイツのバカヤロー!
214:デフォルトの名無しさん
08/11/10 19:58:35
>>213
何をいまさら。 UNIX原理主義者は始末に終えんな。
それは、デジタルリサーチのCP/M-80(CP/M-86)との互換性を保つために
そうなっている。 文句があるなら、墓の下で眠るゲイリーキルドールに
言え。
ちなみに、OS-9の行末コードは'\r'のみだ。
215:デフォルトの名無しさん
08/11/10 20:31:53
タイプライターに文句いえ
216:デフォルトの名無しさん
08/11/11 07:09:03
初歩的な質問なのですが、
staticはどう言った変数や関数に付ければ良いのでしょう。
staticの働き事態はわかるのですが・・・
217:デフォルトの名無しさん
08/11/11 08:44:01
>>216
・関数
外部に公開しない全ての関数につける。
単一ソースファイルでプログラムを作るのなら、staticをつけないのはmain()だけでいい。
・変数
自動変数で事が足りない場合。
関数外部で宣言したい場合で、外部に公開する必要がない場合。
218:デフォルトの名無しさん
08/11/11 12:09:23
C++でビットマップを表示するのに、("ファイル名")ではなく(variable)を使用するにはどうしたらいいでしょうか?
例:
String^ variable = "C:ファイル名";
Bitmap^b = gcnew Bitmap(variable); // エラー
219:デフォルトの名無しさん
08/11/11 13:04:54
C++/CLIは別スレへ
220:デフォルトの名無しさん
08/11/11 15:47:57
コンパイルをすると
_declspec(align('16'))の仮引数は配置されません
とエラーが出てしまいました。vectorのせいだと思うのですが、このエラーは
どういったときに出るのでしょうか・・・
221:デフォルトの名無しさん
08/11/11 17:35:36
Ubuntu 8.10 で手持ちの ANSI C プログラムをコンパイルしようとしたら、
usleep が無いと言われたのですが、usleep は unistd.h に入ってるはずですよね?
ちなみに Darwin の cc でコンパイルしたときはうまくいきました
/usr/include/unistd.h をみてみると
#if defined(__USE_BSD) || #defined (__USE_XOPEN_EXTENDED)
...
#endif
で囲まれてました。そこで cc に -D__USE_BSD オプションをわたしてみたものの
やっぱり定義されてないと言われます。
ubuntu の cc で usleep を使うときはなにかしらやり方があるのでしょうか?
222:デフォルトの名無しさん
08/11/11 17:49:13
URLリンク(www.linux.or.jp)
> POSIX.1-2001 では、この関数は過去のものと宣言されている。代わりに nanosleep(2) を使うこと。
> POSIX.1-2008 では、 usleep() の規定が削除されている。
とか書いてあるので、代わりに nanosleep を使ってみたらどうだろう
223:デフォルトの名無しさん
08/11/11 18:07:14
>>221
ansi cにusleep()などない!
224:デフォルトの名無しさん
08/11/11 23:26:53
>>218
まさかとは思うが、"C:\\ファイル名"とかいうオチじゃないだろうなw
225:221
08/11/12 09:58:31
>>222
情報どうもです。
とりあえず
#ifndef __USE_BSD
# define __USE_BSD
# include <unistd.h>
# undef __USE_BSD
#else
# include <unistd.h>
#endif
としてその場をしのいだんですが、そのうち nanosleep を使うように書き直したいと思います
226:デフォルトの名無しさん
08/11/14 03:21:41
メモリリークを調べるため_CrtSetDbgFlag関数を使おうとして
以下のように書いたのですがリンクエラーが出ます
#include <crtdbg.h>
・
・
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
// メモリリーク検出
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
・
・
・
}
エラー内容
GameⅠ error LNK2019: 未解決の外部シンボル __CrtSetDbgFlag が関数 _WinMain@16 で参照されました。
他にも何かインクルードする必要がありますか
開発環境はVS2003で、OSはWinXP_SP3です
227:デフォルトの名無しさん
08/11/14 08:05:07
ゲ製板からの出張乙
リンクエラーと自分で書いてるだろ
するべきことはインクルードではない
228:デフォルトの名無しさん
08/11/14 12:54:30
リリースビルドだったりしてな。
229:デフォルトの名無しさん
08/11/14 20:37:24
2003にあったっけ?
230:226
08/11/14 23:40:50
>>227
なぜゲ製板とわかるのでしょうか
>>228
DebugかReleaseのとこですよね
Debugにしています
よくわからないので新規プロジェクトで試したらできました
これに少しづつ作ったものを貼り付けていって原因を探してみる
231:デフォルトの名無しさん
08/11/15 23:28:04
不特定多数のデータを受け取る際に、スペースで区切りながらそれらを配列に格納するにはどうすればよいのでしょうか。
例として、
「2 3 5 6」
「2 3 1 3 4 5 2」
というスペースで区切られた数があり、これらをそれぞれ別の配列に格納したいのです。
入力は
2 3 5 6(ここでエンター)
2 3 1 3 4 5 2
となります。
コードと一緒に解説してくださるとありがたいです。
232:デフォルトの名無しさん
08/11/16 00:16:28
つ[strtol()]
233:デフォルトの名無しさん
08/11/16 00:52:12
すいません。
C++で、コンパイラのように構文解析をする処理などを勉強できる書籍はないでしょうか?
プログラム板に初めてくるので、このスレでいいのか判断に迷いますが、、、
よろしくお願いします。
234:デフォルトの名無しさん
08/11/16 01:03:27
コンパイラの教科書の最初の方に載ってるよ
235:デフォルトの名無しさん
08/11/16 01:12:08
アサーションをインラインで宣言して、どこの行でエラーが起こったか知りたいです。
以下の様に書いてみましたが、インライン関数MUSTOKの行数でエラーが起こった、もしくは、assert関数がある行が
表示されてしまいます。できればこの関数MUSTOK(0==1);がある行が知りたいのですが、どうしたらよいでしょうか?
実行環境
gcc バージョン 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
ubuntu8.4
ソースコード
==
#include <cassert>
#include <iostream>
inline void MUSTOK(bool cond)
{
if(!cond)
{
std::cout<<"file=:"<<__FILE__<<"\tlie=:"<<__LINE__<<std::endl;
}
assert(cond);
}
int
main(int argc,char *argv[])
{
MUSTOK(0==1);
return 0;
}
==
実行結果
file=:assert_test.cpp lie=:7 assert_test: assert_test.cpp:9: void MUSTOK(bool): Assertion `cond' failed. Aborted
236:デフォルトの名無しさん
08/11/16 01:21:33
>>235
MUSTOKをマクロで実装するしか。
237:デフォルトの名無しさん
08/11/16 01:23:50
>>235
backtrace,backtrace_symbolsってのを使うとどこから呼び出されてるか表示出きるみたいだよ。
238:デフォルトの名無しさん
08/11/16 10:42:04
>>234さん
233です。ありがとうございました。
書泉に行ったときに探してみます。
239:デフォルトの名無しさん
08/11/16 12:33:25
Cのプログラムで、他のプログラムhogeをコマンドラインパラメータ付きで実行し、
その実行の終了を待って、hogeのmain関数が返した値を取得したいのですが、
どうすればよいでしょうか?標準のC関数だけでできますか?
240:デフォルトの名無しさん
08/11/16 12:40:35
できません。winAPIでやってください
241:デフォルトの名無しさん
08/11/16 12:50:22
Cで、引数で指定されたファイルを、system関数を使って、
メモ帳で開くにはどうすればよいでしょうか?
ご教授お願いします。
242:デフォルトの名無しさん
08/11/16 12:58:13
system("メモ帳の場所 引数で指定されたファイル")
あとは
URLリンク(www.google.co.jp)
から探しなー
243:デフォルトの名無しさん
08/11/16 13:06:03
>>240
馬鹿も休み休み言ってください。
>>239
一般的に、アプリはsystem()で起動すればmain()の戻り値を回収できる。
但し、GUIアプリなどで動いているにも拘らずすぐに戻ってきてしまう場合は、
コマンドインタプリタ(command.comとかbashとか)の支援が必要になる。
コマンドインタプリタを介在させたくなければ、そこでやっと>240の言うようなAPIの出番となる。
>>241
system("notepad any.txt")でいいとして、そのテキストファイル名を可変にしたいなら
文字列を組み立てればいい。
244:デフォルトの名無しさん
08/11/16 13:36:09
リソースから拾ってきた文字に対して置換ってどうやってる?
たとえば
「File %1 is too long.」 ⇒ 「File "C:\hogehoge.foo" is too long.」
みたいな。
変換先文字列分拡張して memmove で必死に頑張ってもいいんだけど、
ATL/WTL 使ってるのでそれらのライブラリで便利なのがあればいいなぁと
思って…
教えてエロい人><
245:デフォルトの名無しさん
08/11/16 13:39:01
>>244
%1を適当に変換してから、sprintf()
246:デフォルトの名無しさん
08/11/16 13:40:18
置き換えしたいところを%sとかにして、sprintf使うとか。
247:デフォルトの名無しさん
08/11/16 13:40:47
boost::format使えば楽じゃね。
248:デフォルトの名無しさん
08/11/16 13:48:57
>>245、246
そうか、%1 じゃなくて別にいいんだもんね。
「File %s is too long. (sizeof: %s. current: %s)」
とかにして順番に sprintf の引数に積めばいいのか!
>>247
STLワカンネ・・・orz
でもせっかくなので勉強してくるYO!
即レスthx!!!
みんな優しいね。大好き。
249:デフォルトの名無しさん
08/11/16 21:02:14
FormatMessage の立場がねーな、おい。
250:デフォルトの名無しさん
08/12/17 02:15:02
入力によって処理を変えるプログラムを作っていて、予期せぬ入力があった時メッセージを表示して、もう一度入力させるプログラムを作っているのですが、2度同じ表示が出てしまいます。
for(;;)
{
scanf("%c",&input);
if(input == 'S' || input == 's')
{
printf("GAME START!¥n);
}
else if(input == 'Q' || input == 'q')
{
printf("GAME QUIT¥n");
return 0;
}
else
{
printf("input failed¥nPlease input again¥n");
}
}
どこを変更すれば、2度表示されなくなるでしょうか。
よろしくお願いします。
251:デフォルトの名無しさん
08/12/17 02:35:15
たぶん改行('\n')が残っているんだと思うよ。
scanf()の後に、
if ( input != '\n' ) {
while ( (c = getchar()) != '\n' ) {
; /* 意図した空文 */
}
}
こういうの追加しておくとか。
scanf()で文字ではなく文字列受け取って、最初の要素だけ利用するとか。
fgets(,,stdin)で、上記と同じようにするとか。
ゲーム作っているみたいだから、がんばってとしか言えないけど。
252:デフォルトの名無しさん
08/12/17 07:48:35
const で変数宣言する必要性を教えて下さい
253:デフォルトの名無しさん
08/12/17 23:46:16
>252
・誤って内容を変更するコードを書いた場合エラーになる。
・(条件が揃えば)定数として使える。
254:デフォルトの名無しさん
08/12/18 08:59:45
>>251
弄っていたら、
scanf("%c",hoge);
を
scanf("%s",hoge);
にしたら出来ました。
ありがとうございました。
255:デフォルトの名無しさん
08/12/19 08:36:18
質問です。
後処理さえすれば、コンストラクタで例外を投げても良いと聞いたんですが、
自分自身(this)がリークすることはないんでしょうか?
256:デフォルトの名無しさん
08/12/19 11:35:37
ないよ。
257:デフォルトの名無しさん
08/12/19 11:55:39
ありがとうございます。
これで安心して例外投げれます。
258:デフォルトの名無しさん
08/12/19 12:10:50
>>255
これだね。
URLリンク(www.kijineko.co.jp)
259:デフォルトの名無しさん
08/12/19 15:58:08
大変参考になるリンクどうもです。
スッキリしました^^
260:デフォルトの名無しさん
08/12/19 16:07:06
専用メソッド作ってた自分がバカみたいでした……
261:250
08/12/19 17:56:15
入力した数*数の二次配列に、任意の文字を入れて、それを.txtとして出力するプログラムを作っているのですが、
scanfで各配列に入れた文字を書き込むにはよいのですが、a[i][j] = '*';という入れ方で書き込むとtxtファイルが開けなくなってしまいます。
何が問題なのでしょうか。
よろしくお願いします。
262:デフォルトの名無しさん
08/12/20 02:21:57
>>261
ソースと結果を示してください。
fopen() を使っているなら perror() してみるとか。
263:デフォルトの名無しさん
08/12/20 02:40:07
>>261
たぶんfprintf(fp, "%s", a[i]);とかやって、ナル文字('\0')が見付からなくてメモリの適当なところまでファイルに書き込んだためにメモ帳などでテキストファイルとして開けない。
とエスパーしてみる。書き込みがSJISっぽいから、Windowsと仮定するけど。
最初から、バイナリで書き込んでバイナリで読み込むといいかも知れない、ゲーム作ってんだろ。
fwrite(a, sizeof(a[0][0]), sizeof(a), fp); foo型配列a
fread(a, sizeof(a[0][0]), sizeof(a), fp); foo型配列a
その代わりメモ帳では開くなよ。開いてもなんとかなるかもしれないけど。
264:デフォルトの名無しさん
08/12/20 18:50:18
バイナリエディターで覗くというのも手だな。
ファイルサイズが想定以上なら263で正解だと思う。
265:250
08/12/20 19:20:53
>>262
すみません。改行が多すぎるそうで、書き込みができませんでした。
>>263
ありがとうございます。
バイナリで開いて書き込んだら、できました。
>>264
そのような確認の仕方もあるのですね。
勉強になりました。ありがとうございました。
266:デフォルトの名無しさん
08/12/24 09:35:35
ちょっと質問したいんだが
コンストラクタで例外投げるのってどういう時に使うんだ?
分岐にでも使うのか?
267:デフォルトの名無しさん
08/12/24 14:08:45
>>266
エラー通知に決まってるだろ。コンストラクタでも普通の関数でも同じ。
268:デフォルトの名無しさん
08/12/24 21:19:49
コンストラクタだとエラーを返せないから例外を使う。
269:デフォルトの名無しさん
09/02/10 18:39:30
スレリンク(bobby板)l50
168 名前:よしよし ◆2U93Cmvv1o [sage] 投稿日:2009/02/10(火) 07:02:42 ID:???
おいハゲどもポインタの質問だ
------
p は指し示す先のアドレス
&p はポインタ変数pそのもののアドレス
*p は指し示す先の値
------
だよな?なのにポインタ配列の解説のところで
------
data+i がそのもののアドレス
data[i] が指し示す先の値
*(data+i) が指し示す先のアドレス
------
ってことになってんだよ
俺は本の書き間違えだと思って実際にプログラム打ち込んで
コンパイル、実行してみたらあってるんだよ
どういうことだ説明しろ
「*」はポインタが指し示す先の値を出力するんじゃねーのかよ
270:デフォルトの名無しさん
09/02/10 18:43:21
169 :おいら名無しさんヽ(´ー`)ノ:2009/02/10(火) 09:02:32 ID:???
3番目の"*(data+i)が指し示す先のアドレス"は間違ってるな。
ハゲの理解が正しい。どこの糞入門書だ。さらせ。
171 :よしよし ◆2U93Cmvv1o :2009/02/10(火) 11:50:38 ID:???
>>169ありがとう。ハゲじゃないが言ったようにコンパイルすると
結果は入門書どおりになるんだよ。俺が何か間違っているはず。
#include <stdio.h>
int main (void){
char* data[4]={"par","birdie","eagle","albatross"};
int i;
printf("data[i] 値 アドレス :ポイント先の値\n");
for(i=0;i<4;i++){
printf("data[%d] %10d %10d %10s\n",i,*(data+i),data+i,data[i]);
}
return 0;
}
-------------------------------------
C:\Source>point.exe
data[i] 値 アドレス :ポイント先の値
data[0] 4235576 1245052 par
data[1] 4235580 1245056 birdie
data[2] 4235587 1245060 eagle
data[3] 4235593 1245064 albatross
-------------------------------------
271:デフォルトの名無しさん
09/02/10 18:44:48
スレリンク(bobby板)
177 名前:よしよし ◆2U93Cmvv1o [sage] 投稿日:2009/02/10(火) 14:48:08 ID:???
要するに
int i=5;
int *p;
とかと
char* data[4]はそもそも違うっちゅーことだな?
*pってのは「指し示す先の値」のことだけど、
* data[4] ってのは「指し示す先のポインタ」のことなんだな?
* data[4]様はポインタ様*(data + i )やdata[i]のさらに違う場所
(メモリの)にいる奴なんだな?
メモ-----------
*(data + i )とdata[i]はまだポインタなの。
「ポインタの配列」→「ポインタ」→「指し示す先の値」
* data[4]→ *(data + i )とdata[i]→ *(*(data+i))または*data[i]
char* data[4]=
--------------
272:デフォルトの名無しさん
09/02/11 08:43:54
小心者スレということなので投下してみます。
VC++ Expressでウインドウアプリを作っています。
(ファイル A.h)
class A{
public:
A();
vertial ~A();
};
(ファイル B.h)
#include ゙A.h゙
class B:public A{
public:
B();
~B();
};
(ファイル C.h)
#include ゙A.h゙
class C:public A{
public:
C();
~C();
};
この時、Aが再宣言されたとか、Aが未定義だとかでコンパイラに怒られます。なぜ
273:デフォルトの名無しさん
09/02/11 08:56:55
vertial ~A();
274:デフォルトの名無しさん
09/02/11 09:47:54
if文をやっと覚えたところでニコニコ動画のビットレート計算
というのがあったのでこれを参考に簡単なプログラムを作っていたのですが
コンパイルエラーはでないのですが、最後の部分を入力するとエラーで落ちます
何がいけないのでしょうか?
Source PW:c
URLリンク(www1.axfc.net)
275:274
09/02/11 10:01:04
最後のif文で演算子が抜けていますが
ここは >= にしていました
276:274
09/02/11 10:02:21
補足
>最後の部分を入力
プログラムを実行して順番に進んでいって最後の部分を入力
277:デフォルトの名無しさん
09/02/11 10:41:14
>>274
scanf("%d", movieb);
278:デフォルトの名無しさん
09/02/11 13:03:11
>>273
virtual A();の間違うぃ
スマネm(_ _)m
279:デフォルトの名無しさん
09/02/11 13:25:47
そういうくだらない間違いをする奴がレスに何を書こうとも、
実際のコードをきちんと再現できているとはとても思えない。
従って、再現するソースとエラーメッセージを貼るか、帰れ。
280:デフォルトの名無しさん
09/02/11 13:41:40
何を偉そうに
そっから推測できる間違いが指摘できねーんならそれこそカエレだ
281:デフォルトの名無しさん
09/02/11 13:48:51
>>280
別にあなたが指摘なさっても宜しくってよ。それとも、あなたご自身が指摘もできないで書いてらっしゃるとでも仰るのかしら?
282:デフォルトの名無しさん
09/02/11 14:15:15
はいそうです
283:デフォルトの名無しさん
09/02/11 14:17:36
知らレス
284:デフォルトの名無しさん
09/02/11 14:40:16
>>272
こうじゃね?
#ifndef _A_
#define _A_
class A{
public:
A();
virtual ~A();
};
#endif
285:デフォルトの名無しさん
09/02/11 15:15:46
>>284
神!
正直、#include ゙A.h゙してれば逝けるとおもてました。
(BCCでは#includeしてれば逝けてたから)
ありがとうございますた。
286:デフォルトの名無しさん
09/02/11 16:30:16
インクルードガードぐらい常識として知っておけ
287:デフォルトの名無しさん
09/02/11 18:54:22
>>284 予約識別子死ね。
288:デフォルトの名無しさん
09/02/11 20:22:41
>>277
scanf("%d", movieb);
という箇所が間違っているということでしょうか?
または、ある部分を上のように書き直せということでしょうか?
289:288
09/02/11 20:28:46
解決しました
&が抜けているということですね
スレ汚しすみませんでした
また、回答ありがとうございました
290:デフォルトの名無しさん
09/02/11 20:31:43
>>287
_A_ はプリプロセッサの識別子。C/C++の予約識別子には該当しないよ
291:デフォルトの名無しさん
09/02/11 20:40:50
>>290
ライブラリの実装に _A_ 使ってるところがあったらぶっ壊れるだろうが。
292:デフォルトの名無しさん
09/02/11 20:45:53
あたま悪いの?
293:デフォルトの名無しさん
09/02/11 20:54:32
>>290
何を根拠にそんなことを言うのかね。
ISO C (draft n1336)
7.1.3 Reserved identifiers p2 にはマクロ定義についても明示的に禁止されてる。
> If the program declares or defines an identifier in a
> context in which it is reserved (other than as allowed by 7.1.4), or defines a reserved
> identifier as a macro name, the behavior is undefined.
ISO C++ にはマクロ定義について明示的な記述は無いようだけど、 >291 があるから
やっぱりダメだろう。
294:デフォルトの名無しさん
09/02/11 22:11:00
どうせ、VCかgccしかつかわないもん。
295:デフォルトの名無しさん
09/02/12 05:49:25
#ifndef _A_
#define _A_
:
#endifと、
#pragma onceは同じ意味じゃないの?
296:デフォルトの名無しさん
09/02/12 05:55:30
いいえ、後者は一部の処理系でしか使えません。
297:デフォルトの名無しさん
09/02/12 05:57:16
>>295
VC厨はこれだから・・・
298:デフォルトの名無しさん
09/02/12 07:53:33
VC厨扱いしていただけるなんて光栄でごぜえます。
299:デフォルトの名無しさん
09/02/12 09:08:54
>>297
gccでもCodeWarriorでも使えるし
PC向けのメジャーなコンパイル環境で使えないのはbccくらいなんだが
ポータビリティ意識して書くのは当然としても、
>VC厨はこれだから…
ってどういうこと?
300:デフォルトの名無しさん
09/02/12 22:48:59
>>299
CodeWarriorってタダで使えるの?
wikipediaで見たらかなりのプラットホームをサポートしてるみたいだから
使ってみたいのだが
301:デフォルトの名無しさん
09/02/13 00:16:57
>>300
コンシューマゲームの開発やってると、無料でダウンロードできる場合もある
俺が使ったのはこのパターン。
すまんが小売してるかどうかは知らん。
とりあえず使いにくいことは確か。
302:デフォルトの名無しさん
09/02/13 00:18:57
>>299
#pragma onceがおそらくVC発祥だからでしょ。
#ifdef _MSC_VER >= 1020で囲むコードを良く見かけるし、
まだまだVC限定のイメージが拭いきれていないと思う。
303:デフォルトの名無しさん
09/02/13 09:03:50
>>302
> #ifdef _MSC_VER >= 1020で囲むコードを良く見かけるし、
すまんが意味がわからない。
コンパイラによってifdefとpragma onceを切り替えるコードがあるって話?(なわけないか)
VC限定のイメージとの関係は?
304:デフォルトの名無しさん
09/02/13 09:08:11
つーか、ifdefで比較演算ってなんだよw
とは思った。
>>303
pragma onceは厳密には全く違う意味に解釈される可能性もあるから、
使えるコンパイラを限定することに意味はないわけでもない。
305:デフォルトの名無しさん
09/02/13 14:55:58
>>304
意味ないだろ
それならifdefだけで十分なんだから。
306:デフォルトの名無しさん
09/02/13 15:26:48
>>305
古い MSC には #pragma once がなかったんじゃないの?そのための比較だと思うけど。
307:デフォルトの名無しさん
09/02/13 15:59:56
>>303
ごめん間違えた。正しくはこんな感じ。見ない?
#if _MSC_VER >= 1020
#pragma once
#endif
308:デフォルトの名無しさん
09/02/13 18:14:42
>>307
全く答えになってないんだがww
309:デフォルトの名無しさん
09/02/13 22:15:10
素直にインクルードガードしとけってことだ!!
310:デフォルトの名無しさん
09/02/13 22:50:41
#ifndef _strcpy
#define _strcpy
int _strcpy(){return 0;}
#endif
311:赤西仁
09/02/13 22:57:03
1年間悩んでます。お力をお貸しください。
アークザラッドⅡというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、
かれこれ1年ほど経ちますが、なかなかうまくいきません。
*もちろん抽出した画像は個人範囲内で利用するつもりです。
◆試してダメだったこと
ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。
(ちなみに他のゲームはほとんど抽出可能)
◆教わったこと
・アークザラッドⅡは独自の画像形式を使っているから抽出できない。
・PS上で表示されてるということは絶対に摘出はできるはず。
◆抽出は不可能ではないということを知ったとき
2ちゃんねるで質問したところ、
ある方が実際にキャラクターの歩行画像を抽出して
私が立てたスレにアップしてくださいました。
スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
312:デフォルトの名無しさん
09/02/13 23:44:15
マルチ失せろ。
313:デフォルトの名無しさん
09/02/14 00:00:30
>>306
コンパイラの種類/バージョンチェック云々以前の話なんだが、わかってるか?
VCでifdefやifndefが使えないわけじゃあるまいし、
あえてpragma onceを混ぜる理由が無いだろ
314:デフォルトの名無しさん
09/02/14 00:05:42
普通のインクルードガードと307みたいなVC限定でpragma onceを組み合わせて使うコードの存在が、
#pragma onceがあたかもVC限定かのように思わせるのではないかと言いたいんだけど
315:313
09/02/14 01:00:52
>>314
>>306なの?
横レスで他人へのレスをされても噛み合わないレスしか返せないぞ
316:306
09/02/14 04:46:01
>>313
マクロによるインクルードガードでは2回目もファイルを開いて少なくともインクルードガードを
読む必要がある。 #pragma once なら2回目以降ファイルを開かずにスキップするような実装が
考えられる。
そのため、インクルードガードを置いて移植性を持たせつつ、特定のコンパイラでの
コンパイル時間を短縮する目的で #pragma once を置くことが考えられる。
URLリンク(en.wikipedia.org)
317:デフォルトの名無しさん
09/02/14 12:32:24
おまいら
._,,,,,,。,,、 广'x、 ,,、._ 」'゙''i、
,,,,,_.,,,,、广゚┐ .,,,v―冖"~゛ ゙'i、 .ト ,|,_ riゃ .} .,i´ '冖i、
.] ` f゙,l° ,i´ .゙l_ .y-┐ 'や'゙"゙’ _,,,vr" .゙ト.゙'x,,,,广 ィ・'''゙~ .._,,v・゚ヒ''''・x、
入、rУ ,iレ-v,,,、 .,r°."'''l゙ ,|√゙゚'i、 匸 ._ .y・'゙゚,,,v―-, .:゚ーa .√ ._,rll_ :}
.,r''y|゛゙゙l..,i´ ,i"゙l, .゙ト ,r°,,, .., ._,,vぐ .`√ .,i´l广._,,,,,,,,i´ ,,i´ ,i´ ,「 .:| .~''''″
.r″ .|゙l、 “ .,i″.yi入-イ il∠i、.` .,メ| | 」'ト .,,i´ .,i´ ,, ̄ .[ .,i´.,,,,,,! .]_
.゙l_,i´,レ .'㍉,,,,レ ~''┐ .,r°.,i´.| .| ,l゙ :゙l、 ,,i´ ,i´ l゜.゚L__ .:―ヤ゚″_ :~''=、
.,r″.,x=,, .,i´ ,x'".,,x'″ .゙l、 ゙冖''″ .] | .,i´ .゙l, .~1 .゚L '゙〃 ,n, .,,}
.,l彡'''″ .゙~"''''''''''"゜ .テ''~゛ .:゚'―---―・° ―″ .~''¬―'″ .:゚=_,r
318:デフォルトの名無しさん
09/02/16 17:47:44
皆様こんばんは。
VC++ ExpressEditionでのリーソスの事について質問させてくダサイ。
(Resource.h)
#define GAZOU000 1000
#define GAZOU001 GAZOU000 + 1
: :
: :
#define GAZOU030 GAZOU001 + 030
(Resource.rc)
GAZOU000 BITMAP "bmp000.bmp"
: :
: :
GAZOU030 BITMAP "bmp030.bmp"
これでビルドしようとしたら
.\Resource.rc(5) : error RC2135 : file not foundみたいなのが
ズラズラズラ~~~っと出てきました。
仕方が無いのでResource.hの、
#define GAZOU030 GAZOU000 + 30みたいに記述しているのを
全部#define GAZOU030 1030のように書き直したらビルドできました。
なぜ最初の書き方でダメだったんですか
319:デフォルトの名無しさん
09/02/16 21:07:15
最初の書き方だと、
GAZOU001 BITMAP "bmp001.bmp"
のGAZOU001をマクロ展開すると、
1000 + 1 BITMAP "bmp000.bmp"
になるだろ?リソースファイルはスペースを区切りと扱うので、正しく認識できなくなる。
320:デフォルトの名無しさん
09/02/16 21:57:46
>>319
えー!そうなんですか~
初歩的ミスだったのですね。お恥ずかしい・・・
でも、お蔭様で、またひとつ勉強になりました。
ありがとうございました。
321:デフォルトの名無しさん
09/02/16 22:04:41
>>316
大抵の場合、フルビルドを立て続けにやることはなく、プリコンパイルヘッダの効果で意味がないと思われ
322:デフォルトの名無しさん
09/02/16 22:37:19
google C++コーディングスタイルに、
cppファイルの無名名前空間の使用は推奨されてたのですが
理由はなぜでしょうか。cppファイルは別に何をやってもいいような。
cppファイルですらusing使うのは駄目なの?
323:デフォルトの名無しさん
09/02/16 23:46:37
>>322
ほかのcppファイルから見える必要のないものを隠すために使えという意図だと思う。
同じ目的で、名前空間上のstaticも使えるけど、
一般的に、この意味ではstaticより無名名前空間のほうが推奨されている。
324:デフォルトの名無しさん
09/02/16 23:57:52
static指定のかわりですか、なるほど。
名前空間上の関数定義だったら別だけど
クラスのメンバ定義だけしか書かない分には
気にしなくてもいいのかな。
>staticより無名名前空間のほうが推奨されている。
これは等価だと理解してましたが、なぜでしょう。
どっちも他のファイルからは見えないのに?
325:デフォルトの名無しさん
09/02/17 00:39:05
>>324
もともとC/C++のstaticに静的記憶期間とファイル内って2つ意味があるのはややこしいから、
後者の意味を分離しようという動機で無名名前空間が導入されたという経緯がある。
だから大事に使ってあげてねと言うわけ。
326:デフォルトの名無しさん
09/02/17 03:30:11
>>324
C++ ではオーバーロードやテンプレートの関係で、クラス名などもグローバルな定義の
識別に使われるので、関数や変数以外に class, struct, enum も別々の .cpp で同じ
名前空間内に同じ名前のものを定義するとマズイ。これが無名名前空間で解消できる。
327:デフォルトの名無しさん
09/02/21 02:20:15
お題。
ISO/IEC 14882:2003とXLib、Win32APIの範囲内でスクラッチからエディタを作る。
Win32、XLibともに標準C++ライブラリとかぶる機能があるが、この場合
標準C++を優先して使う。
これは、少しでも移植性を高めるための努力と考えてほしい。
また、拡張性の担保ともなりうる。
これは時間かかるけど、やりがいあるよ?
328:デフォルトの名無しさん
09/02/21 02:56:40
なんだコピペだったのか。
329:デフォルトの名無しさん
09/02/21 03:02:01
まずISO/IEC 14882:2003がなんなのか調べるのめんどくせえから挫折
→XlibかWin32?どうせなら両立できるwxだろと意気込むがインストール失敗して挫折
→そもそも標準C++が分からなくて挫折
→努力なんかできなくて挫折
→わたるが死んじゃう!(自殺)
330:デフォルトの名無しさん
09/04/11 22:30:51
すいません
CとC++を実践の中で学びたいのですが
なにを作ればいいか、というよりなにをその言語で作れるのか漠然として・・・
JavaやC#のようなオブジェクト指向言語ならイメージ浮かびやすいんですけど
コンソールだとコントロール等がないのでどうしても・・・
331:デフォルトの名無しさん
09/04/12 00:19:13
C++もオブジェクト指向言語なんだが・・・
332:デフォルトの名無しさん
09/04/12 09:37:07
つーか、好きにライブラリを選べばいいのがC/C++流。
333:330
09/04/12 10:24:27
そういやC++もオブジェクト指向言語でしたw
まだイメージができないあたり、ライブラリの知識が不足しているようですね。
334:デフォルトの名無しさん
09/04/12 10:29:32
ライブラリの前にオブジェクト指向と言語仕様の知識も不足してる
335:デフォルトの名無しさん
09/04/12 11:54:22
それを言ったら情報工学の基礎から何から全部だろう
ポトペタでさくさく作っている間は必要のない知識だ
336:デフォルトの名無しさん
09/04/12 12:45:19
なんだポトペタって。
337:デフォルトの名無しさん
09/04/12 19:33:18
一覧からマウスで選択したコントロールをフォームに
ポトっと落とすとペタっと張り付く機能やそれを備えたIDEのこと
338:デフォルトの名無しさん
09/04/13 00:50:39
Stringクラス的なものを参考すればいいんじゃね?
まさにコントロールじゃない目に見えないクラスオブジェクト。
339:トミー ◆xb8eIST5.k
09/04/25 20:19:22
>>182
ぼくもそれをダウンロードして使ってみました。
うまくいきそうです。
どうもありがとうございました!
340:トミー ◆xb8eIST5.k
09/04/25 20:21:25
>>339はこのスレの>>155です。
341:デフォルトの名無しさん
09/05/10 22:02:48
ここはvc++は駄目かえ?
342:デフォルトの名無しさん
09/06/07 16:31:54
正の数であれば、小数点以下を四捨五入する場合、0.5を足して、intで切り捨てればいいのですが、
負の数も含めて、四捨五入をする場合、どのようなコードを書けばよいのでしょうか?
343:デフォルトの名無しさん
09/06/07 19:14:53
GUIアプリを作るのにC++を勉強しようと思っているのですが
VC++EEとBCCどっちが作り易いですか?
また言語自体はどちらも同じですか?
344:デフォルトの名無しさん
09/06/07 19:20:10
GUIはスクリプトで出来る
345:デフォルトの名無しさん
09/06/07 19:21:35
VC++EEとBCCで選ぶと結局は、VC++EEが簡単だろう。
ATL/WTLなどもあり対応しているライブラリも多い。
346:デフォルトの名無しさん
09/06/07 19:22:57
rubyでGUI作れなければ、C++ではもっと無理。まずこれでやってみれば
347:デフォルトの名無しさん
09/06/07 22:30:11
>>342
x=(int)(x+.5-(x<0));
でよいか?
348:デフォルトの名無しさん
09/06/07 22:35:28
>>344-346
VC++使うことにします。
ありがとうございました。
>>346
C++は以前触ったことがあります。昔すぎて何も覚えてませんが…
349:デフォルトの名無しさん
09/06/07 22:41:43
>>342
abs関数はどうですか
350:デフォルトの名無しさん
09/06/08 10:46:27
>>342 >>347
なんで cast なんか四捨五入で使うの?round とか使わない?
cast なんてそんなに無闇に振り回すものじゃないと思うけど。
351:デフォルトの名無しさん
09/06/08 11:31:01
>>350
round()なんて関数ないぞ
352:デフォルトの名無しさん
09/06/08 12:44:07
>>351
すまん。ちょっと説明不足だったかも。厳密にいえば round/lround/rint/lrint
等々は C99 の規格みたい(といっても今や 2009 だが)。
プラットフォームによってはいまだに使えないのかも。
353:デフォルトの名無しさん
09/06/08 18:55:43
castはそんなに振り回すもんじゃ無いのは同意だが
このケースは真っ当な使い方だし問題ない
が、>>350みたいにそういう判断ができないなら使うべきではないな
354:デフォルトの名無しさん
09/06/08 22:18:13
俺は cast 使わないでもサクッとできるなら使わない方を選ぶな。
355:デフォルトの名無しさん
09/06/08 22:28:06
昔からあるやり方だから、一種の慣用句。
BASICでも同じようなことしてたと思うし。
356:デフォルトの名無しさん
09/06/08 23:45:37
>>353
「これは真っ当」というけど、intでoverflowの心配はしなくていいの?
別に一般にcastが良いか悪いかは別としてこの場合の素朴な疑問。
357:デフォルトの名無しさん
09/06/09 00:33:41
それも含めて分かって使ってるかということだろう。
358:デフォルトの名無しさん
09/06/09 00:35:52
>>357
それなら今回のケースは情報不足で
> このケースは真っ当な使い方だし問題ない
と言い切る根拠は無いように思うが。
359:デフォルトの名無しさん
09/06/09 02:53:47
言い切る根拠ねぇ。。
根掘り葉掘り前提を聞かないと、うかつにコメントしちゃいけないのもどうかと思うが。
360:デフォルトの名無しさん
09/06/12 00:09:27
プログラミング言語C第2版には「A.6.3.整数と浮動小数点」の項に
>浮動型の値を整数型に変換するときには、小数部分は無視される
とあるんだけど、実数xの少数分 x-[x] なので、例えば-2.3の整数部分は-3となり、
(床関数:URLリンク(ja.wikipedia.org))
結局、int a = -2.3 の結果は -3であるべきかな?かなかな?
361:デフォルトの名無しさん
09/06/12 00:34:11
>>360
いや、それは-2になる。
ここで言う小数部分を無視というやり方は、数学的定義とは関係なく
(絶対値が)0に近づく方向へ切り捨てるということ。
ここまで書いてから気付いたが、その記事の下の方にC言語の場合もきちんと書いてあるじゃないか。
362:デフォルトの名無しさん
09/06/12 00:41:50
きちんと
>『独自研究』に基づいた記述
と書かれていますね。
363:デフォルトの名無しさん
09/06/12 00:50:03
ANSI C
3.2.1.3 Floating and integral
There was strong agreement that floating values should truncate toward zero when converted to an integral type,
the specification adopted in the Standard. Although the Base Document permitted negative floating values to
truncate away from zero, no Committee member knew of current hardware that functions in such a manner.
[Footnote: We have since been informed of one such implementation.]
整数型への変換時に浮動小数点数はゼロに向かって切り捨てるように強く言われた。
規格でも標準で採用した。でも、元にしたドキュメントでは負の浮動小数点数は
ゼロから離れる方に切り捨てることを認めていた。当時の委員の誰一人として現行のハードウェアがこのように振る舞うとは知らなかった。
[注釈: 我々委員会はそのような実装を伝えられていた。]
適当に訳したので間違っているかもしれない。
元にしたドキュメントは、負数の時はどっちでも良かったけど、
この規格では、ゼロに向かって切り捨てますよん。ってことだと思われる。
364:デフォルトの名無しさん
09/06/12 01:01:57
おぉ、すばらしい!
これで安心して負数を丸められる。
365:デフォルトの名無しさん
09/06/12 01:02:05
>>362
きちんと英語版のノートでは、規格で0方向への丸めだと指摘されている。
366:デフォルトの名無しさん
09/06/14 01:49:25
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(){
string str;
fstream file;
file.open("test.txt",ios::in);
file>>str;
file.close();
int h=str.length();
cout << h<<endl;;
const char *seq1 = new char[h];
seq1=str.data();
delete[] seq1;
}
これどこか悪いですかね?実行時に強制終了になってしまう。
削っていって原因の箇所を特定したところ、delete[] seq1; の一行が悪いみたいなんですが、正直何が悪いかが理解できんのです。
bcc5.5で作業中です。
367:デフォルトの名無しさん
09/06/14 02:04:06
seq1=str.data();
これじゃよ。data() や c_str() の仕様をみるのじゃ。
記録するな。使ったらすぐ捨てろ。わかったな、今畜生。
368:デフォルトの名無しさん
09/06/14 02:05:26
>>366
やっぱり釣りなのね?
釣りに決まってる。
釣りではないなんていわせない。
釣りでなくちゃおかしい。
釣りだよね?
釣 り だ よ ね?
369:デフォルトの名無しさん
09/06/14 02:11:52
とりあえずわかったことは私はウンコマンということでしょうか。
つまりはチンカス以下。チンチンの先っちょについたティッシュのカスを師と崇めて行けというほどの。
ちょっと出直してくる。ありがとうござました。
370:デフォルトの名無しさん
09/06/14 02:16:22
>>366
#include <algorithm>
seq1 = str.data(); → std::copy(str.begin(), str.end(), seq1);
別にmemcpyでもいいんだけど。
371:デフォルトの名無しさん
09/06/14 02:21:00
>>366
> const char *seq1 = new char[h];
配列 new なんか使うからだ。
std::vector<char> seq1(str.begin(), str.end());
にしとけば int h も delete seq1 も要らない。
372:デフォルトの名無しさん
09/06/14 02:22:41
>>371
そもそもstringのまま扱うのでいい気がしてくる。
373:デフォルトの名無しさん
09/06/14 18:57:00
int main(){
string seq1;
とすればいい。コピーする手間もない