【初心者歓迎】C/C++室 Ver.34【環境依存OK】
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/01/17(水) 22:16:00ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
【初心者歓迎】C/C++室 Ver.33【環境依存OK】
http://pc10.2ch.net/test/read.cgi/tech/1164376287/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0002デフォルトの名無しさん
2007/01/17(水) 22:17:450003デフォルトの名無しさん
2007/01/17(水) 22:24:22乙
0004質問1(続き)
2007/01/17(水) 23:01:47いろいろ回答ありがとうございました。
そうですね。まず普通は、publicにするものだと、
キャストならdynamic_castだと思っておりました。
柏原著のサンプルソースを編集したものですが、
この著者は、static_castを使用して
static_cast<mypair &>(rp).getkey());
static_cast<mypair &>(rp).getvalue());
としていたので、これがベストな方法かと思って
疑問に思っておりました。
皆様のご意見が聞けてよかったです。ありがとうございました。
柏原正三の美しいC++プログラミング見本帖(翔泳社)
(http://www.seshop.com/book/download/)
(元ファイル:Abstract2Bad.cpp)
0005デフォルトの名無しさん
2007/01/17(水) 23:06:080006デフォルトの名無しさん
2007/01/17(水) 23:39:39グローバルな定数を元に、特定の要素数の配列を作るにはどうしたらよいでしょ
うか?
一つのファイルで、
extern const int MAXLEN = 65535;
残りのファイルで
extern const int MAXLEN;
として、各ファイルで
int array[MAXLEN];
としようと思ったのですが、
error: ISO C++ forbids variable-size array `line'
というエラーになります。
とりあえず、共通ヘッダファイルで
#define MAXLEN 65535
としてしのいでいますが、C みたいですっきりしません。
00076
2007/01/17(水) 23:43:390008デフォルトの名無しさん
2007/01/18(木) 00:05:03§3.1.3
extren const int MAXLEN = 65535; // definitions
extern const int MAXLEN; // declarations
前者は定義なのに対して後者は宣言に過ぎない。という事は、
リンク時まで値が決定しないという事であり、配列はコンパイル時
に大きさを要求する事から、使えない。
ヘッダファイルにでも入れたらどうか。
0009デフォルトの名無しさん
2007/01/18(木) 00:10:06当然だが。
0010デフォルトの名無しさん
2007/01/18(木) 00:12:5200116
2007/01/18(木) 00:21:31const int MAXLEN = 65535;
で行こうと思います。
ところで、C++のconst は内部リンケージだと知ったのですが、
http://seclan.dll.jp/dtdiary/2000/dt20000413.htm
通常の変数は従来どおり、staticにしないと内部リンケージにならないのです
よね?なぜconstの場合だけ、こうなったのでしょうか?
また、
static const int MAXLEN = 65535;
のように、static constの場合は、単なるconstの場合と、挙動は全く同じな
のでしょうか?
0012デフォルトの名無しさん
2007/01/18(木) 00:25:38constが内部リンケージを持つのは、#defineの代わりにコンパイル時定数として扱えるようにするため。
const自体に内部リンケージを持つ意味が含まれているので、staticはあってもなくても同じ。ただしクラス・関数内を除く。
0014デフォルトの名無しさん
2007/01/18(木) 00:30:16C++ではconstの意味が拡張されているからだろう。
§5.19 Constant Expressions
In several places, C + + requires expressions that evaluate to an integral or enumeration constant: as array
bounds (8.3.4, 5.3.4), as case expressions (6.4.2), as bit-field lengths (9.6), as enumerator initializers (7.2),
as static member initializers (9.4.2), and as integral or enumeration non-type template arguments (14.3).
constant-expression:
conditional-expression
An integral constant-expression can involve only literals (2.13), enumerators, const variables or static
data members of integral or enumeration types initialized with constant expressions (8.5), non-type template
parameters of integral or enumeration types, and sizeof expressions. Floating literals (2.13.3) can
appear only if they are cast to integral or enumeration types. Only type conversions to integral or enumeration
types can be used. In particular, except in sizeof expressions, functions, class objects, pointers, or
references shall not be used, and assignment, increment, decrement, function-call, or comma operators shall
not be used.
また、その意味から、static constでもconstでも挙動は同じだろう。
但し実際に領域を使うとすれば、多分違う場所に確保されるだろう。
00156
2007/01/18(木) 00:38:36重ね重ね、ありがとうございます。
>>ALL
瑣末な疑問かとも思いましたが、勉強になりました。思い切って質問して良かっ
たです。ありがとうございました。
0016デフォルトの名無しさん
2007/01/18(木) 03:15:15独習Cを終えた程度の素人です。
練習問題としてCプログラムをなるべく多く作ってみたいのですが、
Webに問題集みたいなサイトありませんか。よろしくお願いします。
0017デフォルトの名無しさん
2007/01/18(木) 05:01:06Webには無いと思う。
C/C++の宿題片付けますのスレの問題やってみるぐらいじゃない?
でも、独習Cってどれくらいの内容の物かわからないけど
たぶん、まだ知らないことは多いと思うから、書籍購入して
サンプルみながら勉強続けるとかが良いんじゃない?
ちなみに家に、C言語500問っていう本あるけど
「ん〜・・簡単だな・・」って思ったけど知識が身に付いてる分
簡単だと思ったのかもしれない。でも、別にこの本を勧めはしない。
0018デフォルトの名無しさん
2007/01/18(木) 13:46:26明確な目標がある分やりやすいよ。
0019デフォルトの名無しさん
2007/01/18(木) 15:34:45「RPG作るぞ!」も明確じゃない
「MMORPGならどうだ?いっぱい人があつまって楽しくできるゲームつくるぞ!」もだめ
何を言いたいかってーと、動機と目標を一色多にするなってことです
0020デフォルトの名無しさん
2007/01/18(木) 18:58:19この中にもし整数nが含まれるとしたらそれが何番目に入っているかを知りたいです。
それで調べたらなにやらfindとかいうのが使えるみたいなんですが
イテレータとかいうのがワケが分からないのでどう書いたらいいか分かりません。
書き方を教えてください。
0021デフォルトの名無しさん
2007/01/18(木) 19:03:27cout << n << " is found at " << ii - vec.begin() << endl;
else
cout << n << " is not found" << endl;
002221
2007/01/18(木) 19:05:30一行目は以下と置き換えてくれ
vector<int>iterator ii = find(vec.begin(), vec.end(), n);
if (ii != vec.end())
0023名前は開発中のものです。
2007/01/18(木) 19:37:51うまくいきました。サンクスコ。
0024デフォルトの名無しさん
2007/01/18(木) 23:24:30ありがとうございます。本を購入してもうすこし勉強してみます。
0025デフォルトの名無しさん
2007/01/19(金) 14:44:13int i;
cin >> str;
i = atoi(str);
こういう風にするとconstじゃないって怒られるんですが
stringをintに変換するにはどうすればいいんでしょうか?
cin >> i; ではなくて一度stringに入れてからatoi()というかJavaのInteger.parseInt()みちあな感じでやりたいんです
0026デフォルトの名無しさん
2007/01/19(金) 14:47:560027デフォルトの名無しさん
2007/01/19(金) 14:48:20s >> i;
または
i = atoi(str.str());
または
i = boost::lexical_cast<int>(str);
0028デフォルトの名無しさん
2007/01/19(金) 14:48:55×i = atoi(str.str());
○i = atoi(str.c_str());
002925
2007/01/19(金) 14:49:22できました
ありがとうございました
003025
2007/01/19(金) 14:50:400032デフォルトの名無しさん
2007/01/19(金) 15:13:48>>27の例では三者三様なので注意。
C標準関数でatoi()より高級なものとしては、strtol()なんてのもある。
0034デフォルトの名無しさん
2007/01/19(金) 21:46:530035デフォルトの名無しさん
2007/01/19(金) 21:55:200036デフォルトの名無しさん
2007/01/20(土) 10:34:40"AABBCC"
↓
[0]=0xAA
[1]=0xBB
[2]=0xCC
16進以外の文字が含まれないという前提のとき、
上記操作を行うような処理はどの用にすればよいでしょうか?
いくつか調べて出てきたものはistringstreamですが、
16進文字は数値に変換できなさそうです。
先頭から1文字ずつ取り出して、自前で"A"→10などと
地道に変換するしかないでしょうか?
すいませんがよろしくお願いします。
0037デフォルトの名無しさん
2007/01/20(土) 10:58:49strtol
0038デフォルトの名無しさん
2007/01/20(土) 11:10:56ありがとうございました!
0039デフォルトの名無しさん
2007/01/20(土) 11:22:51例えば西暦4桁の数字をあらわす場合どのように書いたらイイデツカ?
0040デフォルトの名無しさん
2007/01/20(土) 12:01:32西暦4桁の定義をしてくれたまえ。
#もしかしたら、西暦は3000まで行かないかもしれないジャマイカ。
0041デフォルトの名無しさん
2007/01/20(土) 12:53:190042デフォルトの名無しさん
2007/01/20(土) 12:55:270043デフォルトの名無しさん
2007/01/20(土) 13:01:063つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われている
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにする
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□派遣先社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、いつまでも派遣を続けることが大切だ
0044デフォルトの名無しさん
2007/01/20(土) 13:47:2339ですが、とりあえず西暦9999年迄でオナガイシマシウ
[0-9].[0-9].[0-9].[0-9]
秀丸の正規表現ならこんな感じだと思うのですが、C++はわからねぇ〜
0045デフォルトの名無しさん
2007/01/20(土) 14:07:17C++言語自体にも標準ライブラリにも正規表現はないから、外部ライブラリを使う。
Boost.Regexとか
ttp://www.boost.org/libs/regex/doc/index.html
0046デフォルトの名無しさん
2007/01/20(土) 14:09:38Regexコンパイル要るし
0047デフォルトの名無しさん
2007/01/20(土) 14:32:130048デフォルトの名無しさん
2007/01/20(土) 14:40:53日本で実際に使われているのはASCIIではなくJIS X 0201。
JIS X 0201はほぼアスキーのスーパーセットで互換性があるが、
バックスラッシュは円記号になっている。
0049デフォルトの名無しさん
2007/01/20(土) 14:50:57多少正規表現っぽいことはscanf()ファミリーにもできる。
それを明らかに越えることをしたいのなら正規表現ライブラリの出番だが....
VC++なら、COM経由でVBScriptのIRegExpなどを使うという手もある。
Cのライブラリとしては、鬼車あたりが定評があるか。
VC++6でBoostはおすすめしないねぇ。
0050デフォルトの名無しさん
2007/01/20(土) 14:53:23それを(互換性のためだが)だらだら引きずって、Unicodeの時代になっても
Windowsの日本語フォントはバックスラッシュのグリフにするべきところを円記号にしている。
0051デフォルトの名無しさん
2007/01/20(土) 15:10:38日本ではU+5cを円記号として扱うために(典型的にはソート)、
"Japanese Unicode"とかがあるんだよな。
0052デフォルトの名無しさん
2007/01/20(土) 15:55:41ちなみに他国でも同じことやってるとこもある。もちろん、\じゃないけどな
0053デフォルトの名無しさん
2007/01/20(土) 16:18:57その数字を比較したいんですけど
どうやればいいでしょうか?
#include <fstream>
using namespace std;
int main() {
char str[8];
ifstream file("1.txt");
file.getline(str, '\n');
if str < (str+1) //error C2061: 構文エラー : 識別子 'str'
}
0054デフォルトの名無しさん
2007/01/20(土) 16:33:50boost::lexical_cast
もしくはstd::stringstream
005553
2007/01/20(土) 21:14:02レスありがとうございます。
相変わらずエラーが出ます。
助けてください。
#include <fstream>
#include <boost/lexical_cast.hpp>
using namespace std;
int main() {
char str[8];
ifstream file("1.txt");
file.getline(str, '\n');
int a = boost::lexical_cast<int>(str);
if a < (a+1); //error C2061: 構文エラー : 識別子 'a'
}
0056デフォルトの名無しさん
2007/01/20(土) 21:15:53boostなんてレベルじゃないぞ。
if文の書き方から遣り直せ。
0057デフォルトの名無しさん
2007/01/20(土) 21:16:35うん、わかった。
キミはまず入門書を読んだ方がいい。
0058デフォルトの名無しさん
2007/01/20(土) 21:43:56できました。
0059デフォルトの名無しさん
2007/01/20(土) 22:32:52system("mkdir c:\Aaaa\Aa");
としてもC:\にAaaaaaが出来ます
c:\Aaaa\Aaを作る方法を教えて下さい
0060デフォルトの名無しさん
2007/01/20(土) 22:37:270061デフォルトの名無しさん
2007/01/20(土) 22:46:50本当にありがとうございました
0062デフォルトの名無しさん
2007/01/21(日) 03:29:28DOSやエクスプローラでいう%programfiles%にしたいのですが、
どうやったらできますか?
ShellExecute(NULL,L"open",L"C:\\Program Files\\test.exe",NULL,NULL,SW_SHOWNORMAL);
0063デフォルトの名無しさん
2007/01/21(日) 03:40:220064デフォルトの名無しさん
2007/01/21(日) 04:20:16便利な関数が用意されているんですね。
ですが代入の仕方が分かりません><
すみませんが教えて頂けないでしょうか?
char *env;
env = getenv("programfiles");
ShellExecute(NULL,L"open",L"C:\\Program Files\\test.exe",NULL,NULL,SW_SHOWNORMAL);
0065デフォルトの名無しさん
2007/01/21(日) 04:26:24char app_name[FILENAME_MAX];
sprintf(app_name, "%s\\test.exe", getenv("programfiles"));
ShellExecute(NULL,L"open",app_name,NULL,NULL,SW_SHOWNORMAL);
006664
2007/01/21(日) 05:20:19Unicode文字セットだとtest.exeが起動しません。
どこを直せばよろしいでしょうか?
TCHAR app_name[FILENAME_MAX];
wsprintf(app_name,L"%s\\test.exe",getenv("programfiles"));
ShellExecute(NULL,L"open",app_name,NULL,NULL,SW_SHOWNORMAL);
0067デフォルトの名無しさん
2007/01/21(日) 09:34:09また、WindowsだったらExpandEnvironmentStringsを使うのがいいかもしれない。
0068デフォルトの名無しさん
2007/01/21(日) 12:37:17TCHAR app_name[FILENAME_MAX];
_sntprintf(app_name, FILENAME_MAX,
_T("%s\\test.exe"), _tgetenv(_T("ProgramFiles")));
ShellExecute(0, _T("open"), app_name, 0, 0, SW_SHOWNORMAL);
0070デフォルトの名無しさん
2007/01/21(日) 21:14:06Windows Vista発売に伴い、WinsockのプログラムのUnicode対応を考えています。
ホスト名からIPアドレスを取得するAPI「WSAAsyncGetHostByName()」のUnicode
対応はどのように対応すればいいの?
WSAAsyncGetHostByName()のインターフェースは以下のとおり。
HANDLE WSAAsyncGetHostByName(
HWND hWnd,
unsigned int wMsg,
const char* name,
char* buf,
int buflen
);
ホスト名を指定する変数は、「const char* name」なのでそのままでは使えないと思われます。
WSAAsyncGetHostByName()のUnicode対応用のAPIがあるのでしょうか?又は別の対応方法があるの
でしょうか?
御存知の方がいたら教えてください。
環境:VC++ Ver6.0,開発OS:WinXP SP2
0071デフォルトの名無しさん
2007/01/21(日) 21:22:52dumpbin -EXPORTS %WINDIR%\system32\ws2_32.dll
してみれば分かるが、WSAAsyncGetHostByName()にはUnicode用APIとの区別は無い。
まー実用上非ASCIIのホスト名、ドメイン名が使われることは無いから
問題ないんだろうけど。
詳しいことは知らんが、
http://developer.mozilla.org/ja/docs/Internationalized_Domain_Names_(IDN)_Support_in_Mozilla_Browsers
などを見る限りでは、非ASCIIドメイン名を7bit-ASCIIにエンコードするRFCなんかも
出来てはいるようだな。
本式で対応するなら、それを使うべきだが、実用的にはwchar_tを使っている場合も
非ASCII文字は含まれていないと仮定し、何も考えずにASCIIへの
狭化変換を行ってしまってよいんでないの?
007270
2007/01/21(日) 22:26:45ありがとう。
「狭化変換」とはどういう処理のことでしょうか?
Unicodeの倍角文字や4倍角文字にも対応しますか?
御存知であれば教えてください。
0073デフォルトの名無しさん
2007/01/21(日) 22:45:37#include <iostream.h>
char kotae;
void Qestion_1()
{
cout << "A" << endl;
cin >> ::kotae
if (::kotae== 1) //エラー
cout << "OK!" << endl;
else //エラー
cout << "No!" << endl;
}
int main()
{
int A_A;
switch (A_A){
case 1:
void Qestion_1();
break;
一部省略しましたが↑のようなプログラムを書いています。
いろいろ変えてみたりしたのですが、どうしてもエラーとした部分でコンパイルエラーがでてしまいます・・・。
どなたかご教示願います
以下エラーの文コピー
ステートメントにセミコロン ( ; ) がない(関数 Question_1() )
else の位置が誤っている(関数 Question_1() )
0074デフォルトの名無しさん
2007/01/21(日) 22:46:02要するに
void nallow(char *dst, const wchar_t *src)
{
while (*dst++ = (char)*src++)
;
}
のようなものだな。ASCII文字のコードポイントはUnicodeでも同じことを
利用して単純にコピーする。
非ASCIIのホスト名やドメイン名に真面目に対応したければ、
>>71に上げたリンクは最低読むべきだろう。
変換アルゴリズムは自分で組むんだね。勿論WideCharToMultibyte()などは
役に立たないぞ。
0075デフォルトの名無しさん
2007/01/21(日) 22:47:15エラーメッセージの通りじゃないか。
cin >> ::kotae
の後のセミコロンが抜けている。
0077デフォルトの名無しさん
2007/01/21(日) 22:51:07こんな凡ミスでスレを汚してしまい申し訳ありませんでした(´・ω・`)
ちゃんとコンパイルできました・・・。
0078デフォルトの名無しさん
2007/01/22(月) 01:53:49/tmp/cc06qAQP.o(.text+0x2d): In function `main':
: undefined reference to `log'
というエラーメッセージがでてうまく動きません。
ご教授お願いします
#include <math.h>
#include <stdio.h>
int main(void)
{
double val=1.0;
do{
printf("%f %f\n", val,log(val));
val++;
}while(val < 11.0);
return 0;
}
0079デフォルトの名無しさん
2007/01/22(月) 02:05:57コンパイルオプションに -lm を追加汁
0080デフォルトの名無しさん
2007/01/22(月) 02:08:320081デフォルトの名無しさん
2007/01/22(月) 02:20:070083デフォルトの名無しさん
2007/01/22(月) 03:41:25(*‘ω‘ *) ちんぽっぽ
( )
ムズムズ v v
∧ ∧ ぼいんっ
(*‘ω‘ *) 川
((∩∩)) ( ( ) )
0084デフォルトの名無しさん
2007/01/22(月) 09:02:10一般的なコンパイルオプションで、ライブラリ"m"をリンクしろという指定。
ライブラリ"m"は、一般的に数値演算系の標準関数が入っていると思えばいい。
0085デフォルトの名無しさん
2007/01/22(月) 17:28:07ofstream fout("1.txt");
のような形で計算結果を出力しています。ただこれだと内部変数をいじったときも同じ名前になってしまい
紛らわしいので内部変数とリンクさせて動的なファイル作成をしたいのです。イメージとしては
ofstream fout(N".txt");
です。ただしこれではエラーとなってしまいます。
ofstream fout を使って動的にファイル名をつける方法を教えてください。
もし無理ならば他の手段を教えていただけるとうれしいです。
よろしくお願いいたします。
0086デフォルトの名無しさん
2007/01/22(月) 17:33:56とでもすると良いのではないかな?
0087デフォルトの名無しさん
2007/01/22(月) 17:49:06std::stringstream str;
str << i << ".txt";
{
ofstream fout(str.str().c_str());
.......
}
008885
2007/01/22(月) 18:00:22私の理解度では少し厳しいですが、何とか両方とも勉強してみたいと思います。
ヒントありがとう御座いました。
0089デフォルトの名無しさん
2007/01/22(月) 19:13:21#include <stdio.h> の次が書籍によって
int main() や
void main() だったり
main() だけだったり、
()内に void があったり無かったりするのですが
どういった違いで記述が変わっているのでしょうか?
0090デフォルトの名無しさん
2007/01/22(月) 19:18:54>void main() だったり
>main() だけだったり、
>()内に void があったり無かったりするのですが
戻り値の型は明記するべき。
○int main()
×main()
main()の戻り値はintが標準的。
○int main()
×void main()
括弧内を省略すると、引き数のチェックが行なわれない。
#明示的に引き数なしと宣言したわけではない。
○int main(void)
△int main()
尚、C++では省略すると引き数なしとなる。
0091デフォルトの名無しさん
2007/01/22(月) 19:22:35void main() :標準 C では main の戻り値の型は int 。環境依存で void でもコンパイル可能なことも多いし、
組み込み系では void main を実際に使う場合もあるが、基本的に void main 使う本は糞。
main() :一応正しいけど、int がないと警告される場合もあるので int は付けた方がいい。
ささやかなインクや執筆時間の節約の可能性も。
main の中の void の有無は、違いはあるけど、どっちでも実害はない。
普通の関数の場合は、void を入れた方がいい。>>90 を参照
0092デフォルトの名無しさん
2007/01/22(月) 19:48:08詳しい説明ありがとうございます。
0093デフォルトの名無しさん
2007/01/22(月) 21:26:40で紹介されているLeakTracerというソフトを使おうとしているのですが、
紹介通りに進めていって、
$ leak-analyze test.exe
とやった後に
(no debugging symbols found)...(gdb)
と出てきてしまって、メモリリーク先が特定できません。
-gオプションを付けていても、(no debugging symbols found)
などと出る場合はどうすればいいのでしょうか?
gccのバージョンは2.95.3
gdbのバージョンは5.2.1
よろしくお願いします。
009485
2007/01/22(月) 21:59:38このページを参考に
char file_name[100];
sprintf(file_name, "%d.txt", N);
ofstream fout(file_name);
としたところ上手く行きそうです。>86氏の方法も今後探ってみます。
おかげさまで苦手意識の強かった構造体に対する理解が深まりました。
ありがとうございました。
0095sage
2007/01/23(火) 00:32:58理由が分かる方はどなたかいらっしゃらないでしょうか。
---ソース---
const int var_const = 0;
const char* str_const = "str_const is const.";
int var = 0;
char* str = "str is not const.";
static int hoge(int a);
struct Fuga {
int var;
int (*func)(int);
};
const struct Fuga fuga_const[] = { {1, hoge}, };
static int hoge(int a) { return 1; }
---実行結果---
$ g++ hoge.c -c -O3
$ nm hoge.o
00000008 D str
00000000 D str_const
00000004 D var
---
というように、constを付けたint、構造体が消えてます(const char*は残ってる)。色々調べてみると、gccだと最適化オプションに関係なく全部残っていて、g++は-O0以外は消えました。
static関数は分かるんですが、それ以外は何故なんでしょう?
別のファイルからこのconst付き変数を使おうと思っても使えず、困っています・・・。
0096デフォルトの名無しさん
2007/01/23(火) 00:34:440097デフォルトの名無しさん
2007/01/23(火) 00:40:56009893
2007/01/23(火) 01:49:29スレ汚しごめんなさい。
0099デフォルトの名無しさん
2007/01/23(火) 03:01:52例えば↓こういうときの
p=p->next;
0100デフォルトの名無しさん
2007/01/23(火) 03:02:230101デフォルトの名無しさん
2007/01/23(火) 03:09:310102デフォルトの名無しさん
2007/01/23(火) 03:16:24010395
2007/01/23(火) 07:03:16>>97
ありがとうございます。確かにexternを付けたら解決しました。
externを付けていないconst char*だけは最適化しても残っている点がまだ疑問ですが、
C++におけるexternとconstの役割をもう一度勉強し直してきます。
ありがとうございました。あとageてしまってごめんなさい。
0104デフォルトの名無しさん
2007/01/23(火) 10:41:25const char *の変数は、constではないから。
#constなのはその(ポインタ)変数の参照先のみ。
0105デフォルトの名無しさん
2007/01/23(火) 12:04:12多重継承が問題を起こしやすい概念って書かれていました。
実際に使う人は少ないんですか?
0106デフォルトの名無しさん
2007/01/23(火) 12:17:18JSONファイルを利用したいと思い、jsoncppというライブラリの利用を試みたのですが、
どういうわけか上手く行きません。
http://sourceforge.net/svn/?group_id=144446
READMEの記述通りにSConsというPythonベースのビルドツールでビルドを試みたのですが失敗してしまうので、
.\jsoncpp\makefiles\vs71\jsoncpp.sln
のソリューションファイルを開いてVC++ 2005でライブラリ(json_vc71_libmt.lib)をビルドすると成功します。
ところが他のプロジェクトで利用しようとjsoncppを利用するコードを書き、ビルドしようとすると
fatal error C1083: コンパイラの生成した ファイルを開けません。'../../build/vs71/release/lib_json\json_writer.asm': No such file or directoryc:\Temp\jsoncpp\src\lib_json\json_writer.cpp
というエラーが出てプロジェクトのビルドに失敗してしまいます。
jsoncpp.slnのテストコードmain.cppの場合はビルド・実行に成功するのですが、他のプロジェクトにlibとヘッダを移して利用しようとすると上手く行かないみたいです。
何が原因か分からずに困っています。どなたかご教示お願いします。
環境はWinXP SP2, Visual Studio 2005 statdard, python2.4.3です。
0107デフォルトの名無しさん
2007/01/23(火) 12:49:35COMとかWTLでは日常茶飯事
0108デフォルトの名無しさん
2007/01/23(火) 14:15:45例えばダイアモンド継承の形を産みやすいと言われている。
基底A
派生B 派生B'
派生C
この場合、Cのオブジェクトには基底AがB、B'から二重に含まれてしまう。
それが問題になるかどうかはケースバイケースだが。
仮想派生を用いる(B, B'の継承をvirtualとする)ことでこれを防ぐことが
出来るが、BやB'を作成した時点では、仮想派生にすべきかどうか
判断できないことも多いわけだ。
一方全然違うクラスをmix-in的に使う分にはこういう問題がないので、
実際使われるところではバシバシ使われとるよ。
0109デフォルトの名無しさん
2007/01/23(火) 15:17:09まあ、多重継承に比べればセキュアなんだろうけど。
0110デフォルトの名無しさん
2007/01/24(水) 08:22:46どうやればいいでしょうか?WndProcメソッド辺りをオーバーライドすることでできそうなのですが、
サンプルがWindowsフォームアプリケーションしか見つからず、できればWin32アプリケーションでやりたいです。
0111デフォルトの名無しさん
2007/01/24(水) 09:57:13キーボードからの入力を受け付けなくしたいのは、自分だけか、他のアプリもか?
それと開発環境は?
0112110
2007/01/24(水) 10:17:09WinXP(動作予定環境も),Visual C++ 2005です。
WindowsキーやAlt+Tabも無効にしたいので、他のアプリもになります。
マウスからの入力のみ受け付ける感じを考えています。
0113デフォルトの名無しさん
2007/01/24(水) 12:05:43他のアプリのキー操作全てを横取りしたいならSetWindowsHookEx()(所謂グローバルフック)。
上記でもCtrl+Alt+Delはダメで、これはかなり面倒。
ぶっちゃけお勧めしない。どうしてもOSや他のアプリを抑えなければならないならしょうがないけど。
0114デフォルトの名無しさん
2007/01/24(水) 12:44:45コンパイラ(vc++.net)に怒られてしまいます。
最後のラベルの中なら宣言できるようなのですが、
これってそういう仕様なのでしょうか?
0115デフォルトの名無しさん
2007/01/24(水) 13:38:02仕様と言うか言語的にそうなってる。
switch (式)
{
ラベル1:
ラベル2:
ラベル3:
}
ラベルからラベルまでの間はこのままだとブロックになっていない。
だからC99より前だとswitch文で変数を宣言したかったら
switch (式)
{
int x;
ラベル1:
なんちゃからんちゃら
}
のようにラベル1の前で変数を宣言しないとエラーになる。
0116デフォルトの名無しさん
2007/01/24(水) 13:40:03つまりラベル1とラベル2の間、ラベル2とラベル3の間等で同名の変数を宣言できない。
再定義されているとか言われるのはこのせい。
次に
ラベル1:
int a=0;
とした場合、ラベル2又はラベル3に飛んだ場合はaの初期化が行われない。これもエラーになる。
> 最後のラベルの中なら宣言できるようなのですが
というのは、それ以前のラベルからその変数を使えないから。
{}で囲むとかそういった対策は以上を踏まえて適宜考えること。
0117114
2007/01/24(水) 14:34:15分かりやすい説明ありがとうございます。
switch文てのは要するに整数をラベルにした特殊なgoto文なのですね。
エラーメッセージは
error C2360: 'tmp' の初期化が 'case' ラベルによって行われませんでした。
でした。
0118デフォルトの名無しさん
2007/01/24(水) 16:08:23手順はいくつかあり、
1.GetDeviceCount()->GetDeviceName(n)
パフォーマンスの問題と、煩雑さが気に入らない
2.クライアント側で用意したコンテナへ返す
コンテナのクリアはどちらでするべきか決められない。
テンプレートはいや。かといって、コンテナを限定するのも何だかな。
3.クライアントでコンテナを用意して、返却値にする
void GetDeviceList() {
vector<string> devices;
....;
return devices;
}
vector<string> devices = GetDeviceList();
3番が一番単純で好みなのだけど、RVOの実装の問題やら
巨大なオブジェクトを返却値にすることへの抵抗やらで決めあぐねております。
何かスマートな対策は無いですか?
0119デフォルトの名無しさん
2007/01/24(水) 16:10:240120デフォルトの名無しさん
2007/01/24(水) 16:11:14リファレンス使って引数渡しにしたら。
0122デフォルトの名無しさん
2007/01/24(水) 16:15:39返値と戻り値って同じ意味なのでしょうか?
0123デフォルトの名無しさん
2007/01/24(水) 18:11:21というクラスについて、
a* pa;
pa = new b;
delete pa;
とやった場合、ちゃんとクラスbをdeleteすることになるんでしょうか?
というか、この書き方は合ってるでしょうか?
0124デフォルトの名無しさん
2007/01/24(水) 18:13:090125デフォルトの名無しさん
2007/01/24(水) 18:17:35class a, bのコンストラクタとデストラクタで文字列でも吐き出して自分で確認すればいい
おそらくこんな質問するくらいだし基底クラスのデストラクタをvirtualにしてないだろうから、
その辺も調べてみるといいかも
0126デフォルトの名無しさん
2007/01/24(水) 18:21:24Effective C++とかその辺の本を読むのを薦める
0127デフォルトの名無しさん
2007/01/24(水) 19:21:41#include<string.h>
int main(void){
char str[100];
int a,i;
scanf("%s",str);
a=strlen(str);
for(i=a;i<=0;i--){
printf("%c",str[i]);
}
return 0;
}
文字列を入力させて逆に表示させたいんですがうまくいきません
どこがおかしいのでしょうか
0128デフォルトの名無しさん
2007/01/24(水) 19:26:57>for(i=a;i<=0;i--){
a=strlen(str);ってことはstr[0]〜str[a-1]までだよ
0129デフォルトの名無しさん
2007/01/24(水) 19:33:190130デフォルトの名無しさん
2007/01/24(水) 19:33:41for(i=a-1;
ってことでしょうか?
0131デフォルトの名無しさん
2007/01/24(水) 19:45:46開発環境 VC++2005 ExpressEdition + WindowsXP
-------------------------------------------------
<AbstractFunc.h>
#define Cast(R,T,F) reinterpret_cast<R(*)T>(F)
template<typename Re>
class CAbstractFunc
{
public:
typedef Re(*vf)();
CAbstractFunc(){}
template<class fn>CAbstractFunc(fn f) :m_fp(reinterpret_cast<vf>(f)){}
Re operator () (){ return Cast(Re,(),m_fp)(); }
template<typename T1>Re operator () (T1 p1){ return
Cast(Re,(T1),m_fp)(p1); }
private:
vf m_fp;
};
typedef CAbstractFunc< void(*)() > ABSTRACT_FUNC_POINTER;
0132131
2007/01/24(水) 19:47:46#include "AbstractFunc.h"
char func1( char x ){ return x; }
class C_hoge
{
public:
static void hoge1( void ){ cout << "hoge1" << endl; }
static int hoge2( void ){ cout << "hoge2" << endl; return 1; }
}hoge;
void main( void )
{
ABSTRACT_FUNC_POINTER af = func1;
cout << reinterpret_cast<char>( af( 'a' ) ) << endl;
af = hoge.hoge1;
af();
}
上記プログラムの「C_hogeクラスのメンバ関数のstatic」を
はずしたいと考えています。
CAbstractFuncの汎用性をなるべく維持したまま行うための
ヒントなりをいただけたら・・・と考えています。
0133デフォルトの名無しさん
2007/01/24(水) 19:58:250134131
2007/01/24(水) 20:42:44おっしゃる通りです、、、。
boostは使ってはいけないので、
自作するような形になりますた。
0135デフォルトの名無しさん
2007/01/24(水) 21:06:52君のガラクタよりfoost::functionの方が保守が容易だ
0136デフォルトの名無しさん
2007/01/24(水) 21:07:20afにfunc1をバインドしたあとに、af();呼び出しをかけることもあるわけだから。
型安全性を無視するようにアドホックに改竄したうえで、記載しておく。
struct IFV{ virtual int f(void)=0; };
struct IFI{ virtual int f(int n)=0; };
class funb{
void *mic[4];
public:
template<class T> funb(const T &ic, size_t size=16 ){ memcpy( mic, &ic, size); }
int operator ()(int i){ return reinterpret_cast<IFI*>(&mic[0])->f(i); }
int operator ()() { return reinterpret_cast<IFV*>(&mic[0])->f(); }
};
template<class T>class IFI_impl : public IFI{
T &klass;int (T::*method)(int n);
public:
IFI_impl( T &k, int (T::*m)(int n) ):klass(k), method(m){}
virtual int f(int n){ return (klass.*method)(n); }
};
template<class T>class IFV_impl : public IFV{
T &klass;int (T::*method)(void);
public:
IFV_impl( T &k, int (T::*m)(void) ):klass(k), method(m){}
virtual int f(void){ return (klass.*method)(); }
};
template<class T> IFV_impl<T> BindMethod( T &k, int (T::*m)() )
{ return IFV_impl<T>( k, m );}
template<class T>IFI_impl<T> BindMethod( T &k, int (T::*m)(int n) )
{ return IFI_impl<T>( k, m );}
int noarg(){return printf("void\n");}
int intarg(int n){return printf("int:%d\n", n );}
};
int main(){
test t;
funb c1( BindMethod( t, &test::noarg) );
funb c2( BindMethod( t, &test::intarg) );
c1( 412 );
c2( 4120 );
return 0;
}
0139デフォルトの名無しさん
2007/01/24(水) 21:53:59ある関数funcを void func();と宣言して
#include <stdio.h>
int main()
{
func(),printf("test");
}
上記の書き方ではエラーなしで実行できるのですが、マクロを用いて
#include <stdio.h>
#define func() func(),printf("test")
int main(
{
func();
}
とするとエラーがでてしまいます。上記2つの違いは何なのでしょうか?
0140デフォルトの名無しさん
2007/01/24(水) 22:00:17どう置換されるのかよく考えてみれ。
0141デフォルトの名無しさん
2007/01/24(水) 22:01:450142デフォルトの名無しさん
2007/01/24(水) 22:07:04C言語で、グレースケール(256段階、画質256×256)の画像の画素値を[256][256]
の配列に格納したのですが、この格納した後、ヒストグラムの均等化を行いたいの
ですがどうしたらいいか分かりません。よかったら教えてください。
0143デフォルトの名無しさん
2007/01/24(水) 22:29:00ヒストグラムの均等化が分からんのならぐぐれ
Cが分からんのならまず日本語で手順を書いてみろ
0145デフォルトの名無しさん
2007/01/24(水) 22:36:25プログラムとは関係ないな、ぐぐってこい
0146131
2007/01/24(水) 22:52:21さっそくのレスありがとうございます。
>>135
昨今のboostはコンパイラ依存などは
どのような状況なのでしょうか?
(マイナーなコンパイラを使用する予定となっております)
ご指摘の通り、自分のコードがかなり危険をはらんでいることを
理解しておりますが、技術力が足りなく上記のような稚拙な
コードとなってしまいました。
>>137
サンプルコードをありがとうございます。
これから、サンプルコードを参考に改良に励みたいと考えています。
0147142
2007/01/24(水) 22:55:48一応ヒストグラムの均等化ってのは画素値の分布を均等にするっていうことは
分かります。それをC言語で書くとどうするかってことなんですけど・・・
0148デフォルトの名無しさん
2007/01/24(水) 23:00:00まだわからんかなあ。
漠然と分からないとだけ言われても教えようがないの。
もっと具体的に質問してくれ。
0149デフォルトの名無しさん
2007/01/24(水) 23:01:46まずは自分で書け。わかんないところを相談しろ。宿題なら出て行け。
0150デフォルトの名無しさん
2007/01/24(水) 23:05:12VCも2005になって、テンプレート系の準拠度があがってるし
0152デフォルトの名無しさん
2007/01/24(水) 23:09:26>純粋に均等化させるアイディアが思いつかないだけなんです。
次からは、そういう情報を隠さずに真っ先に書いてね。
回答側が一番知りたいのはそこなんだから。
適当に、上下から5%目あたりを最小値/最大値にして広げてみたら?
0153デフォルトの名無しさん
2007/01/24(水) 23:12:450154デフォルトの名無しさん
2007/01/24(水) 23:13:07これってどの程度通用するものなんでしょうか?
どうでもいい代物ではあるのでC_ASSERTだけは置くとして、参考にお聞きしたいです
0155デフォルトの名無しさん
2007/01/24(水) 23:19:27Windows 以外は 4 が主流だろう。
どちらにしても、依存せずに素直に sizeof(wchar_t) 使って書けよ。
0156デフォルトの名無しさん
2007/01/24(水) 23:22:37>Windows 以外は 4 が主流
そうだったんですか
まずいよなぁとは思いつつ書いてたのでちょっと考え直すべきですね
0157デフォルトの名無しさん
2007/01/24(水) 23:37:52UCS2かUCS4かに依存するコードになっているならそう簡単には行くまいよ
sizeof(wchar_t) == 2ならICUのUCharと互換だが、みたいな
0158110
2007/01/25(木) 08:15:08RegisterHotKeyだとスタートメニューが開いてしまうので、
SetWindowsHookExでやりました。
ありがとうございました。
0159デフォルトの名無しさん
2007/01/25(木) 16:43:28smart_ptrを利用しているのですが、例えばクラスのメンバー変数として
class CNantoka
{
smart_ptr<CHoge> hoge;
};
とやる場合、そのクラスの前にCHoge.hをincludeする必要があるようです。
ですがこれだと、CHoge.hが書き換えられる度に、CNantoka.hを読んでいる全てのcppがリコンパイルされてしまいます。
単純なポインタならば
class CHoge;
class CNantoka
{
CHoge* hoge;
};
とやればいいのですが、smart_ptrで同様の手軽さを実現することはできないのでしょうか?
(目的から考えると)CNantokaを使いたい連中に、CHogeの実装を知らせる必要はありません。
メンバーには(後述する構造体への)ポインタだけもたせて、メンバー変数代わりの構造体の定義をCNantoka.cppで行なうという手は一応考えました。
0160デフォルトの名無しさん
2007/01/25(木) 17:06:37class CHoge;
class CNantoka
{
smart_ptr<CHoge> hoge;
};
でいいのでは?そのsmart_ptrにもよるが
0161デフォルトの名無しさん
2007/01/25(木) 17:17:03できました。
というかすいませんでした…。
何故できないと思い込んでいたのかお恥ずかしい限りです。
多分以前試した時は、別の原因のエラーが出てたのを勘違いしたんでしょう。
ありがとうございました。
0162デフォルトの名無しさん
2007/01/25(木) 17:43:22思い込んだ原因がわかりました。
ヘッダファイル内に一部の関数を直書きしていたのですが、そこでsmart_ptr<CHoge>を使っていました。
そりゃあデストラクタが正しく定義できずエラーにもなりますわ…。
0163デフォルトの名無しさん
2007/01/25(木) 19:22:13wcout.imbueとwofstream/wifstreamのimbueがあれば
間に合うような気がするんですが
locale::globale()ってどういう場合に利用するんですか?
0164デフォルトの名無しさん
2007/01/25(木) 19:23:15以下のImplクラスのコンストラクタ・デストラクタ呼び出し結果は未定義ってこと?
struct Abst {
virtual ~Abst() {}
virtual void MemberInit() = 0;
virtual void MemberTerm() = 0;
};
struct Impl : Abst {
Impl() { this->MemberInit(); }
~Impl() { this->MemberTerm(); }
void MemberInit() {}
void MemberTerm() {}
};
0165デフォルトの名無しさん
2007/01/25(木) 19:47:12それぞれImpl::MemberInit(), Impl::MemberTerm()が呼ばれることになってる。
0166デフォルトの名無しさん
2007/01/25(木) 20:08:36日本語も満足に解釈できないのかよ俺
0167デフォルトの名無しさん
2007/01/25(木) 20:22:28スレ違いだったらスンマソン。
class Cfoo
{
int func1( void ){ return 1; }
}foo;
void main( void )
{
vector<Cfoo *> f;
f.push_back( 省略 );//Cfooクラスを継承したクラスを入れる
for_each( f.begin(), f.end(), mem_fun( &Cfoo::func1 ) );
}
上記でCfooのメンバ関数func1の戻り値を取る方法なんぞあれば、教えてください。
(実際、使う場合はメンバ関数が複数個(int func1(void), char func2(void)・・・
)になります)
0168デフォルトの名無しさん
2007/01/25(木) 20:28:17今更だけどこれくらいやればboost::functoinと遜色なく使える。
#include <iostream>
#include <functional>
template<typename T> class MyScopedPtr { //削除子付スマートポインタ
public:
template<typename U> MyScopedPtr(U* p) : p(p), delator(makeDelator<U>) {}
~MyScopedPtr() {delator(p);}
T* Ptr() {return p;} //* ->など演算子は省略
private:
T* p;
void (*delator)(void*);
template<typename U> static void makeDelator(void* p) {delete static_cast<U*>(p);}
MyScopedPtr(const MyScopedPtr&);
MyScopedPtr& operator =(const MyScopedPtr&);
};
template <typename Ret, typename Arg1> class FunctionHolder1 : std::unary_function<Ret, Arg1> {
public:
template<typename FnObj> FunctionHolder1(FnObj f) : obj(new FnObj(f)), pfn(callFunc<FnObj>) {}
Ret operator ()(Arg1 a) {return pfn(obj.Ptr(), a);}
private:
MyScopedPtr<void> obj; //std::tr1::shared_ptrもしくはboost::shared_ptrでも可
Ret (*pfn)(void*, Arg1);
template<typename FnObj> static Ret callFunc(void* p, Arg1 a) {return (*static_cast<FnObj*>(p))(a);}
};
0169デフォルトの名無しさん
2007/01/25(木) 20:29:05struct C_hoge {
void hoge1() {std::cout << "hoge1" << std::endl;}
int hoge2() {std::cout << "hoge2" << std::endl; return 1;}
};
char func1(char x) {return x;}
int main() {
C_hoge hoge;
FunctionHolder1<void, C_hoge> fhv(std::mem_fun_ref(&C_hoge::hoge1)); //boost::function1<void, C_hoge>
FunctionHolder1<int, C_hoge> fhi(std::mem_fun_ref(&C_hoge::hoge2)); //boost::function1<int, C_hoge>
FunctionHolder1<char, char> fhc(std::ptr_fun(func1)); //boost::function1<char, char>
fhv(hoge);
int ret = fhi(hoge);
std::cout << "ret: " << ret << std::endl;
std::cout << "fhc: " << fhc('A') << std::endl;
}
0170デフォルトの名無しさん
2007/01/25(木) 20:30:45std::transform() 使えばいいんじゃね?
0171デフォルトの名無しさん
2007/01/25(木) 20:33:220172167
2007/01/25(木) 21:43:52即レスさんくす。
なんとかがんがったら、望んでいる形に近い状態で
プログラムが動きますた。
ところでfor_eachってループ回り始めたら途中で止めることって
できないですか?
for文のbreakみたいな感じで止めたいんす、、、。
0173デフォルトの名無しさん
2007/01/25(木) 21:54:290174デフォルトの名無しさん
2007/01/25(木) 22:01:55そんなことに例外使うなよ
0175デフォルトの名無しさん
2007/01/25(木) 22:03:33ファイル名が同じで拡張子を変えて保存したい時でも1つずつ指定しないとだめですか?
あと、保存先を別フォルダに指定できますか?
0176デフォルトの名無しさん
2007/01/25(木) 22:09:090177デフォルトの名無しさん
2007/01/25(木) 22:21:00int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);
if(DxLib_Init()==-1)return(-1);
WaitKey();
DxLib_End();
return(0);
}
ウィンドウのサイズを変更したいのですが
この文のどこに何を入れればいいのでしょうか?
0178デフォルトの名無しさん
2007/01/25(木) 22:25:28イテレータの範囲で表現できない終了条件があるなら、
それはもう標準アルゴリズムじゃないから、おとなしく
自分でループ書け。
0179デフォルトの名無しさん
2007/01/25(木) 22:30:32string filename;
string ext1 = ".dat";
string ext2 = ".lsp";
あとはご自由に
0180デフォルトの名無しさん
2007/01/25(木) 22:32:07自分で停止するバージョンのfor_each書けば?
template <class IT, class FN>
void my_for_each(IT first, IT last, FN func)
{
for(; first != last && func(*first); ++first)
;
}
みたいな感じで
0181デフォルトの名無しさん
2007/01/25(木) 22:42:52リファレンス見ろよー
一応教えるとSetGraphModeね
0182デフォルトの名無しさん
2007/01/25(木) 22:55:23即答ありがとうございます
うまくいきました!
0183デフォルトの名無しさん
2007/01/25(木) 23:30:57std::find_if ?
0184デフォルトの名無しさん
2007/01/25(木) 23:58:24ああ、そういえば本来の目的とは全く違うが、find_ifでいいんだね
やってることほぼ同じだし
0185デフォルトの名無しさん
2007/01/26(金) 00:20:15C++でプログラムを実行したところ,
-1.#IND00 という値が入っている変数がありました.
デバッグのため,値が-1.#IND00 となったらデバッグプリントを表示したいのですが、
どのようにやればよいでしょうか?
環境は.net 2003です。
ちなみに、
float fx = 0.0;
float r;
if(r == -2.0f/fx || r == 2.0f/fx || r == fx/fx || r == -fx/fx){
としてみたところダメでした。
どなたかよろしくお願いします。
0186デフォルトの名無しさん
2007/01/26(金) 00:22:12rは別の計算によって求めたい値が入っているとします。
0187デフォルトの名無しさん
2007/01/26(金) 00:50:21float r = 0.0;
0188デフォルトの名無しさん
2007/01/26(金) 00:57:59レスありがとうございます
説明不足だったと思いますが、実際のプログラムでは当然
float r;
の後に計算を行い結果を格納しています。
このrの値をプリントしたところ,-1.#IND00と表示されるのです・・・
0189デフォルトの名無しさん
2007/01/26(金) 01:01:530190デフォルトの名無しさん
2007/01/26(金) 01:02:0601.#IND00となってる時
int i = reinterpret_cast<int&>(r);
とやってビットパターンをつかめばいいのでわ?
但しこれはx86の32ビットモード限定で。
0191デフォルトの名無しさん
2007/01/26(金) 01:06:22if ((fp = fopen("list.txt", "r")) == NULL){
printf("ファイルのオープンができませんでした。\n");
return 0;
}
fgets(filename,255,fp);
if(filename=="\n"){return 0;}
read(filename,orig);
printf("つづける?(yes=0)=");
scanf("%d",&yes);
}while(yes==0);
ファイルを1行読んで処理を改行文字がくるまで繰り返すプログラムを作ったのですが、
実行するとファイルが開けませんと表示されて終わってしまういます。
読み込むファイル名はちゃんと確認したし、プログラムと同じフォルダに入っています。
どうしたらいいのでしょう?
0192デフォルトの名無しさん
2007/01/26(金) 01:06:34計算する数値が計算途中でオーバーフローしてると思う。
0193デフォルトの名無しさん
2007/01/26(金) 01:10:34ファイルを同時に開ける数に限りがあったはず。
fclose でファイルを閉じるか、fopen をループから出せばいいんじゃね?
0194デフォルトの名無しさん
2007/01/26(金) 01:15:12いまいち何がしたいのかわからんが、文字列の比較はstrcmp (#include<string.h>)を使うといい
if(filename=="\n"){return 0;}
↓
if(strcmp(filename,"\n")==0){return 0;}
0195デフォルトの名無しさん
2007/01/26(金) 01:16:08計算過程は長いのでソースは載せませんが,
怪しそうなところとしては,exp計算がオーバーフロー,
途中の計算に使う変数が値を取得していない時があること等が考えられます。
-1.#IND00やINFなどはif文で分岐させることは難しいのでしょうか???
0196デフォルトの名無しさん
2007/01/26(金) 01:16:55そしてそのXPは最終的にはその機械のソフトでしか立ち上がりません。起動の過程において、XPのデスクトップ画面はでるのですが・・。
その機械のサービス(嫌なタイプの修理屋)に少しPCの知識があれば、コントロールパネルを開けられると言われて開ける過程を見る
暇もなくコンパネを見せられました。
そのソフトの起動中に、そのソフトを絶対に止めることなく、コンパネを開ける方法はどの様にしたらいいのでしょうか?ソフト画面が全画面
になっていてコンパネを見れません。
自己責任において聞いてます。なにか、コンパネは知識がない奴には見れないなんて感じで言われたので開けれないのが悔しいのです。
そして唯コンパネをシステムを変更する事無しに見たいだけなのです。嫌いなタイプのサービスなんかに馬鹿にされたくありません。
なにとぞ、コンピューターにうとい私を2チャンネラーの知識で助けて下さい。宜しくお願いいたします。
0197デフォルトの名無しさん
2007/01/26(金) 01:19:19ループの開始をfgetsの前に変えてみましたが、変わらず「ファイルのオープンができませんでした」出ます。
実行してすぐ1週目でとまってしまいます。
0198デフォルトの名無しさん
2007/01/26(金) 01:20:26まずは落ち着いてスレタイをよく読むように。
初心者歓迎だけに脳髄反射しないように。
0199196
2007/01/26(金) 01:20:460200197
2007/01/26(金) 01:23:59list.txtに処理をしたいファイルの名前が書いてあって、一つ読んではそのファイルを読み込んで処理をしたいんです。
0201デフォルトの名無しさん
2007/01/26(金) 01:27:26責任持てないけどミ田←こんなキーがCtrlとAltに挟まれてあるでしょ。
それを押してみたらどう?
もう一度言うけど責任は持てない。
0203デフォルトの名無しさん
2007/01/26(金) 01:28:52read()という関数の中で、そのファイルをオープンして読んで処理してんだろ?
終わったらそのファイルを閉じろ。
それと、fopen()に失敗したら、
perror()使ってみな。
fopen()はエラーの際に、その理由を示す番号をerrnoにセットする。
perror()を使って、errnoに応じたメッセージを表示することができる。
多分今回のケースでは"Too many open files"のようなメッセージが出力
されるだろう。
0204デフォルトの名無しさん
2007/01/26(金) 01:31:31っ isinf()@math.h
0205デフォルトの名無しさん
2007/01/26(金) 01:31:46君の文章は日本語として滅茶苦茶だし説明能力に非常に問題がある。
現物も見ずに、2chで君のつたない文章から問題を把握し、適切な回答を
出してくれるようなエスパー能力と忍耐力を持つ人は皆無だろう。
というわけで諦めれ。
0206デフォルトの名無しさん
2007/01/26(金) 01:33:16/* do { */
....
/* } */
0207196
2007/01/26(金) 01:38:40コンパネを出すときに、一瞬のキー操作でだしたので、隠れリンクでしょうか?
Alt+F4をやってみましたが、ソフトの終了無しに全く反応しませんでした。
0208デフォルトの名無しさん
2007/01/26(金) 01:38:43Win + Rを押して、出てきたウィンドウに control と打ち込みEnterを押す
0209デフォルトの名無しさん
2007/01/26(金) 01:41:24ちょwwww
日本語の意味が全くわからんぞww
本当に日本人ですか?
0210デフォルトの名無しさん
2007/01/26(金) 01:43:16そのエラーメッセージは read 関数で出されているんじゃないの?
あとファイル名に改行は入れられない
fgets(filename,255,fp);
↓
fgets(filename,255,fp);
if(filename[strlen(filename)-1]=='\n') filename[strlen(filename)-1]='\0';
0211デフォルトの名無しさん
2007/01/26(金) 01:45:10私の文章がどの様におかしいのか説明お願いいたします。
私はおかしくないと自負して読み返しました。
0212デフォルトの名無しさん
2007/01/26(金) 01:47:23自覚が無いのが一番厄介。諦めて帰れ。
0213デフォルトの名無しさん
2007/01/26(金) 01:53:59本当に有り難うございます。明日やってみます。
>>209
あなたは、コンテクストって概念がない人ですね。主語なんて文章の流れで何度も出す物じゃない。
0214デフォルトの名無しさん
2007/01/26(金) 02:01:38あんたの日本語おかしいよ。どうせチャンコロかチョンだろ?
不法滞在すんなよ。
0215デフォルトの名無しさん
2007/01/26(金) 02:03:22自分のPCでもコマンドを打ち込む物が出てきました。本当に有り難う御座います。感謝してます。
本当に有り難うございました。
0216デフォルトの名無しさん
2007/01/26(金) 02:07:17私の特殊な環境でも不思議とコンパネを入れるとできました。
本当に有り難う御座います。
0217デフォルトの名無しさん
2007/01/26(金) 02:08:46この間違った日本語面白いな。
つーか日本は26日だ。明日は27日だぞ。
0218デフォルトの名無しさん
2007/01/26(金) 02:12:38だがそれがいい。
0219デフォルトの名無しさん
2007/01/26(金) 02:17:52185です.
使用しているvcではなぜかmathにisinf()、isnan等が入っていませんでした・・・
しかし,教えていただいたisinfをもとに検索したところ
#define isnan(x) ((x) != (x))
という方法を見つけ、if文で検出することが出来ました。
また何かありましたらよろしくお願いします。
ありがとうございました.
0220私は215であるが、216ではない。
2007/01/26(金) 02:18:22文章の問題で話合いたいなら、文章の何処がおかしいのか言ってくださいよ。
確かに最初の私の文章は、文章に脈絡がなかったですけどね。
0221デフォルトの名無しさん
2007/01/26(金) 02:25:280222デフォルトの名無しさん
2007/01/26(金) 02:32:04素晴らしいレスです
0223デフォルトの名無しさん
2007/01/26(金) 02:38:14もう解決してしまったようだが、VC++だと、
<float.h>に_isnan()が定義されているかもしれない。
0224デフォルトの名無しさん
2007/01/26(金) 03:26:12継承先のクラス宣言部内(class{〜間};)
で親のpublicメソッドが呼べるのですが、
継承先のメソッド内ではAccess Violationエラーが
出て呼べない状況です。
継承の使い方が間違ってるでしょうか?
class B
{
public:
B(){}
~B(){}
virtual void SendData();
virtual void OnRecieve()=0;
};
void B::SendData(){ }
class A : public B
{
public:
A(){ SendData(); } << 正常にSendData()が実行される
~A(){}
virtual void SendData2();
void OnRecieve(){};
};
void A::SendData2(){ SendData(); }
↑
このメソッドコールするとSendData()のところで
Access Violation C0000005
0225デフォルトの名無しさん
2007/01/26(金) 07:30:47それだけ見ると問題ないなぁ。勝手にソースを省かずに、
問題が再現する最小のコンパイルできるコードを作ってみるといい。
0226デフォルトの名無しさん
2007/01/26(金) 09:11:11いっかいフルコンパイルかけてみたら?
# ヘッダ修正したのに、プリコンパイルヘッダ使いやがって、修正前のヘッダ状態でコードはいちゃった とか?
0227デフォルトの名無しさん
2007/01/26(金) 14:15:45どうやればいいでしょうか?
環境はVC2005,WindowsXPです。
0228デフォルトの名無しさん
2007/01/26(金) 14:39:34新規にスタティックライブラリのプロジェクトを作って、そこにソース&ヘッダをコピペしたほうが早いかも。
そこから、
DllMain周りの初期化/後始末処理と、シンボル名の衝突
__declspec(dllexport), __declspec(dllimport) or *.def の削除は手作業で修正。
0229227
2007/01/26(金) 15:18:16ありがとうございます。
__declspec(dllexport), __declspec(dllimport)を削除したところ
ビルドはできましたがDLLで使えてた機能が使えません。
DllMain周りの初期化/後始末処理とは何でしょうか?
0230デフォルトの名無しさん
2007/01/26(金) 15:31:27#include<stdio.h>
void main(void) { キー入力サンプルプログラム */
charKey;
for(;;){ Key = inp(0x60);
printf("%x\n",Key);
if (Key == 0x01){/* ESCで終わります */ break;}
}}
警告 W8065 test15wc.c 18: プロトタイプ宣言のない関数 'inp' の呼び出し(関数 main )
Error: 外部シンボル '_inp' が未解決
というエラーが出てしまいます。自分なりにやってみたのですが、うまくいきませんでした
0231デフォルトの名無しさん
2007/01/26(金) 15:36:08元々の機能ってフックかなんか? それだと DLL 以外は不可能だぞ。
実行ファイル書くときの WinMain() や main() の亜種で、
DLL用に DllMain() ってのがあって、DLLがロードされたりすると暗黙のうちに呼ばれるのがある。
(詳細はヘルプなりMSDNなりで調べてね)
元ソースを grep してみて、そいつが居るようなら特別な作業が必要ってこった。
0232デフォルトの名無しさん
2007/01/26(金) 15:49:12キー入力する部分の inp() が君の使っているコンパイラには無い。
他の1文字入力を待つ標準関数を探そう。
# 最後に押されたASCIIコードが port 60h のリードで得られるって OS&PC は何なんだろ?
0233デフォルトの名無しさん
2007/01/26(金) 16:00:26HELPが見つかりませんとでます。MFCでもダイアログ以外を選択するとでません。
またMFCでなくWindowsフォームアプリケーションにしても出ません。
これは仕様なのでしょうかね?HELPを作成せずにメッセージを出さなくする方法
はありますか?こちらのスレの方が適切だと後で思ったのでこちらにも書いてみ
ました。マルチポストすみません。
0234デフォルトの名無しさん
2007/01/26(金) 16:01:39簡単なゲーム作成で、藤川ソフトウェア工房で
「C言語のget系の標準関数を使うのは問題外です。2つ以上のキーを同時に認識できないからです。」
「キーボードのデータはI/Oポートのアドレス60hから取得できます。
C言語でI/Oポートのアドレス60hを読むには、conio.hをインクルードしておいて」
ハードウェア割り込みというこでできると書いてありましたが環境が違うので、無理っぽいですが
もう少し調べてみます。有り難うございました。
0235227
2007/01/26(金) 16:05:43>元々の機能ってフックかなんか? それだと DLL 以外は不可能だぞ。
その通りフックです。そうなんですか〜、既存のアプリがランタイム要るので自分で作ろうとしたのにorz
どうもありがとうございました。
0236デフォルトの名無しさん
2007/01/26(金) 16:20:41サイト見つけた。
ttp://www14.big.or.jp/~amiami/fsk/old/stg/stg2.html
AT互換機で DOS/Win9x限定(ポート直たたきするから)
+ コンパイラはWatcomC という縛りの元で Webの内容を構成してるぞ。
環境あわすか、他のページを参考にしたほうが良いんじゃねーかな?
0237デフォルトの名無しさん
2007/01/26(金) 16:33:20そうでした。コンパイラが違うから使えない・・・
あらためて、互換性の高い壁を感じました。(>_<)
コンパイラ変更も含め検討します。
どうもでした!
0238デフォルトの名無しさん
2007/01/26(金) 16:35:01Win32API使えばいいじゃん
0239デフォルトの名無しさん
2007/01/26(金) 16:52:46まじっすか!get系を使っていて同時押しできなくて、どうしようかと悩んでいました。
(真剣にコンパイラ変更を考えていた)コマンドプロンプト用のゲーム。
色や位置設定などでコンソールAPIを使っていました!Win32APIもためしてみます!
有り難うございます。m(_ _)m
0240デフォルトの名無しさん
2007/01/26(金) 17:01:49コンパイラ変更だけじゃなくて、動作OSも変えないと意味ないぞ。 (XP じゃ port 60 のリードできない)
素直に WinAPIを使う=Windows のプログラミングするべし
0241デフォルトの名無しさん
2007/01/26(金) 17:06:21> 私のOSはXP
お前、XP で動いてるんか。
0242デフォルトの名無しさん
2007/01/26(金) 17:09:150244227
2007/01/26(金) 18:35:36既存のアプリが実行ファイルとランタイムの構成で、
それを1つにまとめたくて同じ機能の物はランタイム不要で作れたんですけど、
フックした方がもっと便利なものが作れると思ったら、
DLLとEXEの複数ファイルが必要だったって状態です。
0245デフォルトの名無しさん
2007/01/27(土) 15:28:33何故「一つのファイル」に拘るの?
0246デフォルトの名無しさん
2007/01/27(土) 15:30:350247デフォルトの名無しさん
2007/01/27(土) 16:34:36int size = 128;
int n = size >> 1;
という記述があったんですが">>"はどういう意味なんですか?
0248デフォルトの名無しさん
2007/01/27(土) 16:38:560249デフォルトの名無しさん
2007/01/27(土) 16:39:260250デフォルトの名無しさん
2007/01/27(土) 18:13:52先生に
「どうして”int size = 64;”にしなかったのですか?」
って聞いたら教えてあげる
0251デフォルトの名無しさん
2007/01/27(土) 18:18:34いかがなものでしょうか先生、
ぐらい言うと良い
0252デフォルトの名無しさん
2007/01/27(土) 18:19:550253デフォルトの名無しさん
2007/01/27(土) 19:09:130254デフォルトの名無しさん
2007/01/27(土) 19:10:190255デフォルトの名無しさん
2007/01/27(土) 19:45:080256デフォルトの名無しさん
2007/01/27(土) 23:09:45#include <iostream>
int main()
{
std::cout << "Hello!" << std::endl;
}
ていうのを書いてあるとおりにしたらエラーなんですけど何が違うのでしょうか?
ちなみにエラー文はこちらです。
エラー E2209 hello.cpp 1:インクルードファイル'iostream'をオープンできない
エラー E2290 hello.cpp 7:型限定子'std'がクラス名または名前空間ではない(関数
main())
エラー E2379 hello.cpp 7:ステートメントにセミコロン(;)がない(関数 main())
0257デフォルトの名無しさん
2007/01/27(土) 23:13:33環境書けボケ
0258デフォルトの名無しさん
2007/01/27(土) 23:15:06BCCならbcc32.cfgとilink32.cfgの中身晒せ
それとBCC32.EXEのあるフルパスと
0259デフォルトの名無しさん
2007/01/27(土) 23:31:44中身の見方とは?
素人なのですいません(汗)
0260デフォルトの名無しさん
2007/01/27(土) 23:37:390261デフォルトの名無しさん
2007/01/27(土) 23:37:44OSと使っているコンパイラとコンパイラのある場所のフルパス書け
それが環境だ
0262デフォルトの名無しさん
2007/01/27(土) 23:38:26PC初心者板行け
0263デフォルトの名無しさん
2007/01/27(土) 23:40:34┐(´ー`)┌
0264デフォルトの名無しさん
2007/01/27(土) 23:41:46Intel Pentium CPUおよび互換性のあるCPU(推奨Pentium/166MHz以上)
Windows 2000、Windows 95,98,NT 4.0(SP3以降)
32MB以上のメモリ(推奨64MB以上)
50MB以上のハードディスク
以上です。
0265デフォルトの名無しさん
2007/01/27(土) 23:43:50間違い
0266デフォルトの名無しさん
2007/01/27(土) 23:48:50この板でこれ関連の質問が何度あったことか・・・
0267デフォルトの名無しさん
2007/01/27(土) 23:57:51プログラミングする人ならそれくらい出来てあたりまえだろうと
ボーランドの中の人が思ってたんだろう。
0268デフォルトの名無しさん
2007/01/28(日) 01:01:550269デフォルトの名無しさん
2007/01/28(日) 02:15:530270デフォルトの名無しさん
2007/01/28(日) 06:25:20下位互換のために残っているんじゃないかな?
0271デフォルトの名無しさん
2007/01/28(日) 10:03:24VC++2003では既に無くなってる。
0272デフォルトの名無しさん
2007/01/28(日) 10:23:45それはそのソフトが要求する性能。
こっちが知りたいのは、とりあえずお前が実際に使っているOSとそのバージョン、そして使っているコンパイラ。
>>269
ANSI/ISOの規格ではC++98の当初から削除されていると思う。
0273デフォルトの名無しさん
2007/01/28(日) 12:02:42↓こんなことしてみたんですけど、なにがなんだか。
#include <string>
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
string str = "ABC";
cout << str.c_str() << "\n";
cout << str.data() << "\n";
for ( int i = 0 ; (str.c_str())[i] != '\0' ; i++ )
{
cout << (str.c_str())[i] << "\n";
}
for ( int i = 0 ; (str.data())[i] != '\0' ; i++ )
{
cout << (str.data())[i] << "\n";
}
}
0274デフォルトの名無しさん
2007/01/28(日) 12:14:34ゼロ終端が保証されてるかどうかの違い。
0275デフォルトの名無しさん
2007/01/28(日) 12:15:55data() はつけてくれる保証がない
0276デフォルトの名無しさん
2007/01/28(日) 12:21:13環境も書くべし
c_str()の場合 A B C \0
data()の場合 A B C
0277デフォルトの名無しさん
2007/01/28(日) 12:28:16ttp://www11.ocn.ne.jp/~ikalu/cplus/5001.html
↑このページの
// 「string」と「vector」を使用して、実行ファイルにドラッグアンドドロップ
// されたファイルのパスを分割する
//
// : stringクラスに対して << をオーバーロードするバージョン(サイズ: 56.0 KB)
を使いたいんですけど、コンパイルすると
path.push_back(string(&s[start], s.end())); の所で
error C2665: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string' : 13 オーバーロードのどれも、すべての引数の型を変換できませんでした
になります。どう直せばコンパイルが通るでしょうか?
環境はVC2005,WinXPです。
0278デフォルトの名無しさん
2007/01/28(日) 12:30:40ありがとうございます。
'\0'を入れるかどうかは、環境によるんですね。
結果のみの出力でみにくいですが、
↓のようになりました。(この環境は、dataでも'\0'が入っているということですよね?)
ABC
ABC
A
B
C
A
B
C
>環境も書くべし
はい。気をつけます。Visual Studio C++ 2005です。
0279デフォルトの名無しさん
2007/01/28(日) 12:39:44たまたま使ってない部分に\0が入っていたか、VC++がそういう実装をしてるかのどっちか。
0280デフォルトの名無しさん
2007/01/28(日) 12:45:490281デフォルトの名無しさん
2007/01/28(日) 13:00:35string str = "ABC" の場合だと '\0' は環境に関係なく入るんじゃないの?
0282デフォルトの名無しさん
2007/01/28(日) 13:05:280284デフォルトの名無しさん
2007/01/28(日) 13:34:42『さて,このにstr()というメンバ関数とほとんど同じ動作をする関数で,
data()というメンバンバ関数があります.このdata()も,コールす
ると文字列へのポインタが返ってきます.そういう点ではc_str()とまっ
たく同じ動作なのです.ではどこが違うのかというと,文字列が設定されていな
いときの挙動です. c_str()は,インスタンスに文字列が設定されてい
ないときには,内部であらかじめ用意されている空文字列(つまり.先頭が冒の
文字列)へのポインタが返ります.それに対してdataOメンバ関数は,NU
LT.ポインタが返るのです.この違いがわかりますか?文穿刺が設定されてい
ないstrir咀クラスインスタンスの内存をp1血Oで出力しようとした際に
,c_str()でポインタを取得すると,空文字列へのポインタが返るので,
画面には単なる改行が出力されます.それに対して,data()でポインタを
取得しようとすると,NULLポインタが返るので,puts()で,それを出
力しようとするとランタイムエラーになります.』
らしいです。
そこで、
// string str = "ABC";
string str1;
string str2;
puts(str1.c_str());
puts(str2.data());
としました。
しかし、いずれも改行が出力されます。
この2種類のメンバ関数の違いを確認する場合どうしたらいいでしょうか?
0285デフォルトの名無しさん
2007/01/28(日) 13:40:58> data()というメンバンバ関数
ワロタ
0286デフォルトの名無しさん
2007/01/28(日) 13:42:230287デフォルトの名無しさん
2007/01/28(日) 13:43:05printf("%p\n", str1.c_str());
printf("%p\n", str2.data());
0288デフォルトの名無しさん
2007/01/28(日) 13:44:090289デフォルトの名無しさん
2007/01/28(日) 13:51:02その奇怪な引用はどこから来たんだ?
0290デフォルトの名無しさん
2007/01/28(日) 13:56:080291デフォルトの名無しさん
2007/01/28(日) 14:58:26あえて違わせておく理由が考えにくい。
0292デフォルトの名無しさん
2007/01/28(日) 15:08:37規格にどう書いているかで解決。
規格書持ってるひとよろ。
0294デフォルトの名無しさん
2007/01/28(日) 15:42:050296デフォルトの名無しさん
2007/01/28(日) 15:54:070297デフォルトの名無しさん
2007/01/28(日) 16:41:03printf("%.*s", str.size(), str.data());
とすれば、ナル文字で終端していなくても問題が出ない。
0298デフォルトの名無しさん
2007/01/28(日) 16:54:06>21.3.6 basic_string string operations
>const charT* data() const;
>3 Returns: (略) If size() is zero, the member returns a nonnull pointer
>that is copyable and can have zero added to it.
0299デフォルトの名無しさん
2007/01/28(日) 17:57:11ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3534.zip
水流と勾配から水深を逐次計算法によって出力するプログラムを作っています。
川は限界水深の地点を境に上流側が上流で動水勾配は1/1000、下流は射流で動水勾配は1/250です
流量2210 川幅200 粗度係数0.02 限界水深2.3175として、適当な値をh2以下に当てはめて計算するのですが
常流では適当な値を入れても悪くても20~30回のループで計算が終了するのですが
射流では1000回超えてもループが止まらない場合が多々あります
計算式としては常流analise.cの
hi = D1->H + D1->Z + term1(D1,D2) + term2(D1,D2,dx) - D2->Z;
ここの部分が
hi = D1->H + D1->Z + term1(D1,D2) - term2(D1,D2,dx) - D2->Z;
に変わるだけなのですが、どう修正すればいいでしょうか?
0300デフォルトの名無しさん
2007/01/28(日) 18:07:53ロジックを追ってないのでぱっと見で気付いた点のみ。
・2乗にpow()を使うのは流石に勿体無い。乗算にした方がよさそう。
・analise(なんてスペリングだ)で再帰しているが、ループで書き直すべき。
#もしかしたら再帰でスタックを消費している所為で巧く動かないのかも知れない。
・当然、ループ回数をグローバルで持つ必要はない。
#グローバル変数は諸悪の根源と知るべし。
・後の編集ミスを防止するためにも、OneLinerでないならブロック化したほうがいい。
#analise()内のelse節はその典型。
0301299
2007/01/28(日) 18:09:39各analise.cも古いものだったので上げなおしました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3534.zip
よろしくお願いします。
0302デフォルトの名無しさん
2007/01/28(日) 18:11:23リロードして確認してから書き込め。
0304300
2007/01/28(日) 18:16:06・tempに絶対値を入れるなら、fabs()を使え。
#>double temp;/*誤差を格納*/
#こんなコメントつけるくらいならdouble gosa;とでもした方がよっぽど理解しやすい。
0305デフォルトの名無しさん
2007/01/28(日) 18:40:30X3014の画像PDFなら誰でもタダで見れるぞ。
0306デフォルトの名無しさん
2007/01/28(日) 19:04:26英語版の最新ドラフトもタダで見れるぞ。
0307299
2007/01/28(日) 20:17:08指摘してもらった部分を修正しました。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3537.c
これで下流方向10mの値で
流量2210 川幅200 粗度係数0.02 h1の高さ 2.3175 h1の高さ 0
h2の水深 (任意の予想値) h2の高さ -0.04 距離の差 10
とするとループが止まらなくなるか限界水深より大きい値になってしまいます
hiを求める式の第三項を+にしただけの常流の場合ではちゃんと出るのですが…
0308300
2007/01/28(日) 20:36:11そう言われても式の意味も判らなければ何を求めようとしているのかも判らないから無理w
#動水勾配なんて言葉初めて見たし、限界水深ってのがどういう意味を持つのやら。
##あ、いきなり解説しないでね。どうせ理解する気も暇もないから。
0309デフォルトの名無しさん
2007/01/28(日) 20:37:410310デフォルトの名無しさん
2007/01/28(日) 20:52:16と思ったが>>308と同じ印象を受けたので2分と持たずに挫折した
0311299
2007/01/28(日) 20:55:34>>308-310
分かりました、そちらに移行させて頂きます。
ご協力ありがとうございました。
0312デフォルトの名無しさん
2007/01/28(日) 20:57:09良く理解してないんで確認させてください
VCとBCCはWIN APIのラッパーがあるって記述をWikiで見ました
MinGWもGCC用のラッパーであると思っていいんでしょうか?
0313デフォルトの名無しさん
2007/01/28(日) 23:18:26VCにはMFCがあり、BCCにはVCLがあった。
それはWin32APIをラップして利用者にとって都合のよい方向へ持っていったということ。
MINGWはGCCのラッパーではなくてランタイムライブラリだと思う。
MINGW自体はたしかLinuxの概念をもったなんだっけ。。。
まーそんな感じだったはずなので、ラッパーというよりはエミュレータとかそっちだと思う。
Windows開発にはMinGWでもWin32Apiを使うはずだとおもうけど。
0314デフォルトの名無しさん
2007/01/28(日) 23:20:34> 気も暇も
こういうときはね、頭っていっとくのが一番かっこいいんだよw
0315デフォルトの名無しさん
2007/01/28(日) 23:22:27土木・建築は土質力学・構造力学・水理が重要な三本柱ですよ。
0316デフォルトの名無しさん
2007/01/29(月) 00:23:390317デフォルトの名無しさん
2007/01/29(月) 00:34:440318デフォルトの名無しさん
2007/01/29(月) 02:23:13FALSEだった場合の処理を後に続けたいです。
環境:WindowsXP・VC2005
よろしくお願いします。
0319318
2007/01/29(月) 03:09:28眠いので今日は寝ます、おやすみなさい。
0320300
2007/01/29(月) 06:36:52大丈夫、私の専門では存分に使ってるから。
>>315
なるほど、業界丸ごと縁がないんで知りませんでしたよ。
>>316
私には、そんな無意味なレスしかできない>316が恥ずかしい。
>>317
自己紹介乙。
0321デフォルトの名無しさん
2007/01/29(月) 08:17:12308といい、馬鹿だと思われたくてしょうがないようにしか見えないなw
0322デフォルトの名無しさん
2007/01/29(月) 09:30:07自分で確かめもせずに入に聞くのは良くないと思い以下のコードで実験してみたら
timeBeginPeriod(1);
DWORD t=timeGetTime(),r;
for(int i=0;i<100000000;++i){
try{
if(i<0)throw exception();
}catch(exception e){exit(-1);}
}
r=timeGetTime()-t;
cout<<r<<endl;
t=timeGetTime();
try{
for(int i=0;i<100000000;++i){
if(i<0)throw exception();
}
}catch(exception e){exit(-1);}
r=timeGetTime()-t;
cout<<r<<endl;
timeEndPeriod(1);
結果:
450
270
と出力された。差分180。
でもノイズとしてifの直前にi*=3;i/=3;を入れ、ループ回数を100000000から10000000にしたら
結果:
664
607
となった。差分57。
明らかに差が縮まっていますがこの違いはなんですか?
VC8 最適化なし celeron2.4GHz
0323デフォルトの名無しさん
2007/01/29(月) 10:48:53tryブロックの前処理/後処理より、乗除演算の方が高コストということ。
0324デフォルトの名無しさん
2007/01/29(月) 11:05:420325デフォルトの名無しさん
2007/01/29(月) 11:06:35対照実験として、tryなしのループの速度も測るといいと思うよ。
0326デフォルトの名無しさん
2007/01/29(月) 11:22:230327デフォルトの名無しさん
2007/01/29(月) 11:38:50どうしてかわかりません。
Aは何がよくないのかどなたか教えてください。
A ----------------------
if( month == FEB ){
if(year%4 == 0){
if( day > 29 )
1egal = FALSE;
} else {
if( day > 28 )
1egal=FALSE;
}
}
B ----------------------
if( month == FEB ){
int nday;
nday = 28;
if(year%4 == 0)
nday = 29;
if(day > nday)
1egal = FALSE;
}
0328デフォルトの名無しさん
2007/01/29(月) 11:43:53・1egal = FALSE;の箇所がBは1つしかないから保守が容易。
0329327
2007/01/29(月) 11:48:16わかりました。
(動けばいいと思ってあまりそういうこと考えてことがなかったので)
ありがとうです。
スペルミスでした。
× 1egal
○ legal
0330デフォルトの名無しさん
2007/01/29(月) 12:05:27・未初期化の変数が放置されない
・ローカル変数を節約できる(かも知れない)
但し、三項演算子を否定する方針があると使えない
尚、if文は(1行野郎でないなら)ブロック化したほうがよい
if (month == FEB) {
if (day > year % 4 == 0 ? 29 : 28) {
legal = FALSE:
}
}
0331デフォルトの名無しさん
2007/01/29(月) 12:57:42ま、こういう事さね。
0332デフォルトの名無しさん
2007/01/29(月) 13:03:07legal=!(month==FEB && (day>(year%4)==0 ? 29 ; 28));
0333デフォルトの名無しさん
2007/01/29(月) 13:04:32やりすぎ。 legal が元々 FALSE だったときに逆転 TRUE になるかもしれない。
0334デフォルトの名無しさん
2007/01/29(月) 13:09:37右辺に legal を含んでいない論理演算を代入してるだけじゃん。
0335デフォルトの名無しさん
2007/01/29(月) 13:23:48こうですか?わかりません><
0336デフォルトの名無しさん
2007/01/29(月) 13:26:06だから、それがやりすぎだって言ってんの。元のコードと意味が違うだろ。
0337デフォルトの名無しさん
2007/01/29(月) 13:27:55あ。 そういうことか。
元コードの外で legal = FALSE; で初期化されている場合を想定すると FALSE を維持しなくちゃいけないんだなっ
0338デフォルトの名無しさん
2007/01/29(月) 13:29:490339デフォルトの名無しさん
2007/01/29(月) 14:17:32単なる無能
0340デフォルトの名無しさん
2007/01/29(月) 14:41:240341デフォルトの名無しさん
2007/01/29(月) 19:19:25と書いたんですがコンパイルできません。
0342デフォルトの名無しさん
2007/01/29(月) 19:22:38/*
10 GOTO 10
*/
int main(void){return 0;}
0343デフォルトの名無しさん
2007/01/29(月) 20:43:54_var
var_
m_var
fVar
他に何かある? どれが一番メジャー?
0344漏れはvar派
2007/01/29(月) 20:52:480345デフォルトの名無しさん
2007/01/29(月) 20:56:56VC++だとIDEやフレームワークなどの標準スタイルに合わせてるな。MSのVC++なら m_を使う。
0346デフォルトの名無しさん
2007/01/29(月) 21:02:230347デフォルトの名無しさん
2007/01/29(月) 21:35:330348デフォルトの名無しさん
2007/01/29(月) 21:41:230349デフォルトの名無しさん
2007/01/29(月) 21:49:39int m_nVariable;
みたいな感じでハンガリー記法遵守。
変数名、クラス名も基本端折ってはいけない。
10数文字を目安に端折っていい事になってるけど、m_nVarはNG。
0350デフォルトの名無しさん
2007/01/29(月) 21:51:02何も付けないという手もある、か……?
0351デフォルトの名無しさん
2007/01/29(月) 22:20:400352312
2007/01/29(月) 23:30:19遅レスですみません
MinGWはランタイムライブラリだったんですね
ありがとうございます
実はWindowsとLinuxの両方で使えるソフトを書く時に
どうやったら良いか考えてたもんで、いろいろと調べてます
ぶっちゃけて言うと、どうやったら手抜きができるかとw
もう少し自分で調べてみることにします
ありがとうございます
もし何かヒントでも頂ければ助かります ^-^;
0353デフォルトの名無しさん
2007/01/30(火) 00:10:05>>344
>344 名前:漏れはvar派[sage] 投稿日:2007/01/29(月) 20:52:48
>修飾ってなんですか?
0354デフォルトの名無しさん
2007/01/30(火) 00:29:39NEETステータスを解除するのに必要な儀式。
0355デフォルトの名無しさん
2007/01/30(火) 00:31:49一々 this-> を書かなくてもいいようにする魔法
0356デフォルトの名無しさん
2007/01/30(火) 00:36:37Class(int age) : age(age) {}
みたいになるときは気持ち悪いけどな
0357デフォルトの名無しさん
2007/01/30(火) 15:17:36黒い画面に自分の打った文字が表示されてちょっと感動w
0358デフォルトの名無しさん
2007/01/30(火) 16:16:440359デフォルトの名無しさん
2007/01/30(火) 16:45:09エラーで埋まる画面を見て萎える
0360デフォルトの名無しさん
2007/01/30(火) 16:56:360361デフォルトの名無しさん
2007/01/30(火) 17:17:29そして、export が早く実装されないかなあ、と、叶わぬ夢を見る。
0362デフォルトの名無しさん
2007/01/30(火) 20:09:12どうしたらいいの?
0363デフォルトの名無しさん
2007/01/30(火) 20:22:39いちいち指摘されないように。
>>1
>ただしその場合、質問者は必ず、環境を書きましょう。
0364デフォルトの名無しさん
2007/01/30(火) 20:25:350365デフォルトの名無しさん
2007/01/30(火) 20:32:490366デフォルトの名無しさん
2007/01/30(火) 20:35:150367デフォルトの名無しさん
2007/01/30(火) 20:47:480368デフォルトの名無しさん
2007/01/30(火) 20:51:07なんで C/C++ の標準ライブラリにないんやろ。
0369デフォルトの名無しさん
2007/01/30(火) 20:56:250370デフォルトの名無しさん
2007/01/30(火) 21:00:550371デフォルトの名無しさん
2007/01/30(火) 21:11:17結構凄いかな?
0372デフォルトの名無しさん
2007/01/30(火) 21:12:050373デフォルトの名無しさん
2007/01/30(火) 21:14:18勉強目的じゃないなら無駄
実際に使うときは std::vector にしておくと吉
0374デフォルトの名無しさん
2007/01/30(火) 21:39:23C++がvectorに要求している例外安全性とパフォーマンスの要求を両方満たしているのならそこそこ凄い。
どっちか満たしていないのなら非常に楽、というかまったく凄くもなんともない。
0375デフォルトの名無しさん
2007/01/30(火) 21:53:400376デフォルトの名無しさん
2007/01/30(火) 22:55:43環境はVisual C++ 2005を使っています。
質問なのですが、エディットコントロールに入力された値を、
プログラム中でDouble型で使いたいのですが、まったくわかりません。
これまでに試したことは、以下のとおりです。
�@GetDlgItemInt()を使ったがInt型だった・・・orz
�AGetWindowTextW();でとってきて、i○○f←(度忘れしました・・・)でキャスト。
なぜかInt型になってしまう。
�@のDouble版見たいなのはないのでしょうか?
HelpやYahooで調べては見たのですが、手詰まり状態です。
ぜひ、ご教授願います。
0377デフォルトの名無しさん
2007/01/30(火) 23:16:460378デフォルトの名無しさん
2007/01/31(水) 03:29:16a to int
aって何なのですか?
charのa?
0379デフォルトの名無しさん
2007/01/31(水) 04:01:480380デフォルトの名無しさん
2007/01/31(水) 04:04:040381デフォルトの名無しさん
2007/01/31(水) 13:23:26関数名の一覧を簡単に取得する方法を教えてください!
環境はUNIXです。
よろしくお願いします!
0382デフォルトの名無しさん
2007/01/31(水) 14:22:410383デフォルトの名無しさん
2007/01/31(水) 15:39:43以下のコードでメモリアクセス違反(だと思う)が起きます。
原因と対策についてヒントなり、ご教授願えたらと考えています。
(やりたいこと:boost::functionの動的な配列を作りたい)
template< typename T >
class Cfoo{
public:
Cfoo( int size ){
f = new T[size];
cout << "foo コンストラクタ" << endl;
}
~Cfoo(){
delete f;
cout << "foo デストラクタ" << endl;
}
private:
T *f;
};
void main( void ){
typedef boost::function< void(void) > BoostFunc;
Cfoo< BoostFunc > foo(10);
}
0384デフォルトの名無しさん
2007/01/31(水) 15:43:160385383
2007/01/31(水) 15:54:13delete f;
→delete f[];
にするということでしょうか?
0386デフォルトの名無しさん
2007/01/31(水) 15:59:28new [] で確保したら detele [] を
Effective C++ 3版の16項とか参照
0387383
2007/01/31(水) 16:14:40ご教授いただきありがとうございます。
うまく動作しました。
Effective C++を急ぎ買いにいきたいと
考えています。
0388デフォルトの名無しさん
2007/01/31(水) 17:48:05チャル?チャー?
0389デフォルトの名無しさん
2007/01/31(水) 17:50:360390デフォルトの名無しさん
2007/01/31(水) 17:56:140391デフォルトの名無しさん
2007/01/31(水) 17:57:540392デフォルトの名無しさん
2007/01/31(水) 18:02:31そんなの・・・そんなのおかしいですよ……!!
0393デフォルトの名無しさん
2007/01/31(水) 18:24:44Top > @IT会議室 > @ITクラブ Cafe 会議室 > charの読み方
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?mode=viewtopic&topic=10483&forum=3&start=0
0394デフォルトの名無しさん
2007/01/31(水) 18:32:540395デフォルトの名無しさん
2007/01/31(水) 18:42:080396デフォルトの名無しさん
2007/01/31(水) 19:24:520397デフォルトの名無しさん
2007/01/31(水) 19:33:59例えば●を10個続けて表示させるときは下のようにしています。
for (int i=0;i<10;i++) printf ("●");
これを一つの関数で実現できるならば教えてください。
# 10個なのは例えですので、10個の●を文字列にして表示させれば良いというのは勘弁してください。
0398デフォルトの名無しさん
2007/01/31(水) 19:36:20これでおk?
0399デフォルトの名無しさん
2007/01/31(水) 22:49:420400デフォルトの名無しさん
2007/01/31(水) 22:59:510401デフォルトの名無しさん
2007/01/31(水) 23:29:03自分で関数作ればいいんじゃないか?
0402デフォルトの名無しさん
2007/02/01(木) 00:28:09日本人だけ、何故か「キャラ」と言い張る人が多いんだよな。
0403デフォルトの名無しさん
2007/02/01(木) 02:03:26それは大抵の環境で異常動作をするぞ。
#いや、鼻から悪魔が出るかも知れんが。
0404デフォルトの名無しさん
2007/02/01(木) 03:09:50AppProcess(THING*);//test
//Render();
}
ここで言う2行目でerror C2059: 構文エラー : ')'が出るんですけど、
何がいけないのでしょうか?
0405404
2007/02/01(木) 03:10:540406デフォルトの名無しさん
2007/02/01(木) 03:14:310407404
2007/02/01(木) 03:15:37構文エラーが出た理由は分かりませんが、関数を定義しなおしたら通りました。
0408makoto
2007/02/01(木) 12:28:523575.zip
↑は、リスト構造を使ったプログラムですが、EXEファイルを実行すると
なぜか最初に登録(名前&番号)した時点で「問題が発生したため、
・・・.exeを終了します」とダイアログが出ます。なにがいけないの
でしょうか?解決策を教えてください。
0409デフォルトの名無しさん
2007/02/01(木) 12:45:49>void InputData( Nameval2 *ret )
呼び出し元には関数内で確保したポインタが返らない。
理由は自分で考えな。
0410デフォルトの名無しさん
2007/02/01(木) 20:36:25半径rのデータの合計を求めたいのですが、どうしたらいいんでしょう?
0411デフォルトの名無しさん
2007/02/01(木) 20:38:15C言語でdata[128][128]の配列のdata[64][64]を原点として
半径rのデータの合計を求めるプログラムを作る。
0412デフォルトの名無しさん
2007/02/01(木) 20:53:09x*x + y*y = r*r
こんな感じの式じゃなかったっけ?
0413デフォルトの名無しさん
2007/02/01(木) 21:32:23常識的に考えて
0414ガロ
2007/02/01(木) 22:04:09分かる方おられませんか?
•自動販売機のオブジェクトを作成し実現しなさい(ジュース,たばこ,カップラーメンなど何でも良い(何の自販機は出力すること))。ただし,下記の条件を満たすこと。
<条件>
•自動販売機で購入できる「商品商品」,「お金お金」,「自動販売機自動販売機」は最低限クラス化すること。
•「カプセル化」,「継承」,「多様性」を全て利用すること。
•例外処理をすること(プログラムが頓挫した時点でNGとします)。
•入出力は,下記のとおり行うこと。
【入力】
・お金(10円〜1000円)の個数(枚数)
・購入商品選択(複数可)
【出力】
・つり銭(10円〜100円)の個数(枚数)と総購入代金
・購入商品名(複数)
•実現は,main()関数で「自動販売機」クラスのインスタンスを1つ作成し,そのクラスのbuy()メンバ関数を呼び出したら全てが動作するようにする。
0415デフォルトの名無しさん
2007/02/01(木) 22:16:14宿題スレへ
0416ガロ
2007/02/01(木) 22:19:14宿題スレでやってもらえなかったので。。
すみません。。。
0417デフォルトの名無しさん
2007/02/01(木) 22:21:52error LNK2020: 未解決のトークン (0A000006) new
error LNK2020: 未解決のトークン (0A000013) memset
fatal error LNK1120: 外部参照 2 が未解決です。
VC++2003で今日からDXライブラリを使おうと、
#include "DxLib.h"
if( DxLib_Init() == -1 )
{ return -1 ;}
WaitKey() ;
DxLib_End() ;
を既存のコードに書き加えたところ、上四行のエラーが出ました。
もし定番のエラーか何かでしたら、ご教授願います。。
0418デフォルトの名無しさん
2007/02/01(木) 22:30:360419デフォルトの名無しさん
2007/02/01(木) 22:31:52人にやってもらっても勉強にならん。
ちょっとは自分でやれ。
0420デフォルトの名無しさん
2007/02/01(木) 22:33:33\"
0421デフォルトの名無しさん
2007/02/01(木) 23:05:47privateとか実際使う人いるの?
publicにしといたほうがあとあとfriendとか使わなくてすむし
簡単に使えるしpublicマンセーなんですけど
こんな僕にprivateの良さを教えてくださいお願いします
0422デフォルトの名無しさん
2007/02/01(木) 23:11:310423デフォルトの名無しさん
2007/02/01(木) 23:22:28整理のためとかならさらに意味がないと思います
整理なら構造体やら使って整理はできますし
全てpublicだとなにか不具合でもあるのですか?
privateの利点はなんですか?
0424デフォルトの名無しさん
2007/02/01(木) 23:24:230425デフォルトの名無しさん
2007/02/01(木) 23:24:56刃が剥き出しのシュレッダー
高圧部が露出したブラウン管
使い方に気を付けても、事故が起きるかもしれない。
0426デフォルトの名無しさん
2007/02/01(木) 23:28:23ところでprivateとpublicはラベルなのか。
0427デフォルトの名無しさん
2007/02/01(木) 23:34:21public:
まー、たしかに、ラベルと同じ外見をしてはいるな。
0428デフォルトの名無しさん
2007/02/01(木) 23:51:15ある本でもラベルとして書いてた
あと勉強したくないわけではなくて
プライベートの意味をしっかり理解して
使いこなせるようになりたいんで質問しています
未だ事故のようなことが起きていないもので
0429デフォルトの名無しさん
2007/02/02(金) 00:00:45ハッシュテーブルの中身を自由に書き換える事が出来るとしたら…とか?
0430デフォルトの名無しさん
2007/02/02(金) 00:04:24構造体を使っても、public とか private 相当な事を実現できますよ
※ファイルスコープなので、別ファイルにすればという条件付で
0431デフォルトの名無しさん
2007/02/02(金) 00:06:56作った本人だとしても、半年後の自分が完璧に覚えていると言い切れますか?
余計なモノは見せない、触らせない。
インタフェースの考え方に、そういう理論もあるらしい。
0432デフォルトの名無しさん
2007/02/02(金) 08:58:15何か指針あるんかな?
0433デフォルトの名無しさん
2007/02/02(金) 09:12:20基本は全てprivate。
どうしてもそうする必要があるならprotected。
0434デフォルトの名無しさん
2007/02/02(金) 09:28:34ありがと。 private ベースで組み立てたほうが良いと。
単純なアクセッサを protected に置くのは、場合よりけりな問題か…
0435デフォルトの名無しさん
2007/02/02(金) 11:01:26単純なアクセサってことは内部構造を知らないと使えないということになってしまうよね。
#まぁ、そういうケースもあるっちゃある。外部からは単純かどうか判らないのだし。
0437デフォルトの名無しさん
2007/02/02(金) 12:02:35>まぁ、そういうケースもあるっちゃある。外部からは単純かどうか判らないのだし。
まさにその通りで
read 側なら(使うかどうかを考えずに)気楽にホイホイ作っちゃいますね。
>>436
ぽちりますた。
0438デフォルトの名無しさん
2007/02/02(金) 12:55:01http://pc10.2ch.net/test/read.cgi/prog/1169812216/
0439デフォルトの名無しさん
2007/02/02(金) 20:31:29Includeフォルダを探しても
curses.hが見つからないんです
一応検索してみたんですがいい情報がなかったので
解決方法を教えてください
0440デフォルトの名無しさん
2007/02/02(金) 22:09:12何をしたいかによる
0441デフォルトの名無しさん
2007/02/02(金) 23:19:03これらは、何時、何処で使うべきなのでしょうか。
通常のエラー処理に使っているときりがなくなってしまうと思います。
try chachの使用基準を教えて頂きたいです。
0442デフォルトの名無しさん
2007/02/02(金) 23:20:01あなたが必要なように基準を設定する。
0443デフォルトの名無しさん
2007/02/03(土) 00:33:470444デフォルトの名無しさん
2007/02/03(土) 00:39:440445デフォルトの名無しさん
2007/02/03(土) 00:41:12まで読んだ
0446デフォルトの名無しさん
2007/02/03(土) 00:46:010447デフォルトの名無しさん
2007/02/03(土) 01:25:090448デフォルトの名無しさん
2007/02/03(土) 01:25:14理想的な使い方においては、あなたが思っているほど try, catch の出番は多くありません。
throw は外部にエラーを報告したいときはいつでも使っていいです。
0449デフォルトの名無しさん
2007/02/03(土) 01:27:07w
0450デフォルトの名無しさん
2007/02/03(土) 06:54:43test.cc と言うファイル、
#include <stdio.h>
class C{
public:
int a(){
return 1;
}
int(*get_f())(){
return a;
}
};
int main(){
int (* f)();
C c;
f = c.get_f();
printf("%d\n", (*f)());
return 0;
}
を、
gcc test.cc
でコンパイルすると、
test.cc: In member function `int (* C::get_f())()':
test.cc:9: error: argument of type `int (C::)()' does not match `int (*)()'
のエラーが出ます。
クラス関数のポインタを取得したいのですが、
どう記述すれば良いでしょうか?
gcc は、3.3.5 です。
0451デフォルトの名無しさん
2007/02/03(土) 06:57:03その他の方法についての詳細は↓
0452デフォルトの名無しさん
2007/02/03(土) 07:19:410453デフォルトの名無しさん
2007/02/03(土) 07:21:46const int mx=(int)floor((double)Lx/(double)mm);
const int my=(int)floor((double)Ly/(double)mm);
int cell[mx][my][n+1];
……
とすると、
error C2057: 定数式が必要です。
error C2466: サイズが 0 の配列を割り当てまたは宣言しようとしました。
とかでてきました。。。どうすればいいのでしょうか。。。
動的多次元配列というのもよくわかりません。
0454デフォルトの名無しさん
2007/02/03(土) 07:27:05大抵の参考書を見ると、一番はいじめのheadを今挿入するnextに入れて、逆さまに格納していくのが多いのですが
それを、逆さまにせずに格納したいのです。
このような方法は可能なのでしょうか?
格納する段階で、headの位置はどうやっても変わってしまうのが困るのですが…。
0455デフォルトの名無しさん
2007/02/03(土) 08:01:280456デフォルトの名無しさん
2007/02/03(土) 08:26:02リンクリストで尚且つ一番初めの要素の参照しか保持していないからランダムアクセスは無理とよく聞くんですが。
0457デフォルトの名無しさん
2007/02/03(土) 09:13:29double linked listにしてheadとtailを持てばいいのでは?
0458デフォルトの名無しさん
2007/02/03(土) 09:35:50そのエラーメッセージの通り、コンパイル時にサイズが確定できないから。
newで確保しろ。
”メンバ関数 ポインタ”でぐぐったらいいんでね?
0460デフォルトの名無しさん
2007/02/03(土) 14:19:47ここのスレでいいのかわからないのですが、質問させていただきます。
フォーム上に円、四角形や線を描画するたびに、
オブジェクトとして座標とともに記憶させていきたいのですが、なかなかうまくいきません。
どなたか、教えていただけないでしょうか。
よろしくお願いします。
0461デフォルトの名無しさん
2007/02/03(土) 14:29:42C++Builder相談室 Part17
http://pc10.2ch.net/test/read.cgi/tech/1162918887/
0462デフォルトの名無しさん
2007/02/03(土) 14:38:49親切にも、エラーメッセージに書いてあるじゃん。
0463デフォルトの名無しさん
2007/02/03(土) 14:48:500464460
2007/02/03(土) 14:56:12スレ違いのご指摘ありがとうございました。
C++Builder相談室にいってみます。
失礼いたしました。
0465デフォルトの名無しさん
2007/02/03(土) 14:57:170466デフォルトの名無しさん
2007/02/03(土) 17:25:29こんな多次元配列があったとして
char *func(char **str,num){
return *(str+num);
}
こんな関数で、
printf("%d=>%s\n",num,func((char **)str, num));
NUMの文字列を返そうと思ったのですが
うまくいきません。
0467デフォルトの名無しさん
2007/02/03(土) 17:31:36○str + num * STRLEN
0468デフォルトの名無しさん
2007/02/03(土) 18:45:260469デフォルトの名無しさん
2007/02/03(土) 19:57:09ポリフォーリズム、オーバーロード等をかんがみて作り方が
分からないというレスがあって、宿題レスに行けで無視されてて
それを見て、面白そうだから作ってみようと思いクラス作って
いるんですが、まず、自動販売機には商品が入ってる
わけですけど、商品クラスと自動販売機クラスを作るに当たって
自動販売機があってこそ商品を販売出来る?
商品があってこそ自動販売機で販売できる?
とどちらをどう継承したらいいか、それと自動販売機は商品を見れないと
いけないから、商品の名前、値段、個数等をprotectedで宣言して
自動販売機からは商品を継承できるようにprotectedで継承して
あと、お金クラスを作って、これで、商品を購入で、商品の個数を
減らして・・・
と、考えてちょっと作って、まだ途中なんですが
クラスの設計って、普通、紙かなんかで全体像を書いてソースを書いていく
物なのでしょうか。なんか作っていくと、その場その場で考えてソース書くと
行き当たりばったりで、「あ〜・・ここはこうすべきだった・・」みたいな事が後から
出てきて、たぶんこのまま作り続けても、めちゃめちゃなクラス設計に
なると思うんです。
そこで、みなさんは、クラスを作る時、まず何から初めて、何をしてソースを
書き出すのか教えていただきたいです。
0470デフォルトの名無しさん
2007/02/03(土) 20:00:52考える事
>何をしてソースを書き出す
手を動かして
0471デフォルトの名無しさん
2007/02/03(土) 20:20:09自分なら
1.商品と自動販売機は別クラス
2.商品の基底クラスは作っておく
3.商品の名前、価格はメソッドを使って調べる(さらに個数は商品自身の属性ではない)
0472デフォルトの名無しさん
2007/02/03(土) 20:33:52価格も商品自身の属性ではないとも考えられる
(夏場は自動販売機でのコカコーラ製品の値下げとかあるし)
0473デフォルトの名無しさん
2007/02/03(土) 20:50:33読みにくくて読む気がおきん・・・
0474デフォルトの名無しさん
2007/02/03(土) 20:57:050475デフォルトの名無しさん
2007/02/03(土) 21:09:24┃機械┃ ┃商品┃
┗━━┛ ┗━━┛
↑ ↑ ↑
┏━━━┓ ┏━━━┓┏━━━┓
┃自販機┃ ┃ホット ┃┃クール.┃
┗━━━┛ ┗━━━┛┗━━━┛
0477デフォルトの名無しさん
2007/02/03(土) 21:20:44C++ です。
文字列などの扱いについて質問なのですが、char * と unsigned char *では
どちらに統一するべきでしょうか。
片方に統一しようとすると、標準ライブラリが どっちつかずだったりして
迷ってしまいます。
よろしくお願いします。
0478デフォルトの名無しさん
2007/02/03(土) 21:27:470479デフォルトの名無しさん
2007/02/03(土) 21:29:00文字列「などの」ってのがちょっとわからんな。
文字列だけをいうなら、std::stringがbasic_string<char>のtypedefであるというのを考えても、
標準の思想としてはchar*のほうが「なじむ」のではないかと思うけれども。
0480デフォルトの名無しさん
2007/02/03(土) 21:29:02文字は char だろ。 signed char, unsigned char は小さい整数型。
標準ライブラリで文字を unsigned char としているところなんてあったっけ?
0481477
2007/02/03(土) 22:07:01ありがとうございます。
標準ライブラリに unsigned char * があったと思ったのは思い違いかもです。
char * で統一できるよう、ちょっとソースを見直してみます。
どっちでもええやん・・・って場面の方が多いのですが、いちいちキャストして
あげないといけなかったり、けっこうゲンナリしてしまっています。
0482デフォルトの名無しさん
2007/02/03(土) 22:18:58文字列じゃなくてバイナリデータとしてなら unsigned char * はよく使うけどな。
0483デフォルトの名無しさん
2007/02/03(土) 22:21:06ソケットインターフェースがchar*とか取るのはマジ勘弁。
0484デフォルトの名無しさん
2007/02/03(土) 22:42:590485482
2007/02/03(土) 22:45:13俺もインターフェイス部分では void * にするけど、
関数内では unsigned char * にする。
void * 型に加減算できるようなキモイコンパイラは gcc ぐらいだし、
こーするのが定石だと思ってたんだが、違うのか?
0486デフォルトの名無しさん
2007/02/03(土) 22:46:02void*でやり取りするとしても、実際中身に触れるときにvoid*では無理だろ。
0487450
2007/02/03(土) 22:50:45int(C::*get_f())(){
return &C::a;
}
と変更することでコンパイル出来ました。
でもこれだとクラス内の相対的なアドレス(?)が取得出来るだけで、
戻り値単独では、使えませんでした。
return &this->a;
と書くことは出来ないんですね。
0488デフォルトの名無しさん
2007/02/03(土) 22:52:46>>451
0489デフォルトの名無しさん
2007/02/03(土) 22:59:31#include <cstdio>
#include <boost/function.hpp>
#include <boost/bind.hpp>
class C {
public:
int a() {
return 1;
}
boost::function<int ()> get_f() {
return boost::bind(&C::a, this);
}
};
int main() {
using std::printf;
C c;
boost::function<int ()> f = c.get_f();
printf("%d\n", f());
return 0;
}
0490デフォルトの名無しさん
2007/02/03(土) 23:37:072つの値を入力してunsigned char型の変数x,yに代入してください。
また、a = x + y,b = x * yの計算をし表示してください。
※a及びbは、オーバーフローを考慮しえプログラムを作成すること
printf関数で出力。
↓困ってる作り途中…↓
0491デフォルトの名無しさん
2007/02/03(土) 23:37:41#include <stdio.h>
struct hensu{
int a;
int b;
unsigned char x[10];
unsigned char y[10];
}test;
void data_input()
{
printf("2つの値を入力してください。\n");
scanf("%s",&test.x);
scanf("%s",&test.y);
}
void data_output()
{
printf("x = %s, y = %s, x + y = %d, x * y = %d",test.x,test.y,test.a,test.b);
}
int main(int *, unsigned char *)
{
data_input();
data_output();
return 0;
}
0492デフォルトの名無しさん
2007/02/03(土) 23:48:18進歩も反省の色もないな
138 名前:デフォルトの名無しさん[sage] 投稿日:2007/02/03(土) 22:04:34
>>136
x と y には何が入るの?
1.一般的な文字列?(氏名とか)
2.0〜9 の数字のみからなる文字列?
もし 2.なら >>136 のしたいことは下記の事かもしれない
#include<stdlib.h>
test.a = atoi(test.x) + atoi(test.y);
test.b = atoi(test.x) * atoi(test.y);
要するに、何がしたいのかよく分からないのでエスパー回答しかできないってこった
0493デフォルトの名無しさん
2007/02/04(日) 00:23:10もっとさぁ、ちゃんと、何て言うか・・・
何がしたいのかっていうかさぁ・・・
ちゃんとしようよ。初心者なのは分かるけど。本読んで勉強したり。
もっと他の・・・・・ああああああ!!!!!
もういい、何がしたいか問題文を簡潔に書け。
構造体を使いたいのは分かったから、どうしてどうしたいのか。
ソースを見る限り、簡単なことをしたいだけだろうから、答えどっかに
アップするから。問題文書け。そんだけだ。
0494デフォルトの名無しさん
2007/02/04(日) 00:33:00#include <stdio.h>
#include <stdlib.h>
struct hensu{
int a;
int b;
unsigned char x[10];
unsigned char y[10];
}test;
void data_input(void) {
printf("2つの値を入力してください。\n");
printf("X:");
scanf(" %s",test.x);
printf("Y:");
scanf(" %s",test.y);
test.a=atoi(test.x) + atoi(test.y);
test.b=atoi(test.x) * atoi(test.y);
}
void data_output(void){ printf("x = %s, y = %s, x + y = %d, x * y = %d",test.x,test.y, test.a,test.b); }
int main(void){
data_input();
data_output();
return 0;
}
0495デフォルトの名無しさん
2007/02/04(日) 00:57:04そんな事出来るんですか?
0496デフォルトの名無しさん
2007/02/04(日) 00:58:520497デフォルトの名無しさん
2007/02/04(日) 01:06:01って反則ですか、そうですか。
0498デフォルトの名無しさん
2007/02/04(日) 01:10:220499デフォルトの名無しさん
2007/02/04(日) 10:49:06どうしたら良いか教えてください。
sendto(sock, "TEST", 4, 0, (struct sockaddr *)&addr, sizerof(addr));
な感じで"TEST"は送信出来ています、この前後にSTXとETXを入れたいのですが
0500デフォルトの名無しさん
2007/02/04(日) 10:49:23void MemFunc() { std::cout << "call\n"; }
};
int main() {
std::map<int, Value> m;
std::for_each(m.begin(), m.end(), std::mem_fun_ref(&Value::MemFunc));
//std::vector<Value> vv;
//std::for_each(vv.begin(), vv.end(), std::mem_fun_ref(&Value::MemFunc));
}
コメントアウトしたvectorの場合のように、mapでvalue側のメンバ関数を呼び出したいんですが
このままだと当然ペアそのものが引数になってしまうのでコンパイルできません
これを標準でこなすにはどうするんでしょか?
今はペアを受け取る関数を経由してよびだしてます
0501デフォルトの名無しさん
2007/02/04(日) 11:14:52_set_new_handler(can_not_allocate);
char *p = NULL;
try {
p = new char[1024 * 1024 * 10000];
} catch (std::bad_alloc) {
printf("err\n");
}
と、明らかに不可能なサイズを指定するとbad_allocがthrowされるのですが、これが
p = new char[1024 * 1024 * 200];
くらいだとthrowされずに、アプリが止まってしまいます…
どうにかならないでしょうか?
0502デフォルトの名無しさん
2007/02/04(日) 11:16:11sprintf
0503デフォルトの名無しさん
2007/02/04(日) 11:18:49#define STX "\x02"
#define ETX "\x03"
sendto(sock, STX "TEST" ETX, 4 + 2, 0, (struct sockaddr *)&addr, sizerof(addr));
#define TEST_WITH_STX_ETX STX "test" ETX
sendto(sock, TEST_WITH_STX_ETX, sizeof(TEST_WITH_STX_ETX) - 1, 0, (struct sockaddr *)&addr, sizerof(addr));
#define MAX_SEND_SIZE 100
char buf[MAX_SEND_SIZE +3];
sprintf(buf, STX "%." MAX_SEND_SIZE "s" ETX", "TEST");
sendto(sock, buf, strlen(buf), 0, (struct sockaddr *)&addr, sizerof(addr));
0504デフォルトの名無しさん
2007/02/04(日) 12:10:18止まってるんじゃなくてスワップしまくってるだけじゃないの?
何をしたいのかわからんからこれ以上は答えようがないけど。
0505デフォルトの名無しさん
2007/02/04(日) 13:44:19標準だけではどうしようもないから、そうするしかないと思う。
もしBoostを使ってよければこんなこともできる。
#include <map>
#include <iostream>
#include <functional>
#include <algorithm>
#include <boost/bind.hpp>
#include <boost/iterator/transform_iterator.hpp>
struct Value {
void MemFunc() { std::cout << "call\n"; }
};
int main() {
typedef std::map<int, Value> hoge_map;
hoge_map m;
m.insert(hoge_map::value_type());
std::for_each(
boost::make_transform_iterator(m.begin(), boost::bind(&hoge_map::value_type::second, _1)),
boost::make_transform_iterator(m.end(), boost::bind(&hoge_map::value_type::second, _1)),
std::mem_fun_ref(&Value::MemFunc));
}
transform_iteratorは、*演算子での参照時、指定した関数オブジェクトを適用するというもの。
ここでは、bindでpairからValueの方を取り出す関数オブジェクトを指定しているので、
このtransform_iteratorは、*で参照するとValue型のオブジェクトが取り出せるようになっている。
0506デフォルトの名無しさん
2007/02/04(日) 13:57:24うおぉありがとう。
いろいろ頑張ってたんですが、STLだと転送関数書くのが普通なんですか orz
lambdaかbindか使えばスマートにできそうだなぁとは、ぼんやり考えてましたが
transform_iteratorは使ったことなかったので別の機会に参考にしたいとおもいます
0507デフォルトの名無しさん
2007/02/04(日) 13:58:140508デフォルトの名無しさん
2007/02/04(日) 13:59:59有り難う御座います、出来ました。
0509デフォルトの名無しさん
2007/02/04(日) 14:29:28ありがとうございます。
そのスワップがいつまでたっても終わってくれないようです。
こうゆう場合、bad_allocを投げて欲しいのですが…
0510デフォルトの名無しさん
2007/02/04(日) 14:33:25ローカルにapacheを立ち上げてActivePerlでBBSを動かしています。
そのBBSへWinSockを使用してPOSTを送っているのですが、
書き込みが成功しません。
http://www.ics.kagoshima-u.ac.jp/edu/katuyoukiso/http/index.html
ここの疑似クライアントでPOSTを送ると成功します。
どうやらこのクライアントプログラムでは改行コードの自動変換するようで、
改行を"\r\n"に変えずに送っても成功しました。
そこで、同じPOST文を改行を"\r\n"に変換しCのプログラムに貼り付けて
sendで送ってやるとステータスコード200が返って来るのに書き込みが成功しません。
ここで言う「改行」とはエンターキーを押しただけの事です。
ちなみにsendの直後にrecvも書いているのですが、受信出来ずに止まってしまいます。
ステータスコードはapacheのログから読み取りました。
ちなみにCプログラム上からのGETは問題なく動作しました。
言葉足らずで申し訳無いのですが、よろしくお願いします。
0511デフォルトの名無しさん
2007/02/04(日) 14:41:43通信プロトコルを分かってるかどうかが一番怪しい
>改行を"\r\n"に変換し
の部分が二番目に怪しい
できるならソースコードすべてうp
0512デフォルトの名無しさん
2007/02/04(日) 14:52:00↓のようにtoutというインスタンスを生成して標準出力できるか
どうかを試してみました。
#include <iostream>
#include <conio.h>
using namespace std;
int main(void)
{
ostream tout;
tout << "coutの代わり\n";
getch();
}
これを実行すると↓のエラーがでてしまいます。
ostream型の新たなインスタンスを作って
標準出力することは不可能なのでしょうか?
error C2512: 'std::basic_ostream<_Elem,_Traits>' : クラス、構造体、共用体に既定のコンストラクタがありません。
0513デフォルトの名無しさん
2007/02/04(日) 14:59:56そりゃぁ、要求されたメモリを実直に確保しようとしているOSに失礼な発言だぞ。
0514デフォルトの名無しさん
2007/02/04(日) 15:19:37#include <iostream>
#include <windows.h>
int main(void)
{
MEMORYSTATUS mem_status;
mem_status.dwLength=sizeof(mem_status);
GlobalMemoryStatus(&mem_status);
std::cout << "物理メモリ : " << mem_status.dwTotalPhys << " bytes" << std::endl;
std::cout << "空き物理メモリ : " << mem_status.dwAvailPhys << " bytes" << std::endl;
return 0;
}
0515510
2007/02/04(日) 15:27:04読みづらい事この上ないと思いますがよろしくお願いします。
http://bbs.freedeai.com/src/up0452.txt
拡張子を.cppへ変えてください。
使い方は
(プログラム名).exe URL ポート番号 アクセスを繰り返す回数 書き込むフォーム名(未使用) ディレクトリ名(未使用)
です。
ちなみに卒研用に開発しているので、悪用するつもりはありません。
0516デフォルトの名無しさん
2007/02/04(日) 15:37:46coutはstd::ostreamクラスのインスタンスということに違いはないが、
std::ostreamのコンストラクタでは、出力先となる「ストリームバッファ」を渡さなければならない。
std::ostreamは出力内容を文字列化したら、実際の出力をストリームバッファへ丸投げしている。
ストリームバッファは名前のとおりバッファリングしつつ、実際に出力を行うという役割分担になっている。
だから標準出力を行いたければ、標準出力に対応するストリームバッファを用意しなければならない。
それよりもWindowsとかUnix系なら単にstd::ofstreamで"con"を開くのが楽。
0517デフォルトの名無しさん
2007/02/04(日) 15:51:04それだったら、VirtualAllocの使い方を教えたほうがいいような気がする。
0518デフォルトの名無しさん
2007/02/04(日) 15:52:420519デフォルトの名無しさん
2007/02/04(日) 16:20:14関数のあるヘッダにインクルードする前じゃないと未定義にされます。
includeより先に構造体っていうのは見栄え悪いと思うんですが、
この場合、一番初めに読み込むヘッダに構造体を宣言すればいいのでしょうか?
0520デフォルトの名無しさん
2007/02/04(日) 16:42:40const char* じゃなくて char* ね。
0521デフォルトの名無しさん
2007/02/04(日) 16:45:11部分的にで良いからその問題部分のソース書いちゃえよ
もう、なんか、書いてることの意味がわかんないから
0522デフォルトの名無しさん
2007/02/04(日) 16:46:30あまりお勧めしないが、 &s[0] でいいかね?
終端の 0 に気をつけてな。
0523デフォルトの名無しさん
2007/02/04(日) 16:48:28なぜお勧めしないのですか?
確か vector はそれが可能だったよね。
string でも保障されているのかな。
0524デフォルトの名無しさん
2007/02/04(日) 17:15:340525デフォルトの名無しさん
2007/02/04(日) 17:27:00struct GAME{
int turn; //ターン数
}gameSc;
これを
// scene_b.h
//←ここに持ってくるか
void ClickBtScene(HWND hWnd,
int *scene,int x,int y,int *ani,
struct GAME *gameSc,bool *timOn)
{
//turnを使う
}
// game.cpp
//←ここへ持ってくるか
#include "scene_b.h"//←順番的には前
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
{
// turnはこっちでも使う
//:
}
ごちゃごちゃしてきたら宣言だけ纏めた別ファイルに送るのがセオリーだと
思ったのですが、順序みたいなものがあるんでしょうか?
それとヘッダファイルの使い方を誤っているかもしれません。
関数書ききれないからヘッダに記入してますが。。。
0526デフォルトの名無しさん
2007/02/04(日) 17:27:24まず c_str() が const バージョンしかないことから考えて、
string は char* を通してアクセスされていることを想定していない。
現行の C++ の規格では内部の要素が vector のように
連続していることを示す根拠は無い。このことを保証する記述は
次回の規格更新で取り込まれるかもしれない。
0527デフォルトの名無しさん
2007/02/04(日) 17:33:18現在のコンパイラは大抵(マルチスレッド対応などから)そういう実装はしていないが、
複数のインスタンスが一つの領域を利用している可能性があるので書き換えては拙い可能性もある。
0528デフォルトの名無しさん
2007/02/04(日) 17:36:32そんな実装では const 付いてないメンバ関数呼び出した時点で
共有を解除するはずだから、 &s[0] ならあんまり関係ないと思うぞ。
共有が問題になるのは const_cast<char*>(s.c_str()) だろう。
0529デフォルトの名無しさん
2007/02/04(日) 17:36:380530501
2007/02/04(日) 19:18:25ありがとうございました。
VirtualAllocで(実際確保する量よりも少し多めにサイズを指定して)解決できました。
0531521
2007/02/04(日) 19:32:05ごめんよけわかんなくなった
とりあえず、構造体をあっちこっちで使うなら
ヘッダファイル作ってそこに宣言しといて
cなりcppなり構造体をつかうソースファイルにインクルードしたら?
あと関数書ききれないからヘッダに記入しているっていうのは
ヘッダに関数宣言して処理内容も書いてるの?ちがうか?
あと、typedefしたら?
あんま助言にもなってねーな。
ちょっとここの板の人たち
誰か助言してあげてよ。板開いたらみんなスルーしてるからびっくりした。
ま、そういうことで頼みます。
0533デフォルトの名無しさん
2007/02/04(日) 20:04:11http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3604.lzh
もっと違う方法があるんだけど、書きかえる箇所が多いと大変だろうからこのままで
0534デフォルトの名無しさん
2007/02/04(日) 20:46:20void func(char *str, ...)
{
□□処理□□;
}
↑こういった宣言をしている関数の、...はいったいどういう意味があるのでしょうか?
0535デフォルトの名無しさん
2007/02/04(日) 20:47:30printf()のような可変個数の引き数をとるということ。
0536521
2007/02/04(日) 20:50:45一応見さしてもらいました
とりあえず構造体はtypedefしたほうが使いやすいですよ。
あとは、ターンを何のために使うのか、グローバルで構造体変数を
持つ必要性等は、わかりませんからスルーでーす
0537デフォルトの名無しさん
2007/02/04(日) 20:58:37「可変長引数」でグッゲ
0539デフォルトの名無しさん
2007/02/04(日) 23:56:38listにもsort等がありますが、qsort()みたく比較関数を指定できる機能が欲しいです。
0540デフォルトの名無しさん
2007/02/05(月) 00:04:18例えばhoge.hというヘッダーファイルを作ったとします
その中身で二重インクルードガードとして
#ifdef HOGE_H_INCLUDED
#define HOGE_H_INCLUDED
#endif /*HOGE_H_INCLUDED*/
みたいに書くとおもいきや
VC++だと例えば<string.h>では
#ifndef _INC_STRING
#define _INC_STRING
#endif /* _INC_STRING */
でboostなんか見ると
#ifndef BOOST_UTILITY_HPP
#define BOOST_UTILITY_HPP
#endif // BOOST_UTILITY_HPP
となってます。
どれでも良いんでしょうか。
コンパイラによって(プリプロセッサ)変わってくるんでしょうか。
本によっても違うし、コンパイラによっても違うので不思議です
知識不足が原因だと思いますが、どなたか教えていただけないでしょうか。
お願いします。
0541デフォルトの名無しさん
2007/02/05(月) 00:05:06std::sort
0542デフォルトの名無しさん
2007/02/05(月) 00:05:380543デフォルトの名無しさん
2007/02/05(月) 00:06:37一意と思われるマクロ名ならなんでもいいんじゃないの
0544デフォルトの名無しさん
2007/02/05(月) 00:07:06名前が他と重複しなければなんだっていい。
ただアンダーバーから始まる名前は予約されてるから使っちゃダメ。
0545デフォルトの名無しさん
2007/02/05(月) 00:07:27そもそもqsort()の実装は決まっていません。
0546デフォルトの名無しさん
2007/02/05(月) 00:08:38それらの何がどう違うと思って質問していらっしゃいますか?
0547デフォルトの名無しさん
2007/02/05(月) 00:08:46インクルードガード自体がマクロとディレクティブの応用に過ぎないので
標準的な命名規則はない。ただ、先頭がアンダースコアで始める名前は処理系で
予約されている名前だから _INC_STRING みたいな命名は真似しちゃダメ。
0548デフォルトの名無しさん
2007/02/05(月) 00:13:36/*...*/
//....
は分かりやすいようにしてる単なるコメント
とエスパーレス
0549540
2007/02/05(月) 00:33:30アンダースコアで始める名前を手本にしてしまうところでした。
勉強になりました。
0550デフォルトの名無しさん
2007/02/05(月) 22:04:07Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
エラー E2293 c:\Borland\Bcc55\include\objidl.h 13848: ) が必要
エラー E2293 c:\Borland\Bcc55\include\objidl.h 13886: ) が必要
*** 2 errors in Compile ***
先ほどまでは include しても全く問題なかったのですが、突然だめにorz
どうかよろしくお願いします。
0551デフォルトの名無しさん
2007/02/05(月) 22:11:44もっと情報がないと難しいぞな。
ちょっとエスパってみると、Platform SDK でも適用したか?
0552550
2007/02/05(月) 22:41:22すみません、解決しました。原因は、includeの順序でした。
具体的には、windows.hを使用した関数があって、そのプロトタイプを宣言するヘッダファイルを
windows.hの前に読もうとしていたのがいけなかったようです。
0553デフォルトの名無しさん
2007/02/06(火) 17:16:18寂しすぎる
0554デフォルトの名無しさん
2007/02/06(火) 17:50:150555デフォルトの名無しさん
2007/02/06(火) 18:00:38_, ,_ ,_
ヤダァ(`Д´(` )<オジサンが君の布団でオナラしてあげよう
| ̄ ̄ ̄ ̄ ̄ ̄ ̄.|
| | ̄ ̄ ̄ ̄| |
| | @ @| |
| |@ @ | |
| |____| |
|__________|
(⌒ ⌒;:゙:ヽ.' /. ゚
从 `(´⌒;`:;ノ:人;;⌒`:" / 从 。
.(´;(´⌒(;・"⌒`);/`):';⌒`)`)。.' ゚
。((;;;) ).;:" ’:" _, , ,_
(`Д´(` ) ゚ /)
| ̄ ̄ ̄ ̄ ̄ ̄ ̄.|`):';⌒`)`)。.' ゚
| | ̄ ̄ ̄ ̄| |⌒`).(´;(´⌒(;・"⌒`);
| | @ ボフン!ゴワン!ブブデバビデボース!!
| |@ @ | |⌒`) :; 从 )
| |____| |(⌒)) \ ))
|__________| ヽ
0556デフォルトの名無しさん
2007/02/06(火) 23:35:52複数書きたいのですが、既に定義されていますとコンパイルエラーになってしまいます。
これを実現するにはどうしたらよいのでしょうか。
0557デフォルトの名無しさん
2007/02/06(火) 23:39:28メンバテンプレートにする。
0558デフォルトの名無しさん
2007/02/06(火) 23:43:47実現できない。
int a(100); と int a = 100; は、まったく同じ意味なのでしょうか?
効率が違うなんてことはありませんか?
a(100)の方が、何故か速そうに見えるのでこっちを使っているのですが無意味ですか?
どなたか教えてください。よろしくお願いします。
0560デフォルトの名無しさん
2007/02/06(火) 23:52:21無意味です。
0561デフォルトの名無しさん
2007/02/06(火) 23:58:41コンパイル速度は違うかもしれないな
どっちが速いかは知らんが
0563デフォルトの名無しさん
2007/02/07(水) 00:06:42おく必要がないように使う(effective c++ P21)意外で
そういう初期化の仕方ってしたこと無いな〜
0564デフォルトの名無しさん
2007/02/07(水) 04:01:20intじゃなくてユーザ定義のクラスなら変わるかもしれない
0565デフォルトの名無しさん
2007/02/07(水) 04:22:27分かってると思うけどexplicit
0566デフォルトの名無しさん
2007/02/07(水) 05:01:550567デフォルトの名無しさん
2007/02/07(水) 05:14:51beポイント:20
登録日:2007-01-16
紹介文
◆c4UQllRmv2
・身長160台
・中卒
・見た目はおっさん、頭脳は小学生並
・コミュニケーション能力不足
(不足というかまったく無し)
・もちろん無職
・引きこもり
・非常識
・根性なし
・常に下痢(この俺は間違いなく腸癌で死ぬ| ^o^ |)
・冷え性で足の色がおかしい
・パソコンばかりやってるせいで、
漢字がほとんど書けない
人生オワタ\(^o^)/
0568デフォルトの名無しさん
2007/02/07(水) 06:05:39ま、俺としてはどうでも良い項目として
身長160台:別に良いじゃん
中卒:家計の事情とかで高校いけない人とかもいるからさ
見た目:おっさんだろうがじいさんだろうがどうでも良い
自分の面が曲がっているのに鏡をせめてなんとなるって感じ
頭脳:小学生並みなら逆に吸収率よさそう
ま、あとの項目も自分で書き込んでるなら別にいいや
で、どこのスレで頻繁にカキコしてるの?見てみたい。
0569デフォルトの名無しさん
2007/02/07(水) 08:32:420570デフォルトの名無しさん
2007/02/07(水) 11:44:47[2] 問題文(含コード&リンク):以下の常微分方程式をホイン法で解くためのプログラムを作成しなさい。また
0<=t<=10におけるx(t)およびy(t)のグラフをエクセルで作成しなさい。
dx/dt=2x(t)-0.01x(t)y(t)
dy/dt=-y(t)+0.01x(t)y(t)
初期条件にx(0)=300,y(0)=150
[3] 環境
[3.1] OS: Windows
[3.2] コンパイラ名とバージョン: (gcc 3.4 VC 6.0等)
[3.3] 言語:c言語
[4] 期限:2007年2月9日まで
#include <stdio.h>
double func(double x, double y);
void heun(double x, double y, double a,double b, int n,double (*f)(double,double));
int main(void)
{ int n;
print("分割数を入力してください--->")
scanf("%d",&n);
heun(0.0,1.0,0.0,1.0,n ,func);
return 0;}
void heun(double x, double y, double a, double b, int n, double (*f)(double,double))
{ double k1,k2,h;
int i;
h = (b-x)/n;
for (i = 0 ; i<n ; i++)
{ k1=f(x,y); k2 = f(x+h,y+h*k1);
y = y+h/2.0 * (k1 +k2);
x = x+h;
print("x=%f \t y=%f \n" , x,y);}}
これをどう変えるのでしょうか?
0571解決済み
2007/02/07(水) 12:41:060572デフォルトの名無しさん
2007/02/07(水) 12:47:460573デフォルトの名無しさん
2007/02/07(水) 12:54:320574デフォルトの名無しさん
2007/02/07(水) 12:59:14そのマルチ違う。(一瞬で元ネタが分かった自分も嫌だが)
0575デフォルトの名無しさん
2007/02/07(水) 14:19:06やりたいことは、
class A {
public:
void func(){ /* A独自の処理 */ }
void getadr(){ printf("%x\n",&func); }
};
class B : public A {
public:
void func(){ /* B独自の処理 */ }
};
main()
{
A a;
B b;
a.getadr();
b.getadr();
}
こんな感じなのですが、これは func が static ではないためコンパイルエラーになります。
getadr内部を &A::func のようにすればエラーにはなりませんが、
それでは継承クラスから使用した場合に本来の目的を達成できません。
アドバイスお願いします。
0576デフォルトの名無しさん
2007/02/07(水) 14:24:120577デフォルトの名無しさん
2007/02/07(水) 15:02:17>それでは継承クラスから使用した場合に本来の目的を達成できません。
意味不明。
0578デフォルトの名無しさん
2007/02/07(水) 16:52:28> static ではないメンバ関数のアドレスを知りたいのですが、うまく行きません。
と書いたとおり、メンバ関数funcのアドレスを知りたいのです。
A a;
a.getadr();
だと a.func() のアドレスが表示されて、
B b;
b.getadr();
だと、b.func() のアドレスが表示させたいんです。
0579デフォルトの名無しさん
2007/02/07(水) 17:01:40の中身をTColorの変数へ移そうと思い、
StringToColorを使ったのですけどうまくいきません。
どのようにすれば移せるのでしょうか?
0580デフォルトの名無しさん
2007/02/07(水) 17:11:390581デフォルトの名無しさん
2007/02/07(水) 17:14:25こうかなぁ...
#include <cstdio>
using namespace std;
class A {
public:
void func(){ /* A独自の処理 */ }
};
class B : public A {
public:
void func(){ /* B独自の処理 */ }
};
template <typename T> void getadr(const T &) { printf("%x\n", &T::func); }
int main()
{
A a;
B b;
getadr(a);
getadr(b);
}
0582デフォルトの名無しさん
2007/02/07(水) 17:29:54&A::funcとして得られるものは「メンバへのポインタ」と言い、普通のポインタとは別扱い。
整数型は勿論void*への変換もできない。
メンバへのポインタ型にsizeofをして得られる大きさとsizeof (void*)が異なっていることもある。
なお仮想関数であればAのメンバへのポインタからオーバーライドされたBのメンバ関数を呼ぶことはできる。
#include <iostream>
class A {
public:
virtual void func() {std::cout << "A::func" << std::endl;}
};
class B : public A {
public:
void func() {std::cout << "B::func" << std::endl;}
};
int main()
{
void (A::*mp)() = &A::func;
A a;
B b;
(a.*mp)();
(b.*mp)();
}
0583デフォルトの名無しさん
2007/02/07(水) 22:47:550584デフォルトの名無しさん
2007/02/08(木) 00:26:36>558
ありがとうございます。
テンプレートはちょっと今の私には敷居が高いので、
関数名を変える方向で考えてみます。
0585デフォルトの名無しさん
2007/02/08(木) 14:16:06多次元配列の動的確保では
char (*s)[32] = new char[10][32];
このような書き方だということを知ってはいるのですが、()が何故必要なのかが感覚的に理解できません。
どのように解釈するべきなのでしょうか?
0586デフォルトの名無しさん
2007/02/08(木) 15:47:13char* s = new char[10][32];
0587586
2007/02/08(木) 15:58:050588デフォルトの名無しさん
2007/02/08(木) 16:29:32()が[]より優先順位が低いから。
new演算子ではchar[32]へのポインタと解釈されているから、
括弧なしでは大きさ32のchar型へのポインタ配列となってしまい、
コンパイルエラーが出る。
なお、コンパイラは更に[10]の部分もparseして、大きさが320以上の
アラインされた領域への先頭アドレスを返す(但しchar型なので多分
ぴったり320バイトだろう)ので、delete[] s でちゃんと削除できる。
0589デフォルトの名無しさん
2007/02/08(木) 16:37:580590デフォルトの名無しさん
2007/02/08(木) 22:50:100591デフォルトの名無しさん
2007/02/08(木) 22:55:49FindFirstFile でググれ。
0592デフォルトの名無しさん
2007/02/08(木) 23:15:44"準"標準ライブラリでもいいならboost::filesystem
0593デフォルトの名無しさん
2007/02/09(金) 00:12:060594デフォルトの名無しさん
2007/02/09(金) 00:14:260595デフォルトの名無しさん
2007/02/09(金) 01:16:29visual studio のデバッグ機能の最中
ポインタ変数が関数をさしてる場合、その関数名もを表示してくれるのですが、
これはそのポインタ変数に対するprintf系で(それ以外のWinAPIでもかまいませんが)文字列化できるものなんでしょうか?
可能でしたら教えていただきたいです
0596デフォルトの名無しさん
2007/02/09(金) 02:28:20その場合、Visual Studioがデバッグ可能な形式でコンパイルして
リンクしているからデバッガからはそういうことができる。
一般的には無理と考えてよい。
0597デフォルトの名無しさん
2007/02/09(金) 02:52:20やっぱり無理ですか 残念
VCのデバッグシンボル扱うWinAPIがあったと思ったので、やる気ならたぶんそれ使うんですね
0598デフォルトの名無しさん
2007/02/09(金) 03:18:50の「-=」とは、どういう意味ですか?
0599デフォルトの名無しさん
2007/02/09(金) 03:19:490600デフォルトの名無しさん
2007/02/09(金) 04:35:590601デフォルトの名無しさん
2007/02/09(金) 04:56:58ポインタ渡しより動作が軽いとか。
0602デフォルトの名無しさん
2007/02/09(金) 06:14:06参照ならNULLが渡されないことを前提にしたコードが書ける、なんてのはソフト面になるか?
ソフト面って、なんか給食みたいな響きだな。
0603デフォルトの名無しさん
2007/02/09(金) 06:40:290604デフォルトの名無しさん
2007/02/09(金) 10:00:44ぶっちゃけ静的確保でもいいんじゃないですか?
0605デフォルトの名無しさん
2007/02/09(金) 10:17:24サイズが決まらないとメモリの確保はできないわけだが、
サイズが動的に決まることもあり、そんなときは静的確保は無理。
0606デフォルトの名無しさん
2007/02/09(金) 10:53:340607デフォルトの名無しさん
2007/02/09(金) 11:05:32・1pxあたり3Bytes
・キャンバスのサイズは1x1から65536x65536まで可変。
32x32のアイコン作るときも12GBもメモリ使うとか泣けてくるだろう。
だから予め余分に、なんて甘い考えは捨てろWindows世代め。
0608デフォルトの名無しさん
2007/02/09(金) 11:10:170609デフォルトの名無しさん
2007/02/09(金) 11:13:500610デフォルトの名無しさん
2007/02/09(金) 11:14:130611デフォルトの名無しさん
2007/02/09(金) 11:24:46つまり可変でなおかつ大きい領域をとるかもしれないという
状況の場合以外にはnewの意味はないということですか?
0612デフォルトの名無しさん
2007/02/09(金) 11:27:470613デフォルトの名無しさん
2007/02/09(金) 11:28:560614デフォルトの名無しさん
2007/02/09(金) 11:31:450615デフォルトの名無しさん
2007/02/09(金) 11:32:290616デフォルトの名無しさん
2007/02/09(金) 11:34:36仕様が決まってないとき
0617デフォルトの名無しさん
2007/02/09(金) 12:25:410618デフォルトの名無しさん
2007/02/09(金) 12:41:400619デフォルトの名無しさん
2007/02/09(金) 13:10:440620デフォルトの名無しさん
2007/02/09(金) 13:36:16age C++言語はどこにエディタがあるんでしょうか あとプリコンパイルを
しないと実行できないと聞きましたが、それはどういう事でしょうか
0621デフォルトの名無しさん
2007/02/09(金) 13:44:370622デフォルトの名無しさん
2007/02/09(金) 13:48:330623デフォルトの名無しさん
2007/02/09(金) 13:55:170624デフォルトの名無しさん
2007/02/09(金) 15:42:50昔の本か何かを読んでの質問なら、頼むから最近の本を読んでくれ。
0625デフォルトの名無しさん
2007/02/09(金) 16:31:270626デフォルトの名無しさん
2007/02/09(金) 18:01:03585です。
遅くなりましたが、ありがとうございました。
すごい分かりやすかったです。
0627デフォルトの名無しさん
2007/02/09(金) 20:53:57キャッシュに収まらないサイズのバッファ内のビットをシーケンシャルだがとびとびに
操作する。このとき
byteで読んで操作、書き込み/wordで読んで操作、書き込み
どちらが速いですか?
1. どっちかが速い
2. かわらない
3. CPUによる。
とりあえずPowerPC G4なんですが、CPUによって違うならそれも知りたいです。
0628デフォルトの名無しさん
2007/02/09(金) 21:04:17提示された情報だけでは判断できない。
0629デフォルトの名無しさん
2007/02/09(金) 21:05:200630デフォルトの名無しさん
2007/02/09(金) 21:12:21/'''''' ''''''::\
|(●), 、(●)、.| >>629さん
| ,,ノ(、_, )ヽ、,, .:|
| `-=ニ=- ' .:::::|
\ `ニニ´ ._/
(`ー‐--‐‐―/ ).|´
| | ヽ|
ゝ ノ ヽ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
/\___/\
/'''''' ''''''::\
|(へ), 、(へ)、.| ふふ、ローカルメモリ♪
| ,,ノ(、_, )ヽ、,, .:|
| `-=ニ=- ' .:::::|
\ `ニニ´ ._/
(`ー‐--‐‐―/ ).|´
| | ヽ|
ゝ ノ ヽ ノ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0631627
2007/02/09(金) 21:18:28とりあえずエラトステネスの篩やってるだけなんです。
これで状況の要件満たしますか?
0632デフォルトの名無しさん
2007/02/09(金) 21:20:070633627
2007/02/09(金) 21:29:06失礼しました。
0634デフォルトの名無しさん
2007/02/09(金) 21:38:23アルゴリズムの速さと、CPUの速さは違うから難しいなあ
確かに
0635デフォルトの名無しさん
2007/02/09(金) 21:47:36誰か教えてくれ。
0636デフォルトの名無しさん
2007/02/09(金) 21:52:43HogeFuncTypePointer *fv = new HogeFuncTypePointer[256];
個人的には
std::vector<HogeFuncTypePointer>の方が好きだけどね
0637デフォルトの名無しさん
2007/02/09(金) 21:58:41無名のメモリに役割与えるんだから気にするなよ
0638デフォルトの名無しさん
2007/02/09(金) 22:00:49std::vectorの方がいいか。わかった。
0639デフォルトの名無しさん
2007/02/09(金) 22:10:38構造体を作って、main()内でそこに画像を読み込んで格納しておき、
それと同じ構造体をとある関数内で宣言すると、まったく使用して無いのに
main()内の構造体の中身も壊してしまう。。。
構造体にポインタを使ってるのが関係あるんだろうが、意味がわからん
0640デフォルトの名無しさん
2007/02/09(金) 22:11:380641デフォルトの名無しさん
2007/02/09(金) 22:21:49で?
0642デフォルトの名無しさん
2007/02/09(金) 22:51:520643デフォルトの名無しさん
2007/02/09(金) 23:12:27ん?
0644デフォルトの名無しさん
2007/02/09(金) 23:24:49独り言はチラシの裏に存分に書いてください
0645デフォルトの名無しさん
2007/02/09(金) 23:26:25MSDNでもビットマップファイルフォーマットは定義されてる
死ね
0646デフォルトの名無しさん
2007/02/09(金) 23:51:05std::string str;
char c = str[0]
0647デフォルトの名無しさん
2007/02/09(金) 23:53:490648デフォルトの名無しさん
2007/02/09(金) 23:59:03セミコロンがないな
0649デフォルトの名無しさん
2007/02/10(土) 00:00:260650デフォルトの名無しさん
2007/02/10(土) 00:08:40全く理解できてないから死んで良いよ^^
0651デフォルトの名無しさん
2007/02/10(土) 00:11:230652デフォルトの名無しさん
2007/02/10(土) 00:34:22strがemptyなのに[0]にアクセスして良いわけが無い。
0653デフォルトの名無しさん
2007/02/10(土) 00:38:26結果はundefined
0654デフォルトの名無しさん
2007/02/10(土) 00:41:55std::string str;
const char* ptr = str.c_str();
char c = *ptr;
0655デフォルトの名無しさん
2007/02/10(土) 00:45:390656デフォルトの名無しさん
2007/02/10(土) 00:51:39何に不安感じてるのか書け。
コンパイル通るかどうかだったら自分で確認しろ。
0657デフォルトの名無しさん
2007/02/10(土) 00:52:180658デフォルトの名無しさん
2007/02/10(土) 01:01:12その心配は無いが、c_str()の返すポインタを
変数に入れて持ち運ぶのは感心できない。
strに何かしらのアクセスがあったとき、
以前に取得したポインタの中身は保障されないはず。
0659デフォルトの名無しさん
2007/02/10(土) 01:11:56std::string str;
char c = str[0];
も ok な仕様にしてもよかったような気がするが。
0660デフォルトの名無しさん
2007/02/10(土) 01:27:21c_str()が返す文字列は\0で終わってる保障があるが
strのイテレータが\0で終わってる保障がない。
c_str()が返すのは文字列のポインタ。
[0]が返すのはイテレータの中身。
c_str()のポインタが[0]のアドレスと同じとは限らない。
0661デフォルトの名無しさん
2007/02/10(土) 01:50:38言葉の意味が微妙だなぁ。
c_str()が返す文字列は\0で終わってる保証があるが
strの内部バッファが\0で終わってる保証はない。
c_str()が返すのはヌル終端文字列の先頭を指すポインタ。
[0]が返すのは内部バッファの1文字目。
c_str()が[0]を指すポインタと同じとは限らない。
0662デフォルトの名無しさん
2007/02/10(土) 02:56:22class string {
public:
explicit string() : m_str(NULL) {}
...
char &operator[](int index) {
return m_str[index];
}
const char *c_str() const {
return (m_str == NULL ? "" : m_str);
}
...
private:
char *m_str;
};
0663デフォルトの名無しさん
2007/02/10(土) 04:49:23throw "error\n";
}
catch(char * str) {
cout << str;
}
よくある例外のサンプルなんだが、
strが指す文字列ってスコープから外れてるから、
無効なポインタにならん?
0664デフォルトの名無しさん
2007/02/10(土) 05:01:13その文字列(リテラル)はconst staticなのでプログラムと同じ程度だけ永らえます。
const char * foo() {return "Whee!";} が問題ないのと同じこと。
0665デフォルトの名無しさん
2007/02/10(土) 06:39:35error\nがあるからよ
0666デフォルトの名無しさん
2007/02/10(土) 08:09:19name=str['name'];
みたいな連想配列として使えませんか?
0667デフォルトの名無しさん
2007/02/10(土) 08:24:15Cではできません。
C++では、可能です。
0668デフォルトの名無しさん
2007/02/10(土) 08:25:210669デフォルトの名無しさん
2007/02/10(土) 09:33:380670デフォルトの名無しさん
2007/02/10(土) 10:27:040671のってぃー
2007/02/10(土) 10:57:59どうすればよいかわかりません。
文字に全角のものと半角のものが混じっている場合です。
08k: 4 → 084
00ヌルポ7 → 007
という風にしたいのですが。教えてくださいm(_ _)m
0672デフォルトの名無しさん
2007/02/10(土) 11:02:42構造体を使ってる。
連想配列みたくまとめて受け渡しできるうえに、構造体の配列も
できるから、連想配列よりもむしろ便利だと感じる。
0673デフォルトの名無しさん
2007/02/10(土) 11:36:30> 9 Classes
> A structure is a class defined with the class-key struct; its members and base classes are public by default.
0674デフォルトの名無しさん
2007/02/10(土) 11:45:06FILE *fp;
char buf[MAXBUF];
int ch;
fp = fopen("unko.txt", "r");
char atb[10]={'0','1','2','3','4','5','6','7','8','9'};
for(int i=0; feof( fp ) == 0 ; i++ )
{
ch=fgetc(fp);
for(int w=0;w<10;w++){
/*数字であるか判断する*/
if(atb[w]!=ch){
buf[i] = (char)ch;
break;
}
}
}
動作チェックしてないから後は適当にいじってください
0675デフォルトの名無しさん
2007/02/10(土) 11:46:13isleadbyte, isdigitと全角数字のテーブル使って頑張る。
0676デフォルトの名無しさん
2007/02/10(土) 11:46:38だったか
0677デフォルトの名無しさん
2007/02/10(土) 12:17:51>>674を参考にして作ってみたサンプル
#include <stdio.h>
#include <string.h>
int main( int argc, char *argv[] )
{
int i, j;
char buf[3] = { 0 };
char watb[10][3]={ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" };
FILE *fp;
if( ( argc < 2 ) || ( ( fp = fopen( argv[1], "r") ) == NULL ) )
return 1;
for(i=0; feof(fp) == 0; i++)
{
buf[1] = fgetc( fp );
if( buf[1] == 10 )
printf( "\n" );
else
for(j=0; j < 10; j++)
if( ( buf[1] == '0' + j ) || ( strcmp( buf, watb[j] ) == 0 ) )
printf( "%d", j );
buf[0] = buf[1];
}
return 0;
}
0678デフォルトの名無しさん
2007/02/10(土) 12:51:29for(i=0; feof(fp) == 0; i++)
は
while( feof(fp) == 0 )
で十分で
i は他に使ってなかったな・・・
0679デフォルトの名無しさん
2007/02/10(土) 12:55:13インクルードファイル 'sys/socket.h' をオープンできない
ってエラーが出ます。
どうしたら良いですか?
単純に、どっかからsocket.hを拾ってきて、sysに入れたんじゃ解決しないですよね?
0680デフォルトの名無しさん
2007/02/10(土) 13:09:34便利ですが間違えた検索単語を間違えたときの文字も残っています
一度まっさらにするにはどうしたら良いですか?
0681デフォルトの名無しさん
2007/02/10(土) 13:18:09スレ違い
0682デフォルトの名無しさん
2007/02/10(土) 13:56:04氏ね
0683デフォルトの名無しさん
2007/02/10(土) 18:19:340684デフォルトの名無しさん
2007/02/10(土) 18:34:43今は↓で乱数を発生させています
srand( (unsigned)time( NULL ) );//乱数生成
int aaa=rand() % 99999 + 1;
もう少し良い方法があれば教えてください
0685デフォルトの名無しさん
2007/02/10(土) 18:35:05参照→既にある変数を指す
ポインタ→動的に割り当てられたメモリや配列を指す
(メモリブロックである事を明示したい時のみ)
ただし実装の制約や効率上必要な時はまた別。
それ以外のCでポインタを使う場面のほとんどは、C++では
参照・イテレータ・スマートポインタのいずれかで代用できると思う。
どれに置き換えるかは迷う事はないだろう。
0686デフォルトの名無しさん
2007/02/10(土) 18:35:25NULLを扱う必要があったり、外部の関数とのI/Fで必要だったりしない限り、参照で。
#constじゃない参照を引き数にするのは嫌う人もいるので共同作業の場合は要注意。
0687デフォルトの名無しさん
2007/02/10(土) 18:38:00剰余を取ると若干偏りがでるが、それが問題にならないならその方法でいいんじゃない?
まさかとは思うが、srand()はrand()呼び出しごとに呼んでないだろうね。
#「もう少し良い」をどう解釈かで答えが変わりそうだが……
0688デフォルトの名無しさん
2007/02/10(土) 18:45:47はその乱数を取得する関数の先頭に配置してあるのですが
ソースファイルのはじめのほうで1回呼ぶだけのほうがいいですか?
0689デフォルトの名無しさん
2007/02/10(土) 18:53:500690デフォルトの名無しさん
2007/02/10(土) 19:09:09timeの返り血が変わらない間にもう一回呼ぶとrandで同じ血が返ることになるが。
0691デフォルトの名無しさん
2007/02/10(土) 19:21:26素朴な疑問だが、あんたは値を常に「ち」と読んでいるのか?
0692デフォルトの名無しさん
2007/02/10(土) 19:27:250693デフォルトの名無しさん
2007/02/10(土) 19:38:330694デフォルトの名無しさん
2007/02/10(土) 19:57:09もどりね
なぜか変換できない(ATOK2007)
0695デフォルトの名無しさん
2007/02/10(土) 19:59:110696デフォルトの名無しさん
2007/02/10(土) 20:01:53もどりね の検索結果のうち 日本語のページ 約 419,000 件中 1 - 10 件目 (0.33 秒)
もどりあたい の検索結果のうち 日本語のページ 約 1,000 件中 1 - 10 件目 (0.36 秒)
0697デフォルトの名無しさん
2007/02/10(土) 20:11:11かえりちで良いんじゃない。
なんか、エキサイティングでエレクトリックでスペクタルな
すぺるまーって来そうな読み方じゃない?
0698デフォルトの名無しさん
2007/02/10(土) 20:12:06いやなんでもない
0699デフォルトの名無しさん
2007/02/10(土) 20:26:36WinSock使う
0700デフォルトの名無しさん
2007/02/10(土) 21:00:02これは非constな用途の場合で、参照でもポインタでもかまわない設計のときは
ポインタを渡す用に設計する、ってのが慣習化してる人(環境)もいるってこと?
0701デフォルトの名無しさん
2007/02/10(土) 21:01:150702デフォルトの名無しさん
2007/02/10(土) 21:11:58クラスメンバで参照にすると、初期化の強制で
困ることもあるかもしれない。
0703デフォルトの名無しさん
2007/02/10(土) 21:41:18Cの流儀をそのまま持ち込んでいる人とか、APIと合わせている人とか、
そもそも非const参照は気持ち悪いと言い張る人とか、人それぞれですから。
0704デフォルトの名無しさん
2007/02/10(土) 21:51:04結局、居ることは居るけど、特に一般的な慣習があるわけではないってことですね
レスサンクス
0705デフォルトの名無しさん
2007/02/10(土) 22:55:55質問です。
struct hoge{
int a;
bool Test(){return true;}
};
↑このようなメンバー関数が存在するクラスや構造体(仮想関数とかは存在しない)を
hoge a,b;
b.a = 100;
と宣言して、↓みたいにmemcpyするのは大丈夫なんでしょうか。
(実験してみたけど、問題なかった)
memcpy((void*)&a, (void*)&b, sizeof(hoge));
http://forums.belution.com/ja/cpp/000/042/08s.shtml
同じ内容の質問と回答のログが、このサイトにあり、
メンバー関数があると駄目という意見がありましたが、
自分の実験では問題がなく、はっきりしないので
ここで質問させていただきます。
よろしくお願いします。
0706デフォルトの名無しさん
2007/02/10(土) 23:23:590707デフォルトの名無しさん
2007/02/10(土) 23:26:04規格上の話なら多分、ダメ。
メモリ上に実際どのようになイメージでそのクラスや構造体が展開されるのか
ちゃんと自分で理解できてる時以外はやるな。理解できてるんだったら逆に
仮想関数や動的に確保されるメンバなんかがあっても問題が起きないように
(memcpyで一発とは限らないけど)コピーすることはできる。
0708デフォルトの名無しさん
2007/02/10(土) 23:31:06(典型的には、ポインタとかリソースとかの所有権のお話)だから、
そこを押さえれば、同じ型同士ならmemcpyしても問題ないはず。
0709デフォルトの名無しさん
2007/02/10(土) 23:52:380710デフォルトの名無しさん
2007/02/11(日) 01:21:59回答ありがとうございます。
自分の開発環境では大丈夫だったけど、
やはり、開発環境によっては不具合が生じる
かもしれないので、memcpyは使わない方が無難みたいですね。
>>709
ちょっと、気になったので質問してみました。
普段は、それを使っています。
0711デフォルトの名無しさん
2007/02/11(日) 08:45:28別のプリプロセッサ命令でそのトークンを取り出して使用、見たいな事ってできませんか?
以下妄想。
//トークン プッシュ ポップなど
t_push() t_pop() t_empry()
//メンバ
#define write(BOO) push(n) int BOO; inline const int&get_##BOO(){return BOO;} inline void set_##BOO(int n){BOO=n;}
write(name)
write(weight)
write(height)
:
//コンストラクタ
ctor(){
//プリプロセッサで、メンバ name weight height に0を入れたい。
}
0712デフォルトの名無しさん
2007/02/11(日) 09:28:39push(n)ってなんだよ。t_push(BOO)って書きたかったんじゃないのか?
つまり、writeマクロが使われる度、writeに渡された引数をどこかに保存して、
あとから、その値を他のマクロから使いたい…ってことだよな?
残念だが、そりゃ無料だ。
0713デフォルトの名無しさん
2007/02/11(日) 09:29:550714デフォルトの名無しさん
2007/02/11(日) 10:09:11Boost.Preprocessor
0715デフォルトの名無しさん
2007/02/11(日) 14:57:43理想的な形としては子ウィンドウを親ウィンドウの外に表示してそこに画像を描写したいんですが。
0716デフォルトの名無しさん
2007/02/11(日) 15:11:12WindowsのMDIアプリケーションと仮定してWS_EX_TOOLWINDOW
それ以外だとVCLみたいに不可視な親ウィンドウ作ってその子としてMDIと画像書き出すウィンドウ作る方法も
0717デフォルトの名無しさん
2007/02/11(日) 15:40:32透過でやってみようと思います。ありがとうございました。
0718sage
2007/02/11(日) 16:58:01stdinから特定のcharを除いたストリングをを(char*)bufferに読み込みたいのですが、
...
char buffer[100];
scanf("%99[^() \n\t]", buffer);
...
というやりかたしか思いつきません。ですが、この方法だと読み込めるcharの数に上限がついてしまいます。このような上限を無しにbufferにstdinを読み込むには、どうすればいいでしょうか?
よろしくお願いします。
0719sage
2007/02/11(日) 17:14:19stdinから特定のcharを除いたストリングをを(char*)bufferに読み込みたいのですが、
...
char buffer[100];
scanf("%99[^() \n\t]", buffer);
...
というやりかたしか思いつきません。ですが、この方法だと読み込めるcharの数に上限がついてしまいます。このような上限を無しにbufferにstdinを読み込むには、どうすればいいでしょうか?
よろしくお願いします。
0720デフォルトの名無しさん
2007/02/11(日) 17:21:47バッファはreallocで用意してさ。
0721デフォルトの名無しさん
2007/02/11(日) 17:49:29>>720
早速レスありがとうございます。
int fgetc(FILE *stream)となってますが、intはcharにキャストしてもいいのでしょうか?
あと、reallocを使うのが少し怖いです。w
例えば、bufferをストリング、buflenをbufferの長さとした場合、
realloc(buffer, (buflen*2))
としても、メモリにスペースが足りたかどうかによって、bufferの値が変わってるかどうか分からないんですよね?
reallocを使ってのバファの用意の仕方についてもう少し詳しく説明して頂けるととてもありがたいです。
よろしくお願いします。
0722デフォルトの名無しさん
2007/02/11(日) 18:58:16char buffer, tmp;
buffer = (char *)malloc(buflen);
tmp = (char *)realloc(buffer, buflen *= 2);
if(tmp == NULL) free(buffer), abort();
buffer = tmp;
0723デフォルトの名無しさん
2007/02/11(日) 18:59:02O char *buffer, *tmp;
0724デフォルトの名無しさん
2007/02/11(日) 19:00:29全部reallocですませることは出来る
0725デフォルトの名無しさん
2007/02/11(日) 19:04:480726721
2007/02/11(日) 21:55:59大変助かりました。
0727デフォルトの名無しさん
2007/02/12(月) 00:25:24指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
このエラーはUNICODE型になってるのが原因でマルチバイト文字セットを使用するとコンパイルが通ることがわかったんですが
参考にした本が使用してる開発環境はVisual C++ 6.0を使用
自分の開発環境はVisual C++ 2005 Express Edition
これはUNICODEがまだ使用されていなかったときに6.0が作られてそのときのプログラムはUNICODEに未対応
現在はコンパイルを基本UNICODEで行っておりコンパイルエラーになると言う認識であってますか?
いまいち原因がよくわからなかったのでその部分教えてください
よろしくお願いします
0728デフォルトの名無しさん
2007/02/12(月) 00:32:13これがPythonスレだったら放置どころか100レス叩きにはいるから
小丸。
0729デフォルトの名無しさん
2007/02/12(月) 02:13:160730デフォルトの名無しさん
2007/02/12(月) 04:04:26これがコンパイルエラーになることが理解できれば、そのエラーも理解できるはず。
int * int_ptr ;
short * short_ptr = &int_ptr ;
LPWSTRはこんな感じ。
typedef LPWSTR wchar_t * ;
Windows NTは、文字はすべてUnicodeで処理している。
ANSI版のAPIは単なるラッパ。
0731デフォルトの名無しさん
2007/02/12(月) 09:07:040732デフォルトの名無しさん
2007/02/12(月) 10:53:200733デフォルトの名無しさん
2007/02/12(月) 11:43:28どうしたらいいでしょうか?
0734デフォルトの名無しさん
2007/02/12(月) 13:13:060735デフォルトの名無しさん
2007/02/12(月) 13:19:36Janeとかが&intを勝手に積分記号に変換してるだけだと思う
IEとかで見てみるといい
0736デフォルトの名無しさん
2007/02/12(月) 14:11:520737デフォルトの名無しさん
2007/02/12(月) 14:20:24styleはそんな事はないぞ
0738デフォルトの名無しさん
2007/02/12(月) 14:21:010739デフォルトの名無しさん
2007/02/12(月) 14:33:090740デフォルトの名無しさん
2007/02/12(月) 15:41:200741デフォルトの名無しさん
2007/02/12(月) 15:53:38http://pc10.2ch.net/test/read.cgi/win/1171009388/61
61 名前:名無し~3.EXE[sage] 投稿日:2007/02/12(月) 15:41:40 ID:CGqu/Enb
>>60
「&int」が「∫」になるのは誤解釈でもなんでもないぞ。
実態参照、数値文字参照は末尾の;を省略出来るのが元からの仕様だから。
問題は&int_ptrのような表記が部分的に実態参照として解釈されてしまうこと。
問題点は正確に書きましょう。
0742デフォルトの名無しさん
2007/02/12(月) 16:38:24std::cout<<"foober";
0743デフォルトの名無しさん
2007/02/12(月) 17:13:42仕様的には、いちいち書き込む側が&を&って書き込まにゃならんってことかよ。
0744デフォルトの名無しさん
2007/02/12(月) 17:30:390745デフォルトの名無しさん
2007/02/12(月) 18:51:01JaneDoe View αだべ
なるほどたしかにインテグラルだし、そういうことだったか
0746730
2007/02/12(月) 18:54:46Operaでみても、アンパサンドとintで表示される。
なんだか嫌な仕様だ。
0747デフォルトの名無しさん
2007/02/12(月) 18:58:34試してないけどそれくらいオプションで切れるんじゃね?
0748730
2007/02/12(月) 19:12:28short * short_ptr = int_ptr ;
だった。
とりあえず積分記号の問題は解決。
0749デフォルトの名無しさん
2007/02/12(月) 21:38:540750デフォルトの名無しさん
2007/02/12(月) 22:00:53てかその変換はむしろ鯖側スクリプトの仕事じゃね?
0751デフォルトの名無しさん
2007/02/12(月) 22:09:53そうすると、実体参照が使えなくなるだろ。
0752デフォルトの名無しさん
2007/02/12(月) 22:13:190753デフォルトの名無しさん
2007/02/12(月) 22:22:520754デフォルトの名無しさん
2007/02/12(月) 22:47:53まずは"June"に突っ込むところなんじゃないのか?
0755デフォルトの名無しさん
2007/02/12(月) 22:50:120756デフォルトの名無しさん
2007/02/12(月) 22:59:44そいつは無粋なことしてすまんかった
0757デフォルトの名無しさん
2007/02/13(火) 01:19:510758デフォルトの名無しさん
2007/02/13(火) 08:02:49ってガイドラインがどこかにあった気がしたがどこにあったか忘れた
まあ実体参照の表記が正しいかどうかのチェックくらいはした方がいいだろうな
0759デフォルトの名無しさん
2007/02/13(火) 08:06:430760デフォルトの名無しさん
2007/02/13(火) 08:09:57int <(hage);
int >(lt);
gt = <
まずhtmlが書けないと駄目らしいのか・・・ふむ。
0761女の子
2007/02/13(火) 08:33:46どうしたらいいですか?
0762デフォルトの名無しさん
2007/02/13(火) 08:52:37実体参照がかければhtmlは書けなくてもいいと思うのだが。
0763デフォルトの名無しさん
2007/02/13(火) 16:39:07JR東日本 社会人採用対策スレッド 2006 Part6 [転職]
0764デフォルトの名無しさん
2007/02/13(火) 17:42:35gzipファイルは検索から生成方法が分かりましたが、ZIPファイルの生成方法が分かりません。どうもzlibだけではZIPファイルは生成できないようです。
どうすればZIPファイルを生成できますか?
zlibは静的にリンクして、WinとLinuxで利用するつもりです。
0765デフォルトの名無しさん
2007/02/13(火) 17:47:55zlibのソースのcontribにminizipっつーのがあるから
それをパクれ
0766デフォルトの名無しさん
2007/02/13(火) 18:03:37急いで口で吸え
0767デフォルトの名無しさん
2007/02/13(火) 19:03:380768デフォルトの名無しさん
2007/02/13(火) 19:08:27C言語で scanf("%[^,]", buffer); と書くのと等価にするには
どのように書けばよいのでしょうか?
書式指定の方法がわからなくて困っています
0769デフォルトの名無しさん
2007/02/13(火) 19:57:470770デフォルトの名無しさん
2007/02/13(火) 20:29:45質問があります。
MMORPGなどで、ゲームサーバからデータを受信する際に
TCPを利用しているようなのですが、このデータをフックするには
どうしたらよいでしょうか。
抽象的な質問ですみません。
方向性や、詳しいWebサイト等を
教えていただけるとありがたいです。
ちなみに開発環境は.net 2003 VC/VC++,です
0771768
2007/02/13(火) 20:52:17ありがとうございました。
カンマ区切りのデータを一つずつ読みこみ、
すべて表示するにはこれより良い方法は無いでしょうか?
#include<iostream>
int main(void){
char buf[100];
std::cin.clear();
while(!std::cin.eof()){
std::cin.get(buf, sizeof(buf), ',');
if(std::cin.fail()){
std::cin.clear();
std::cin.get();
if(std::cin.fail())
break;
continue;
}
std::cout << buf << std::endl;
}
return 0;
}
0772デフォルトの名無しさん
2007/02/13(火) 21:08:20ありがとうございます。
minizip.cをコンパイルできました。
しかし、リンクでエラーが出てしまいました。_mainに_zipOpen2がないなど、シンボルが解決できないのエラーでした。
もう少し悩んでみます。
0773デフォルトの名無しさん
2007/02/13(火) 21:22:03↓これで十分じゃね?
#include <iostream>
int main(void) {
char buf[100];
while(std::cin.get(buf, sizeof(buf), ',')) {
std::cin.ignore();
std::cout << buf << std::endl;
}
return 0;
}
0774768
2007/02/13(火) 21:32:03ありがとうございます。
随分とコードがすっきりしました。
ところで、マニュアルを見る限り std::cin.get(buf, sizeof(buf), ',') の返り値は
std::cin の参照になるみたいですが、EOF に到達すると NULL (0) が返るのは
C++ の規格で決められているのでしょうか?
0775デフォルトの名無しさん
2007/02/13(火) 21:37:05while(std::cin.getline(buf, sizeof(buf), ',')) {
std::cout << buf << std::endl;
}
0776デフォルトの名無しさん
2007/02/13(火) 21:38:30オペレーターオーバーライドが定義されていてif文に突っ込める
0777デフォルトの名無しさん
2007/02/13(火) 21:42:47参照でヌルが返るってのはありえない。
while の条件式に置かれているので cin への参照に対して
メンバ関数 operator void* () が呼び出される。
operator void* () は fail() が真のときヌルを返すので、
条件としては偽になる。
0779デフォルトの名無しさん
2007/02/13(火) 21:43:55関数名の "line" がちょっとキモイけど、それが一番いいね。
0781デフォルトの名無しさん
2007/02/13(火) 21:50:26× オペレーターオーバーライド
○ オペレーターオーバーロード
あと operator void* () は「変換関数」ね。
オペレーター関数のオーバーロードとは
呼び方が違う。
0782デフォルトの名無しさん
2007/02/13(火) 21:59:400783デフォルトの名無しさん
2007/02/14(水) 00:38:00分かってるねんで?箱状のものがエスカレーター
それがごっちゃに・・・
0784デフォルトの名無しさん
2007/02/14(水) 00:42:180785デフォルトの名無しさん
2007/02/14(水) 00:43:350786デフォルトの名無しさん
2007/02/14(水) 01:24:40オペレータは、機能を上書きするからオーバーロード。
関数は、機能を追加するからオーバーライド。
箱は持ち上がるからエレベータ。
階段はずれ上がるからエスカレータ。
0787デフォルトの名無しさん
2007/02/14(水) 01:46:48説明が間違っている件について
0788デフォルトの名無しさん
2007/02/14(水) 01:47:41わかってるねん
わかってるねんで?
箱状のものが
エスカレーター
0789デフォルトの名無しさん
2007/02/14(水) 02:26:02hogehogepoo://ruffnex.oc.to/kenji/text/fire_a/
770が犯罪起こしたら俺も捕まるの?
俺は「770は俺の提供した情報で犯罪は起こすか分からない」という認識なんだが。
0790デフォルトの名無しさん
2007/02/14(水) 02:33:320791デフォルトの名無しさん
2007/02/14(水) 03:52:060792デフォルトの名無しさん
2007/02/14(水) 03:52:440793デフォルトの名無しさん
2007/02/14(水) 09:19:32class CHoge
{
//省略.
void* operator new(size_t t);
void* operator new[](size_t t);
}
とオーバーライドした場合、CHoge「を」生成するnewについてオーバーライドできると思いますが
CHoge「のメンバー関数で使っているnew」についてオーバーライドすることはできませんでしょうか?
0794デフォルトの名無しさん
2007/02/14(水) 09:47:44自前メモリアロケータ+placement newで代用するのがいいと思う。
SomeClass* ptr = myAlloc(sizeof(SomeClass));
new (ptr) SomeClass();
みたいな感じで。
0795デフォルトの名無しさん
2007/02/14(水) 10:14:32ある文字列があって、特定の文字列が出てきたら削除っていう
関数を教えてください。
std::string del_char(std::string&,std::string&);
参照とかあいまいなので、ちょっと、どっちがいいのかわからないですが。
std::string del_char("hoggehogge","gg"){
}
としたらhoggehoggeのggを削除して、
hoehoeを返すようにしたいです。
よろしくお願いします。
0796デフォルトの名無しさん
2007/02/14(水) 10:16:22お返事ありがとうございます。
やはりグローバルしかないですか…。
グローバルnewはオーバーライドしたくないですね。placementの利用を検討してみます。
0797デフォルトの名無しさん
2007/02/14(水) 11:45:17今のとこ5000行ぐらいなんですけどクラスヘッダファイルとクラスソースファイル
一つずつにしています何行ぐらいで分割するものですか?
0798デフォルトの名無しさん
2007/02/14(水) 12:28:200799デフォルトの名無しさん
2007/02/14(水) 12:40:120800デフォルトの名無しさん
2007/02/14(水) 12:49:450801デフォルトの名無しさん
2007/02/14(水) 12:56:09#include <winsock2.h>#include <ws2tcpip.h>しています。
inet_ntoa,getaddrinfoなど、他の関数は使えています。
思い当たる節があれば教えてください。
>>797
行数で分割しない!
独立(オブジェクト指向)と機能集中(アジャイル指向)だ
ってアジャコングがゆってた
0802デフォルトの名無しさん
2007/02/14(水) 14:30:58ケースバイケース
0803デフォルトの名無しさん
2007/02/14(水) 14:44:30WinSock(2) には inet_aton は無い
0804デフォルトの名無しさん
2007/02/14(水) 14:57:40inet_pton()やinet_ntop()が無かったり
なかなか意味不明だな
0805デフォルトの名無しさん
2007/02/14(水) 15:24:50参考にしていたサイトが消えてしまったのですが、どこかにログが残っているか知りませんか?
robots.txtのためGoogleやweb.archive.orgにはありませんでした…
0806デフォルトの名無しさん
2007/02/14(水) 15:40:44まさか一方はあるのに、逆にあたる関数がないとは……。
無いのがわかってすっきりしました。ありがとうございます。
>>800
一々配列全部をコピーするよりポインタ1コ使ったほうが軽くて早いよ、と
俺も2年前意味不明なポインタの使い方をしてた気がするなあ
0807デフォルトの名無しさん
2007/02/14(水) 15:41:57newをオーバーライドして遊んでいたところ、テンプレートと重なるとおかしなことになるのに気づきました。
デストラクタが存在するクラスの配列を new[] すると、本来より4バイト多くなるのはわかります。
operator new 側でreturnしたものに+4バイト移動したポインタが実際に返るのもわかります。
この状態ならば、
CHoge* p;
p = new CHoge [5];
delete [] p;
上のp==0xXXXXXX16;とした場合、operator delete[](void *p)のpには0xXXXXXX12が代入されるのが期待できますし、普段はそうなります。
ただ、以下のようにした場合におかしくなるのです。
template <class T>
class CTest
{
public:
T* m_p;
void run()
{
m_p = new T [5];
delete [] m_p;
}
};
こうした場合にoperator delete[](void *p)のpには0xXXXXXX16が代入されてしまいます。
(TがCHogeの場合に。です)
当然new[]でmalloc. delete[]でfreeしている場合、freeでエラーが出てしまいます。
VC6.0のデバッグモードで見ても、きちんとTはCHogeになっています。
これの解決方法はありますでしょうか?
0808デフォルトの名無しさん
2007/02/14(水) 15:42:27inet_addr()で我慢汁。
255.255.255.255とエラーが区別できないという問題があるけどな。
0809デフォルトの名無しさん
2007/02/14(水) 15:57:34すいません。807はコンパイラのせいかもしれません。
Win32アプリケーションで同様のものを作ったところ、正しい動作をしました。
質問はスルーでお願いします。
0810デフォルトの名無しさん
2007/02/14(水) 19:32:06fopenしたものをロック(排他処理)しようと思っています。
_locking関数を使えばよいというのは分かりましたが、ファイルディスクリプタを渡さなければならない、しかもロックするサイズも指定しなければならないそうなので、
_locking(hogefile->fd, 方式, 64);
これで良いのですか?Linux + gccの
ftrylockfile(hogefile);
と同等になる処理を行いたいです。
0811デフォルトの名無しさん
2007/02/14(水) 19:38:04ってなんだ。
_fileno(hogefile)
だろ。
0812デフォルトの名無しさん
2007/02/14(水) 21:49:49主に音響処理などに使うDSPが積和演算に特化したチップだと言う事は分かったのですが、
同様のリアルタイム処理はパソコンでもできるでしょうか?
やりたいことは入力音を16bit分解能、44kHzくらいでフーリエ展開して加減乗除を4ステップほど実行して、
逆フーリエして出力って感じなんですが・・・メディアプレイヤーにもエフェクトいくつかあるしこうした処理は
PC上のプログラムでも余裕でできるものでしょうか?
0813デフォルトの名無しさん
2007/02/14(水) 21:50:460814デフォルトの名無しさん
2007/02/14(水) 22:00:55EUC-JPからShift-JISに変換するライブラリを探しているんですが、
IBMのICUはフリーなんでしょうか?
他にライブラリをご存知の方いられましたら教えてやって下さい。
0815814
2007/02/14(水) 22:06:08検索してたらICUはフリーの文字コード処理ライブラリとしては
文句なしに最高峰のものだそうです。
ラクガキ失礼いたしました。
0816デフォルトの名無しさん
2007/02/14(水) 23:15:42フーリエ展開をリアルタイムでやるのって、そもそも矛盾してないですか?
0817デフォルトの名無しさん
2007/02/14(水) 23:24:580818デフォルトの名無しさん
2007/02/15(木) 01:13:40画像でリアルタイム(30fps)でフーリエ変換処理を行なえるだけの能力が今のCPUにはある。
#XeonとかCore2とかね。
音でもそのくらいの処理ならリアルタイムでできるだろ。
0819デフォルトの名無しさん
2007/02/15(木) 01:22:54typename Foo::template Bar<Baz>
みたいな書き方ってどういう意味ですか?
どんな時に使えるのですか?
0820デフォルトの名無しさん
2007/02/15(木) 01:47:18テンプレート内で、テンプレート引数に依存するクラス Foo があるとき、
Foo 内のネスとされたクラステンプレート Bar を Baz を引数として実体化した
クラス型。
Foo がテンプレート引数に依存する場合、 typename や template を挟まないと
そのメンバの意味が確定しないので、こういう書き方が必要になる。
0821デフォルトの名無しさん
2007/02/15(木) 10:38:33最近のPCってDAコンバータしか音響用のチップ載ってないはず。
0822デフォルトの名無しさん
2007/02/15(木) 11:00:270823デフォルトの名無しさん
2007/02/15(木) 11:16:390824デフォルトの名無しさん
2007/02/15(木) 11:33:140825デフォルトの名無しさん
2007/02/15(木) 11:34:181スレッドにつき50%も消費してしまうのでなんとかしたいのです
0826デフォルトの名無しさん
2007/02/15(木) 11:39:330827デフォルトの名無しさん
2007/02/15(木) 11:48:31随所にスリープを入れる。CPU使用率が上がりそうなロジックはクリティカルセクションとして複数同時に行なわないようにする。
0828デフォルトの名無しさん
2007/02/15(木) 11:55:54ありがとうございます
下がりました
0829デフォルトの名無しさん
2007/02/15(木) 12:03:06Sleep(1)でもいいからとにかくSleep入れて、
Application.ProcessMessage()、C#ならApplication.DoEvents()を
入れれば、たいていCPU使用率がぐっと下がるべ。
0830デフォルトの名無しさん
2007/02/15(木) 12:04:370831デフォルトの名無しさん
2007/02/15(木) 12:06:060832デフォルトの名無しさん
2007/02/15(木) 12:07:49メンバ変数としてのconstの初期化はできるのですか?
グローバル変数じゃないと無理ですか?
0833832
2007/02/15(木) 12:13:22/////////////////////
const MAX=50;//関数内で初期化
スコープを抜けると初期化はされていませんでしたが仕様ですか?
0834デフォルトの名無しさん
2007/02/15(木) 12:17:14宣言に初期化子をつけることでコンパイル時定数として使えるようになる。
0835832
2007/02/15(木) 12:19:240836デフォルトの名無しさん
2007/02/15(木) 12:21:520837デフォルトの名無しさん
2007/02/15(木) 12:22:57そう。実は初期化しているわけじゃない。あくまで特別扱いだが >>834
0838832
2007/02/15(木) 12:26:51でいけました
staticをなぜつけなければならないのか疑問ですが
0839デフォルトの名無しさん
2007/02/15(木) 12:28:19staticをつけないと、定数ではなくなるから。
0840832
2007/02/15(木) 12:31:410841デフォルトの名無しさん
2007/02/15(木) 12:51:440842デフォルトの名無しさん
2007/02/15(木) 12:54:57constだけだと「値の変更できない変数」でしかないのですよ。
#コンパイラが最適化で消す可能性はなくもないけど。
0843770
2007/02/15(木) 14:09:47ありがとうございます。
MMORPGでのキャラクターの位置データを取得したかったのです。
#本人は犯罪にならないと考えているのですが、なるのでしょうか?
0844デフォルトの名無しさん
2007/02/15(木) 14:43:23全く問題ないと思うのなら、そのゲームのコミュニティで公言してみたら?
#実際問題、大抵のMMOでは契約条項違反になると思うが。
++iにするとマズイことでもあるのですか?
それともintの場合は、i++も++iも効率は変わらないのでしょうか?
0846デフォルトの名無しさん
2007/02/15(木) 16:04:28C++では++iにすることが多い。
0847デフォルトの名無しさん
2007/02/15(木) 16:07:46ぱっとみで間違える事があるから for のときは i++ てしてる。
0848デフォルトの名無しさん
2007/02/15(木) 16:22:500849デフォルトの名無しさん
2007/02/15(木) 16:26:520850デフォルトの名無しさん
2007/02/15(木) 17:14:46だからそうしてるんだよ
0851デフォルトの名無しさん
2007/02/15(木) 17:27:420852デフォルトの名無しさん
2007/02/15(木) 17:28:380853デフォルトの名無しさん
2007/02/15(木) 18:13:36どんな読み間違いなのかちょっと気になるなあ。教えて欲しいなあ。
0854デフォルトの名無しさん
2007/02/15(木) 18:20:20一人で組むなら自己流でいいと思いますが
0855デフォルトの名無しさん
2007/02/15(木) 18:37:500856デフォルトの名無しさん
2007/02/15(木) 18:45:09if(((foo|(ber>>8))*piyopiyo=hogehoge((foo%9)/asdf))==!qoo)
こんな風に書く人はボウヤなんですか? だとしたら若いですね
0857デフォルトの名無しさん
2007/02/15(木) 18:46:450858デフォルトの名無しさん
2007/02/15(木) 18:48:35この時点でなんとかしたいと思う(よくあるケースだから10中9まで放置だけどな
0859デフォルトの名無しさん
2007/02/15(木) 19:36:12ありがとうございました、さっそく信号処理の勉強からはじめてみます
0860デフォルトの名無しさん
2007/02/15(木) 19:52:53七行スレではよくあること
0861デフォルトの名無しさん
2007/02/15(木) 20:02:30float x=0;
*((unsigned int*)&x) = 0x80000000;
とかやって-0.0をしています。こうしないとコンパイラが勝手に切り詰めてしまうんです。
もっとスマートな方法はないでしょうか。
0862デフォルトの名無しさん
2007/02/15(木) 20:07:060863デフォルトの名無しさん
2007/02/15(木) 20:10:50エンディアンとか浮動小数点フォーマットとかで環境依存バリバリだろうけど
0864デフォルトの名無しさん
2007/02/15(木) 20:13:21ありがとうございます。
0865デフォルトの名無しさん
2007/02/15(木) 23:16:54今開発中のプログラムのソースコードが2000行くらいに達してるんですが、調べながら
書いていったためソースがぐちゃぐちゃで何とか仕様を満たす程度なんですけど、
これから機能を増やしていくにあたりソースを綺麗に書き直した方が能率はあがるでしょうか?
0866デフォルトの名無しさん
2007/02/15(木) 23:18:47・ソースファイルの分割
・C++が使用可能ならクラス化
0867デフォルトの名無しさん
2007/02/15(木) 23:19:280868デフォルトの名無しさん
2007/02/15(木) 23:25:08ソース別けれたんですね。気付きませんでした。
>>867
ぐちゃぐちゃってことですか。やはり綺麗なほうが得なんですね
ありがとうございました。おかげでやる気が出ました!
0869デフォルトの名無しさん
2007/02/15(木) 23:32:010870デフォルトの名無しさん
2007/02/15(木) 23:46:250871デフォルトの名無しさん
2007/02/15(木) 23:51:45mainの他にプロシージャとスレッドがあります。
ヘッダーファイルって定義と宣言とか書く奴ですよね
0872デフォルトの名無しさん
2007/02/16(金) 00:03:200873デフォルトの名無しさん
2007/02/16(金) 00:07:500874デフォルトの名無しさん
2007/02/16(金) 00:17:56その説明は面倒だ
なんか、Cに関数の宣言が必要な理由をどこかで読んだのを思い出した
理由は忘れたが、関数宣言しないよりもする記述のが楽なんだなと思ったのは覚えてる
0875デフォルトの名無しさん
2007/02/16(金) 00:21:05そんな分け方しない。宣言だろうが何だろうが、他のソースと
共有する必要のあるものだけをヘッダに入れる。必要なら定義も入れる。
0876デフォルトの名無しさん
2007/02/16(金) 00:27:07他クラスないし関数を見たいときはヘッダはなるべくインクルードせず宣言だけを行う事
0877デフォルトの名無しさん
2007/02/16(金) 02:12:03INT I=ATOI(STR);
をできるようにして
0878デフォルトの名無しさん
2007/02/16(金) 02:53:480879デフォルトの名無しさん
2007/02/16(金) 02:59:02cl /? でいいことがあるかも。
0880877
2007/02/16(金) 03:07:460881デフォルトの名無しさん
2007/02/16(金) 03:11:04エスパー募集か?
「できる」の意味がわからん。
0882デフォルトの名無しさん
2007/02/16(金) 03:11:300883デフォルトの名無しさん
2007/02/16(金) 03:15:300884デフォルトの名無しさん
2007/02/16(金) 03:21:52同意
俺程度のエスパーでは何を言いたいのかさっぱり分からん
0885デフォルトの名無しさん
2007/02/16(金) 03:33:11例えば、こういうこと?
ttp://codezine.jp/a/article.aspx?aid=374
0886865
2007/02/16(金) 03:37:10短くなったら読むのもとても楽で最高です。
ヘッダーファイルの使い方も勉強になりました。thx
0887デフォルトの名無しさん
2007/02/16(金) 09:13:37std::stringでchar*返すメンバ関数探せ
0888デフォルトの名無しさん
2007/02/16(金) 10:11:59便乗質問
a.h で定義されているクラスや定数をヘッダ内で参照する b.h があるとき
b.h 内で a.h をインクルードする? しない?
0889デフォルトの名無しさん
2007/02/16(金) 10:20:170890デフォルトの名無しさん
2007/02/16(金) 10:27:56b.h を利用するソース側で b.h のみか
a.h b.h の順でインクルードしてねと約束させるか
だけど、限りなく強い「したほうが良い」の意?
分法 or コンパイラ的にNGな部分あるっけ?
0891デフォルトの名無しさん
2007/02/16(金) 10:34:240892デフォルトの名無しさん
2007/02/16(金) 10:43:31a.h | class A {};
b.h | class B : public A {};
とか
a.h | #define NUM_HOGE (10)
b.h | struct foo { int bar[NUM_HOGE]; };
のように
0893デフォルトの名無しさん
2007/02/16(金) 11:01:33> a.h b.h の順でインクルードしてねと約束させる
これはめちゃくちゃ混乱すると思う。
個人作業で、ヘッダファイルの数が一桁とかのうちは平気かもしれないけど・・・。
この件に限らず、「一箇所でやっておけば他の箇所では考えずに済む」ことをやらず、
「n箇所のどこか一つでも間違ったらアウト」な状況にする選択肢は選ぶべきではないよ。
0894デフォルトの名無しさん
2007/02/16(金) 14:16:000895デフォルトの名無しさん
2007/02/16(金) 14:28:45std::string::find(), std::string::substr() を使う。
または stringstream に突っ込んで >>775
0896デフォルトの名無しさん
2007/02/16(金) 14:44:550897デフォルトの名無しさん
2007/02/16(金) 14:58:200898デフォルトの名無しさん
2007/02/16(金) 14:59:59string& simple_replace(string& s, const string& from,
const string& to)
{
string::size_type n, nb = 0;
while ((n = s.find(from, nb)) != string::npos) {
s.replace(n, from.size(), to);
nb = n + to.size();
}
return s;
}
vector<string> split_csv(const string& s)
{
static boost::regex csvre("(\"(?:[^\"]|\"\")*\"|[^,]*),");
static boost::regex dqre("^\"(.*?)\"$");
vector<string> result;
string ss = s + ",";
string::const_iterator start = ss.begin(), end = ss.end();
boost::smatch what;
while (boost::regex_search(start, end, what, csvre)) {
string tok = string(what[1].first, what[1].second);
tok = boost::regex_replace(tok, dqre, "$1");
simple_replace(tok, "\"\"", "\"");
result.push_back(tok);
start = what[0].second;
}
return result;
}
0900デフォルトの名無しさん
2007/02/16(金) 15:33:14簡単な覚え方
行の右側の部首が 水平なので横方向
列の 〃 が 垂直なので縦方向
0901898
2007/02/16(金) 16:22:09vector<string> split_csv(const string& s)
{
vector<char> col;
vector<string> result;
int i = 0;
char c;
while (i < s.size()) {
c = s[i++];
if (c == '"') {
CONTINUE:
while (i < s.size() && (c = s[i++]) && c != '"')
col.push_back(c);
if (i < s.size() && s[i] == '"') {
col.push_back(s[i++]);
goto CONTINUE;
}
} else if (c == ',') {
result.push_back(string(col.begin(), col.end()));
col.clear();
} else
col.push_back(c);
}
if (col.size() > 0)
result.push_back(string(col.begin(), col.end()));
return result;
}
0902デフォルトの名無しさん
2007/02/16(金) 18:43:29二次元座標のクラスを作っているのですが、
point.x(), point.y()でx,y座標を取得できると同時に
point[0], point[1]でもx, y座標を取得できるようにしたいのです。
そこで、メンバ変数の持ち方なのですが
class point{
...
private:
int x_, y_;
};
とするとx(), y()は簡単になりますが、
int operator[](size_t i){
if(i == 0) x_;
else if(i == 1) y_;
else // エラー処理
}
みたいになってしまいます。ポインタ + iの形を使えれば効率的になりそうですが、
x_, y_が連続した領域に配置される保証はない(?)と思うのでできません。
両方を効率良く実装するにはどのような方法を取ればよいでしょうか?
0903デフォルトの名無しさん
2007/02/16(金) 18:46:38private:
int a[2];
0904デフォルトの名無しさん
2007/02/16(金) 18:50:13そうしたら
int x(){ return a[0]; }
int y(){ return a[1]; }
となって、今度はこちらが非効率になりませんか?
最適化を期待できるということでしょうか?
0905デフォルトの名無しさん
2007/02/16(金) 18:53:34おおかた最適化で消える。最適化有効にしてアセンブリ吐かせてみれば確認できるだろう。
0906デフォルトの名無しさん
2007/02/16(金) 19:03:47分かりました。ありがとうございます。
0907デフォルトの名無しさん
2007/02/16(金) 19:08:55newで割当てられるメモリーには上限があるのでしょうか?
コンパイルオプションなどで上限を増やすことはできないのでしょうか?
0908デフォルトの名無しさん
2007/02/16(金) 19:21:53http://pc10.2ch.net/test/read.cgi/tech/1170343752/211-212
結局どちらでも効率は変わらないのでしょうか?
0910デフォルトの名無しさん
2007/02/16(金) 19:44:38なんの効率?
コーディングの効率ってことならお前の書きやすい方でやればいい
i++と++iでは、++iの方が実行速度が速いと思うのですが、これは勘違いですか…?
intだと変わらなかったりするのでしょうか?
0912デフォルトの名無しさん
2007/02/16(金) 20:03:22環境が書かれてないからなんとも。
コンパイラが吐いたコード確認すれば?
0913デフォルトの名無しさん
2007/02/16(金) 20:31:18asm勉強した方が良いよ
0914デフォルトの名無しさん
2007/02/16(金) 20:37:24環境によって違うことなんですね。馬鹿ですみませんでした。
asmとはアセンブラのことですか?
低級言語は私には難しいと思うので、当分学ぶつもりはありません。
>>914ありがとうございます
それを気にするとストレスで禿げてしまいそうなので、
禿げていてもおかしくない年になってから考えます。
ありがとうございました。
0916デフォルトの名無しさん
2007/02/16(金) 21:10:470917デフォルトの名無しさん
2007/02/17(土) 00:10:26トン
0918898
2007/02/17(土) 03:57:14>>901のコードだと、末尾が,だと最後が空のカラムと認識されないな。
後gotoとか使って色々と汚いので、↓のように手直ししといた。
vector<string> split_csv(const string& s)
{
string col;
vector<string> result;
for (int i = 0; i < s.size(); ) {
char c = s[i++];
if (c == '"') {
for (;;) {
while (i < s.size() && (c = s[i++]) != '"')
col.push_back(c);
if (i < s.size() && s[i] == '"')
col.push_back(s[i++]);
else
break;
}
} else if (c == ',') {
result.push_back(col);
col.clear();
} else
col.push_back(c);
}
result.push_back(col);
return result;
}
0919デフォルトの名無しさん
2007/02/17(土) 14:35:37static_cast<hoge>(static_cast<void*>(arg)) を使うべき的な内容をどこかで見た記憶があるのですが、
その意図が、書いてなかったのか忘れたのか、把握できてません
どういった意図でこんなまどろっこしいことを推奨してるんでしょうか
あとこういう関数を定義してでもreinterpret_castは避けるべきなんですか?
0920デフォルトの名無しさん
2007/02/17(土) 14:54:54ブロック崩しの自動処理をするプログラムを作りたいです。
(ボールの左右の移動に応じてマウスカーソルを移動させるだけの物)
意外に簡単にできるんじゃないかなぁ。と甘い考えなのですが2日3日で作れるでしょうか?
0921デフォルトの名無しさん
2007/02/17(土) 16:03:11授業でどこまで習ったのかわからないし
どれくらいやる気があるのかもわからんから答えようがない
とりあえず作ってみればわかるんじゃね?
0922デフォルトの名無しさん
2007/02/17(土) 16:35:221〜10まで指南して貰わないとダメかもしれないです…('A`)
やっぱり参考書か何かを買ってゆっくり覚えた方がいいですね…
0923デフォルトの名無しさん
2007/02/17(土) 16:58:06印刷して嫁。
電車の中で嫁。
寝る前にも嫁。
0924デフォルトの名無しさん
2007/02/17(土) 16:58:120925デフォルトの名無しさん
2007/02/17(土) 17:35:15想像だが、授業でやるのはコンソールアプリだけだろう。
君がやろうとしてるのは Windows アプリだろう。
たぶんウィンドウを作るだけで、数日から、人によっては数週間かかるよ
0926デフォルトの名無しさん
2007/02/17(土) 18:11:26そしてイベントドリブン(メッセージ)、再描画、デバイスコンテクスト
それぞれに数日なやむことになるんだよね。
0927デフォルトの名無しさん
2007/02/17(土) 18:14:21大学にもよるみたいよ
私立K大学はC#使ってウィンドウアプリ
私立O大学はCでコンソールアプリのみ
いきなりウィンドウアプリとか作らしても意味はないと思うけど・・・。
0928デフォルトの名無しさん
2007/02/17(土) 18:31:280929デフォルトの名無しさん
2007/02/17(土) 18:53:21とりあえず、形から入ろうとC++.netを買いました。
確かにウィンドウアプリという物は作ったことがありません…
とりあえず暇な春休みを有効利用ということで勉強し直して頑張ってみます!
ありがとうございました。
0930デフォルトの名無しさん
2007/02/17(土) 19:43:44一度覗いてみたことあるけど、授業中にメモ帳やら簡単なゲームやら作ってた。
ソフトウェア系をメインとする学部とかは別として、
結局は授業でやる言語次第なのかも。
0931デフォルトの名無しさん
2007/02/17(土) 19:53:11C++相談室 part53 の 841- にあった。過去ログは適当に検索すれば見つかる。
0932デフォルトの名無しさん
2007/02/17(土) 20:12:23よくわからんがいつもの
どうなるか未定義とか処理系がどうのこうのとか
保障されてるされてないっていう迷惑なあれか。
C/C++なんてキャストやポインタ使いまくる言語なのに
使いずれー言語だな。
0933デフォルトの名無しさん
2007/02/17(土) 20:17:52うぉぉ ありがとうございます
すっきりしゃっきりしました
細かいことは規格書調べられるようにならないとだめですね…('A`)
0934デフォルトの名無しさん
2007/02/18(日) 02:03:52文字列の出力結果が期待どうりになりません。
void* func(void *){
std::cout << "hello" << std::end ;
}
文字列の出力にprintfを使うと期待したとうりに
hello
hello
hello
と出力されるのですが、なぜstd::cout << "hello" << std::endl だとダメなんでしょうか。
0935デフォルトの名無しさん
2007/02/18(日) 02:06:280936934
2007/02/18(日) 02:16:50std::cout << "hello" << std::endl でやると
hellohellohelloになって改行が出ないです。
0937デフォルトの名無しさん
2007/02/18(日) 02:32:11std::cout << "hello" << std::endl は atomic に処理しようがないからだろうな。
ちなみに printf だと正しく出てるのは偶々そーなっているだけで
それは保証された動作じゃないぞ。( ひょっとしたらgcc独自の仕様として
atomic に出力されることが保証されているかも知れんがそこまでは知らん。 )
0938デフォルトの名無しさん
2007/02/18(日) 02:40:200939934
2007/02/18(日) 02:51:00で実行するとprintfの出力結果と同じようになりました。
一体何が違うんでしょうか。
0940デフォルトの名無しさん
2007/02/18(日) 03:07:190941デフォルトの名無しさん
2007/02/18(日) 03:16:43標準出力についての排他制御の動作が変わるんだろう。
0942デフォルトの名無しさん
2007/02/18(日) 04:01:540943デフォルトの名無しさん
2007/02/18(日) 04:44:59それを言うなら std::cout << "hello¥n"; std::cout.flush(); と
printf("hello¥n"); fflush(stdout); じゃないか?
0944デフォルトの名無しさん
2007/02/18(日) 07:57:36hheello
o
みたいに表示されないのか考えるべき・・・じゃない
0945デフォルトの名無しさん
2007/02/18(日) 08:41:04実際、環境によってはそうなる。どんな環境だったか覚えてないけど、
昔マルチスレッドでログ出力やってそんなログを作らせちゃった覚えがある。
0946デフォルトの名無しさん
2007/02/18(日) 09:06:21下のコードでメニュー画面からアナログ時計画面を
出した後、アナログ時計画面を閉じて再度メニュー画面から
アナログ時計画面を選択しても無反応です。
何回でも表示することができるようにしたいのですが
どなたかご教授いただけないでしょうか?
http://sa-wiki.com/upload/src/up0107.txt
0947デフォルトの名無しさん
2007/02/18(日) 09:13:17マルチ乙
0948デフォルトの名無しさん
2007/02/18(日) 09:41:40Cのstdioって行単位のバッファリングがされなかったっけ?
0949デフォルトの名無しさん
2007/02/18(日) 09:46:500950デフォルトの名無しさん
2007/02/18(日) 10:04:49標準出力に関しては行バッファリングであるような実装が多い。
つまり、\nをstdoutに送ると自動的にフラッシュされる。が、別にこれは
規格上保障された動作でも何でもない。
バッファリング方式はsetvbuf()で変更することが出来る。
>>945の例の場合、出力先がログ(=ファイル)なので、普通は
行バッファリングでない。つまり、出力がBUFSIZに達した時点で
内部的にフラッシュされている筈。BUFSIZは行区切りとは何の関係
もないから、一般には出力が崩れる可能性がある。
複数スレッドからstdio経由で同一ファイルに書き込んで
行単位で出力が崩れないようにするには、以下のようにすると良い。
1) 常に行単位で出力する。関数レベルでlibcが排他制御を
行うような実装であることが前提だが。
2) 行バッファリングモードを使う(_IOLBF)。
勿論、「自前で排他制御を行う」手もあるが。
0951デフォルトの名無しさん
2007/02/18(日) 10:18:260952デフォルトの名無しさん
2007/02/18(日) 10:24:47int main()
{
float i,j;
printf("atan2()\n");
i=1;
j=0;
printf("atan2(1,0)(→)は%d\n",atan2(i, j));
getch();
・・・ry
のようなプログラムを書いて出力したのですが、
atan2()
atan2(1,0)(→)は1610612736
atan2(0,1)(↑)は0
atan2(-1,0)(←)は1610612736
atan2(0,-1)(↓)は1610612736
返ってきた値は以上で、
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/vclib/html/_crt_atan.2c_.atan2.asp
にあるように、
>?π 〜 π ラジアンの範囲で返します。
返してくれないんですが、使い方が間違っているのでしょうか?
0953デフォルトの名無しさん
2007/02/18(日) 10:28:30関数レベルで排他制御を行っているような典型的な実装なら、
1) fputs()やfprintf()等を用いて、常に\nで終わる文字列をstdioに
与えるようにする。
2) _IOLBFモードを設定しておく
ことで、出力がcritical section内で完結し、行レベルでatomicになる。
「出力を崩したくない」というのは、通常はそういう意味のはず。
0954デフォルトの名無しさん
2007/02/18(日) 10:29:34× %d
○ %f
0955デフォルトの名無しさん
2007/02/18(日) 10:31:12orz
atan2()
atan2(1,0)(→)は1.570796
atan2(0,1)(↑)は0.000000
atan2(-1,0)(←)は-1.570796
atan2(0,-1)(↓)は3.141593
ちゃんと帰ってきました。
ありがとうございました↓↓
0956デフォルトの名無しさん
2007/02/18(日) 10:36:12◎%g
0957デフォルトの名無しさん
2007/02/18(日) 11:04:50俺がマルチスレッドでログ出すときは改行までを1回の関数コールでしているな。
2回の関数コールで文字を出したりすると間に別の文字が入るから。
場合によってはミューテックスつきの自作printf風ログ関数を必ず使うようにしている。
# 俺はstd::coutを使わないprintf派。
0958デフォルトの名無しさん
2007/02/18(日) 11:44:33スレッド数少ない時限定だけど。
0959934
2007/02/18(日) 12:32:42マルチスレッドでは単純な文字列の出力でも
同一のリソースにアクセスすることになって面倒なことになるようですね。
勉強になりました。ありがとうございます。
0960デフォルトの名無しさん
2007/02/18(日) 13:09:18下のプログラムは数値を入れ替えるプログラムsort.cである。以下の問いに答えよ。
1.プログラム内の�@〜�Eに適当な命令を入れてプログラムを完成せよ。ただし�@と�Aは複数の回答がある。可能な限り全て答えよ。
2.変数aがメモリの1000番地に格納されていた。int型が4バイトとすると、変数bは何番地に格納されるか答えよ。
3.関数間のデータ受け渡しにポインタを使うメリットとデメリットを説明せよ。
#include<stdio.h>
/*ポインタ渡しでデータの交換*/
void swap(int *x, int *y);
int main(void)
{
int a=1731, b=935;
int *p1, *p2;
/*ポインタに代入*/
p1=&a;
p2=&b;
printf("初期状態\t");
printf("a=%d b=%d\n",a,b);
swap(�@,�A);
printf("swap終了後\t");
printf("a=%d b=%d\n",a,b);
return(0);
}
void swap(int *x, int *y)
{
�B z;
z = �C;
*x = �D;
*y = �E;
}
0961デフォルトの名無しさん
2007/02/18(日) 13:11:360962デフォルトの名無しさん
2007/02/18(日) 16:34:41class CA{
public:
static int (*s_m_func1)();
};
int * CA::s_m_func1();
これだと『'CA::s_m_func1()'は'CA'のメンバーではない』って言われて、コンパイルできません。
お助けお願いしますー。
0963デフォルトの名無しさん
2007/02/18(日) 16:38:24何そのありえない構文
0964デフォルトの名無しさん
2007/02/18(日) 16:43:26int (*CA::s_m_func1)() = 0;
0965デフォルトの名無しさん
2007/02/18(日) 16:44:30クラス内でstatic int (*s_m_func1)();と宣言したら、
その定義は機械的にstaticを外して名前にクラス名::を付けるだけで作れる。
int (*CA::s_m_func1)();
0966デフォルトの名無しさん
2007/02/18(日) 16:48:55馬鹿でごめんなさいm(_ _)m
>>963-965
ありがとうございました!
おかげでできました。
0967デフォルトの名無しさん
2007/02/19(月) 10:45:27placement newのoperator delete(void *p, void* pMemory);で、
渡された*pの型を取得する方法はありませんでしょうか。
operator delete(void *p, void* pMemory)の中でデストラクタを呼んでやりたいのです。
通常のdeleteは、
delete pHoge;
で、Hogeを正しく解体できますし、デストラクタも呼んでいますよね。
これは正しい型情報(pHogeの型のものでしょう。void*にキャストしてから渡すとデストラクタは動きませんから)がdeleteに渡されているからだと思うのですが…。
0968デフォルトの名無しさん
2007/02/19(月) 12:14:510969デフォルトの名無しさん
2007/02/19(月) 12:25:47ありがとうございます。
なるほど。確かに通常のdeleteでは、その中に入る前にデストラクタが呼ばれていますね。
となると通常のdeleteはどんなトリックを使っているのでしょうか。
単純に「C++のコンパイラが、そこにデストラクタを呼ぶコードを自動で入れてるんだよ」ということでしょうか。
現在、こんなようなコードになっています。
template<class T>
class CHoge
{
/*省略*/
void test()
T* p;
p = new(pMemory) T;
operator delete(p, pMemory);
}
};
ここには二つの障害があるように思えます。
・Tのデストラクタをどうやって呼び出すか。
・そもそも、Tにデストラクタが無かったらエラーになってしまう。
この2点について、解決できる手法がありますでしょうか?
0970デフォルトの名無しさん
2007/02/19(月) 12:33:05p->~T();
こことか参照 http://www.fides.dti.ne.jp/~oka-t/cpplab-placement-new-2.html
0971デフォルトの名無しさん
2007/02/19(月) 12:38:14delete演算子の仕事 : デストラクタ呼び出し → operator deleteでメモリ開放
new/delete演算子と、operator new/deleteの意味の違いに気をつけよう、とMore Effective C++で読んだ。
0972デフォルトの名無しさん
2007/02/19(月) 13:37:47ありがとうございます。
intなどにもデストラクタが存在するというのは盲点でした。
思い込みにとらわれて、p->~T()がコンパイル通るか試していなかったのが恥ずかしいです。
>>971
なるほど。
その上で、placement new/delete にはnew/delete演算子形式の書式がないので自前でデストラクタを呼ぶ必要があるというわけですね。
ありがとうございます。
思ったとおりの実装ができそうです。
これにて967の質問は解決とさせていただきます。
ありがとうございました。
0973デフォルトの名無しさん
2007/02/19(月) 17:55:49sizeof()で配列のサイズを得るようにするにはどうしたらいいのでしょうか…
ググり方が下手で見つけられませんでした…
出来ればどうググったらよいのかも
もう一つ、reallocの動作をさせるのには、
いったんnewで別に配列メモリを確保して、古い配列メモリをdeleteした上で、
今確保したアドレスを代入するのが最良なのですか?
int *pa = new int[5];
:
:
int *pat = new int[10];
for(i = 0; i <= 5; i++){
pat[i] = pa[i];
}
delete [] pa;
pa = pat;
のような…
このとき最後にdeleteすべきなのはpa? pat?
0974デフォルトの名無しさん
2007/02/19(月) 18:04:540975デフォルトの名無しさん
2007/02/19(月) 18:49:06class A
{
public:
Test();
};
class B
{
public:
Here();
};
と言うクラスがあるとします。
現在classBのHere()内にいてclassAのTest()関数を呼び出したいのですが、
どうするのが一番良いのでしょうか?
実際は他にもメンバがある状態でTest()のみを使用したいので継承はないかと思ってます。
となると、Here()内でclassAをインスタンス化して呼び出すか、classBに同じ関数を作るという方法を
思いついたのですがどうなのでしょうか?
よろしく御願いします。
0976デフォルトの名無しさん
2007/02/19(月) 18:54:51B::Hereにおいては、Aのインスタンスの変更以外の作用が欲しい、というところか?
A::Testのうち、インスタンスに依存しない部分を切り出すのはどうだろうか。
0977975
2007/02/19(月) 19:02:09A::Test()はclassAのメンバを弄るのではなく、引数で複数の変数ポインタを渡し
それらを計算してアドレスを返すという関数なんです。
classAのメンバ関数内でで数回呼び出すのでclassAのメンバ関数とした訳ですが、
構造的に悪かったですか?
0978デフォルトの名無しさん
2007/02/19(月) 19:06:320979973
2007/02/19(月) 19:08:05stringとかvector使うと
INIファイルを弄るあたりが面倒になるので、あまり使いたくないのですが…
たとえばGetPrivateProfileStringやGetWindowTextなどでバッファは配列アドレスを渡す必要があるので…
0981デフォルトの名無しさん
2007/02/19(月) 19:17:10vectorでできないわけないだろ・・・
0982デフォルトの名無しさん
2007/02/19(月) 19:23:570983デフォルトの名無しさん
2007/02/19(月) 19:26:520984デフォルトの名無しさん
2007/02/19(月) 20:01:04std::vectorの要素はメモリ上で連続していることが保障されていて、
真にmalloc/realloc/freeなどと同じように動的メモリとして使える。
983の言うとおり先頭要素へのポインタという形で取り出せばよい。
ただしイテレータはポインタで実装されているとは限らないので、
begin()は狩にお前使っている処理系で使えたとしても使うべきでない。
0985デフォルトの名無しさん
2007/02/19(月) 20:23:13std::fgets(v, v.size(), stdin);
std::vector<char>::iterator pos = std::find(v.begin(), v.end(), '\0');
std::string line(v.begin(), pos);
とかキモいな。
どうせC関数とインタフェースするところなんて、多かれ少なかれ汚いんだから、
適材適所で使い分ければいいんでねーの?
char v[0x1000];
std::fgets(v, sizeof v, stdin);
std::string(v);
のが記述が簡単で効率もいいだろ。
0986985
2007/02/19(月) 20:24:42- std::fgets(v, v.size(), stdin);
+ std::fgets(&v[0], v.size(), std::stdin);
0987デフォルトの名無しさん
2007/02/19(月) 20:37:03vector<char>をNUL埋めする意味もわからん。
0988デフォルトの名無しさん
2007/02/19(月) 20:39:58>>987
どうせ省略しても'\0'で初期化されることに変わらない気がする
0989973
2007/02/19(月) 20:40:13vectorなんて使い必要ないじゃんとか考えていて……
バカなことばっかですいません。
0990デフォルトの名無しさん
2007/02/19(月) 20:41:310991デフォルトの名無しさん
2007/02/19(月) 20:52:10>>989
http://www.s34.co.jp/cpptechdoc/article/vectorastemp/index.html
> テンポラリ・バッファとしての std::vector の利用
0992デフォルトの名無しさん
2007/02/19(月) 20:57:35それだったらOSのAPIを呼べよと俺は思ってしまう。
0993985
2007/02/19(月) 21:02:05前者はその通りだな。
後者は、予め領域は確保しなきゃならんでしょ?その副作用。
malloc()のように「確保だけする」手段ってstd::vectorにはないよね?
指定しなくとも、必ず何かデフォルト値で埋められる。
つまり効率が少なくともcalloc()並に落ちるということ。
auto配列とは比較にならないね。
>>988
単にC関数とインタフェースする例だよ。
別にfgets()である必要は全く無い。
0994デフォルトの名無しさん
2007/02/19(月) 21:06:160996デフォルトの名無しさん
2007/02/19(月) 21:08:460997デフォルトの名無しさん
2007/02/19(月) 21:13:10size()で得られるインデックス以上の要素にアクセスしてはならない以上、
固定長のバッファが欲しいときに使う性質のものではない。
0998デフォルトの名無しさん
2007/02/19(月) 21:19:42alloca()使えばいい。
移植性にやや難があるけどな。
0999デフォルトの名無しさん
2007/02/19(月) 21:24:121000デフォルトの名無しさん
2007/02/19(月) 21:25:1710011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。