【初心者歓迎】C/C++室 Ver.13【環境依存OK】
1 :
デフォルトの名無しさん :
05/01/04 21:54:09
2 :
デフォルトの名無しさん :05/01/04 21:56:54
3 :
デフォルトの名無しさん :05/01/04 22:11:34
4 :
デフォルトの名無しさん :05/01/04 22:11:56
重視スレだと思うんだが? 【初心者歓迎】を入れ忘れた程度で立て直しか?
こっちが本スレでいいんかな だれか向うの方削除依頼出した?
いや向こうが本スレ
こっちが本刷れだよ。
9 :
デフォルトの名無しさん :05/01/05 05:35:01
>>5 > 【初心者歓迎】を入れ忘れた程度で
致命的
>>9 俺にはそう思えないが、そう言うならそうなんだろうな
>9 は潔癖性
14 :
デフォルトの名無しさん :05/01/05 20:24:42
EXEからDLLを呼び出していて、 あるタイミングでDLLからEXEへPostMessageしています。 その引数内で、構造体(DLLでnewしている)のポインタを渡していて、 EXEでdeleteしたいのだが、delete時に異常終了してしまいます。 そもそも上記のようなことってできるのでしょうか? 開発環境 VC++6 SP6 WinXPです。
できない。 どうしてもそういうことやりたいならAPIでメモリ確保してplacement newすればいけるかもしれんが。
16 :
デフォルトの名無しさん :05/01/05 20:35:48
>14 そのDLLは別スレッドで動くので、アドレス空間が違う。だからPostM~の代わりにPostThreadM~使う必要。でもポインタは使えない。構造体ならWM_COPYDATAかCreateFileMa~の共有メモリ使え。
17 :
デフォルトの名無しさん :05/01/05 21:39:55
for(j = 0; j < 4; j++) { tmp = tip[j].x; tip[j].x = -tip[j].y; tip[j].y = tmp; } C++でこんなコードを見つけたのですが3行目の -tip[j].y の意味がわかりません。 数学と同じマイナスの解釈でいいのでしょうか。
はお
単項マイナス演算子
20 :
デフォルトの名無しさん :05/01/05 21:49:20
>17 左様。後は自力で考えな
21 :
デフォルトの名無しさん :05/01/05 21:53:04
ありがとうございます。
>>19 をキーワードにしてぐぐったらわかりました。
22 :
デフォルトの名無しさん :05/01/05 22:14:14
>21 ヘルプも使え、ボケ
>15,16 どもでした。 えーと、仕様の練り直しです。。
>>23 その構造体がPODならHeapAllocとHeapFreeで
メモリ確保・解放するようにすれば平気だよ。
それがいいかどうかはともかく。
>>16 大嘘書くなよ。
EXEとDLLはDLLが内部的に別スレッドを生成したりしない限り基本的に同一スレッドで動くし、
そもそも別プロセスならともかくマルチスレッドなら全てアドレス空間は同じ。
26 :
デフォルトの名無しさん :05/01/06 02:21:16
配列の内用を、関数呼び出しの括弧の中に直接書いて渡したいんですけど、 わかるかたいたら教えてください。 void Test( int * ); ↑に対して Test( (int*)&{1,2,3,4} ); ↑のようなかたちで呼び出したいということです。 ちなみにこれではエラーになります。 外に出せば全て解決するのは十分承知の上ですが、 以前適当に書いたらできたような記憶があって、 いろいろやってみたんだけど、どうしても思い出せなくて気持ち悪いです。 環境はVC++で通ればいいんですが、 Cの一般的な文法として認められてるやり方があればいいなと。
>>26 >Cの一般的な文法として認められてるやり方があればいいなと。
VCのことは知らんが、Cにそんな構文は無い。
ゴメンすっかり忘れてた。 (int[]){1, 2, 3, 4} C99なら↑でいける。
ありがとうございます。 以前GCCで書いたときもそんな感じだった気がしますが、VC++6.0ではできないようです。 残念。
30 :
デフォルトの名無しさん :05/01/06 05:26:33
VC++6を使っています。 三辺の長さがわかっている直角三角形の 直角以外の角を出す関数って無いんですか? sin(87/654) = 0.123456の時、0.123456からsinに使う2辺の角度を知りたいのです。
asinでいいんだっけか、その場合。
32 :
デフォルトの名無しさん :05/01/06 06:13:38
33 :
デフォルトの名無しさん :05/01/06 15:08:02
Cのconio.hで提供するような機能のC++版ってなんでしょうか。
conio.hでいいだろ
まったくだ。
conio.h の最初の
#ifdef __cplusplus
extern "C" {
#endif
と、最後の
#ifdef __cplusplus
}
#endif
を入れた人の身にもなってやれ。
>>33
>>34-35 そうですね・・・おとなしくconio.hで逝きます。thx
37 :
デフォルトの名無しさん :05/01/06 20:30:04
このスレでいいのかわかりませんが、VC専用の質問スレが見つからなかったので質問させていただきます。 VC++6.0を使用しています。 コーディングしているとたまに、全く反応が無くフリーズしたような状態になります。 フリーズ時間は数十秒〜1分くらいで、発生頻度は一定していません。 全く出ないときもありますし、30秒に1回くらいのペースで発生するときもあります。 自動保存にしては頻度が高すぎます。 フリーズするのはVCだけで、他のソフトは普通に操作できます。 CPU負荷にも変化は無いので、CPU100%で重くなっているというわけではないようです。 OSはWinXP SP2ですがSP1の頃からずっと発生していました。
39 :
デフォルトの名無しさん :05/01/06 21:05:18
int i; char c; c = (char *)i; 上記のコードですが、 * が付いていると、どう言う事になるんでしょうか。
41 :
デフォルトの名無しさん :05/01/06 21:12:24
>39 実体をポインタ型にキャストするのはやらない方が良い。結果は実行環境による。知りたければnasmで難解なアセンブリ学べ
レスどうもです。 先輩教えてもらったのですが、何が何だか分からなくて...
43 :
デフォルトの名無しさん :05/01/06 21:26:35
>42 アドレス0xa0番地のメモリにアクセスするために(char*)0xa0と書く。でも最近のOSはメモリ保護のために例外を投げてしまう。char*p=(char*)NULL; *p=0x7f;などは確実に失敗する。
46 :
デフォルトの名無しさん :05/01/07 15:23:15
47 :
デフォルトの名無しさん :05/01/07 15:25:37
まったくもって、処理系依存だから、 何も答えられないが最適解ですね。
48 :
デフォルトの名無しさん :05/01/07 15:30:18
基礎クラスの中に virtual void Show() = 0; とあるんですが、=0;ってなんなんでしょうか? 仮想関数で返り値なしのshow()に=0;ってのがよくわからないんですが・・・ 派生クラスには virtual void Show() { myData->Show(); myNext->Show(); } というのがあります。 関数に代入とか出来ないですよね?
>49 即レスthx 解決しました
51 :
デフォルトの名無しさん :05/01/07 17:07:44
はじめまして。 質問なんですが、純粋仮想関数みたいな感じで、 派生クラスに引数を取るコンストラクタの実装を強要することってできますか? 今組んでるプログラムが、幾つかのフォーマットのファイルを扱う予定なんですが 各フォーマット共通の部分を基底クラスのパラメータとして持って、 各フォーマット固有の部分を派生クラスで扱いたいんです。 派生クラスのインターフェイスを統一するために、派生クラス全部に 同じ引数を取るコンストラクタを実装したいと思ってます。 解決策があったらお願いします。
仮想関数の利点はわかるんですが 純粋仮想関数の利点ってなんでしょうか?
>>52 派生クラスにオーバーライドを強要できる(しないとエラーになる)
基底クラスのインスタンスを作れなくなる(インターフェースクラスに使える)
54 :
デフォルトの名無しさん :05/01/07 22:41:19
>51 >派生クラスに引数を取るコンストラクタの実装を強要することってできますか? .基底クラスに引数ありのコンストラクタ以外用意しないではだめなのかな? 良心的な人なら、派生クラスのコンストラクタでもその引数を受け取るようにするでしょう。
コンパイラについていろいろ調べたのですが、なんだか良く分かりませんでした MicrosoftのC/C++のコンパイラって [Visual C++ 6.0] → [Visual C++ .net] → [Visual C++ .net 2003] って変わったんですか? .netって6.0の次ですよね?
.net = 7.0 .net 2003 = 7.1
>>56 あ、そうなのか、どうりで.net 2003は良く検索で出てきたけど
.netはあまり出なかったわけだ
謎が解決しました、ありがとう
VC++6使ってます。 メッセンジャーのような複数の相手とP2P接続させたいのですが 参考になるサイトとか書籍などありましたら教えてください。
>>58 Regnessemのソース。
Delphiだけど読むだけならそれほど困難ではない。
>>59 Regnessemってソース公開してたんですね。知りませんでした(汗
早速DLしてきたので参考にさせてもらいます。
ありがとうございました。
61 :
デフォルトの名無しさん :05/01/09 02:40:12
#include <iostream> と #include <iostream.h> の違いを教えてください あと #include <cstdlib> と #include <stdlib.h> の使い分けについても教えてください
1.指定フォルダ内のファイル一覧を取得。 2.ファイル一覧にフォルダがあればそのフォルダ内のファイル一覧も取得。 3.2を繰り返して指定フォルダ以下のツリーを作成。 ということをやりたいんですけど、2以下をどうすればいいか思いつきません。 参考になるサイトとかあったら教えてください。 コンパイラはBCC5.5です。
>>63 boost::filesystemを使った例。
#include <algorithm>
#include <fstream>
#include <string>
#include <boost/filesystem/path.hpp>
#include <boost/filesystem/operations.hpp>
std::ofstream myout("一覧.txt", std::ios::out);
struct pred_p{bool operator()(const boost::filesystem::path& x){return !boost::filesystem::is_directory(x);}};
void scan_folder(const unsigned int level, const boost::filesystem::path& scan_path, const std::string& lines)
{
std::vector<boost::filesystem::path> folders((boost::filesystem::directory_iterator(scan_path)), boost::filesystem::directory_iterator());
folders.erase(std::remove_if(folders.begin(), folders.end(), pred_p()), folders.end());
std::vector<boost::filesystem::path>::const_iterator first(folders.begin());
std::vector<boost::filesystem::path>::const_iterator last(folders.end());
if (first != last)
{
for ( ;first != last - 1; ++first)
{
myout << lines << "├" << first->leaf() << std::endl;
scan_folder(level + 1, *first, lines + "│");
}
myout << lines << "└" << first->leaf() << std::endl;
scan_folder(level + 1, *first, lines + " ");
}
}
int main()
{
scan_folder(0, boost::filesystem::current_path(), "");
return 0;
}
C/C++というよりはWindowsの話ではあるのですが Program Files下のファイルに対してfopen関数にてファイルを開こうと試みたのですが出来ませんでした。 理由と解決方法が知りたいのですが、よいサイト等ご教授願えないでしょうか? 環境は Windows2000 VC++6.0 です
69 :
初心者 :05/01/09 06:31:13
現在Windows2000 VC++6.0を使ってOpenGLを用いた3次元画像の表示プログラムを作っています。 ですが、OpenGLの画像を2つのwindowで表示したいのですがうまく表示できません。 そこで、可能かどうかと、可能ならばよい解決方法を教えていただきたいです。 どうかよろしくお願いします。
完全にスレ違いなんですが
>>68 レスありがとうございます
No such file or directoryと返されました
ファイル名等は間違えていないのですが…
errnoに関してはひとつ利口になりました、どうもありがとう
>>71 まさか fopen("C:\Program Files\...") とか?
一度開くファイル名を標準入力から入力してからですが事実上は fopen(C:\Program Files\.....")となってます
>>73 「事実上は」ってのがよくわからないけど、
fopen("C:\\Program Files\\...") にしたら開けたりするのかな?
scanfにて一度 char FileName[512] に入れていますので エスケープシーケンスによるエラーとかではないとは思っています コンパイル自体は通っています
これはもう、ソース晒すしかないね。
#include <stdio.h> #include <errno.h> #include <string.h> int main() { FILE *file; int c; char string[512]; char FileName[256]; char *err; int swich = 1; printf("ファイル名を入力してください\n>>"); scanf("%s", &FileName); errno = 0; if((file = fopen(FileName, "r")) == NULL) { err = strerror(errno); perror(err); printf("File Open miss.\n"); return -1; }
else { while(swich == 1) { file = fopen(FileName, "r"); printf("Open succses.\n"); while((fscanf(file, "%s", &string)) != EOF) { printf("%s\n", string); } printf("reLoad?\n>>"); scanf("%d", &c); if(c == 1) { swich = 1; } else { swich = 0; } fclose(file); } } return 0; } ソース出してみます 任意のフォルダ内のファイルは読めたのですが Program Files下のファイルが読めなくて困っているところです(目的のファイルはProgram Files下のファイルです)
>>67 - scanf("%s", &FileName);
+ scanf("%[^\n]", FileName);
>>77 scanfでスペース含んだ名前は入力できないような気がする。
perror(FileName); にしてみな。
危なくてもいいならgets()でも使え。
>>81 scanf 使わなければ
scanf("%s", &FileName); を
fgets(FileName, sizeof(FileName, stdin);
FileName[strlen(FileName) - 1] = '\0';
他ソフトでアクセス中のファイルにこのプログラムでアクセスする方法を模索しておりまして
まずは通常アクセス出来るかProgram Filesを試したところアクセスすら出来なくて困っていたというところでした
また頑張ってみます
>>79-81 レスありがとうございました
>>83 入力ストリームを標準入力にするんですね、なるほど
>>67 私はDドライブに市販ソフトを
インストールするようにしてるよ
CドライブはOSのインスコのみ
こんな椰子もいるから
>>86 市販ソフトはレジストリを使うから、
ファイルさえあればいいってものじゃないんで
結局C:\Program Filesに入れている。
てゆーかなんで対話的にして標準入力を潰すのかね? しかもscanfかい
>>84 >他ソフトでアクセス中のファイルにこのプログラムでアクセスする方法を模索しておりまして
アクセス中のファイルにアクセスするな。
寿命を迎えた変数はメモリから解放されますか?
>>90 自動変数・メンバ変数なら、変数自体のメモリはスコープアウトで解放される。
ポインタがぶら下がってる場合はデストラクタでどうにかしないとダメ。
初心者なんですが、教えてください。 int Len(const string& str) { return str.length(); } このような関数がある場合、 Len(string()); という呼び出しをしても大丈夫でしょうか? string()で作成されたインスタンスが、呼び出した関数内で有効なのか教えてください。
96 :
デフォルトの名無しさん :05/01/10 20:24:48
現在C++を勉強中の者です。 ネットや書籍で調べたのですが、見つけられなかったので質問させてください。 デフォルトコンストラクタと、その他引数つきのコンストラクタをいくつか 宣言した場合、いくつかのコンストラクタで共通する初期化リストも それぞれに書かなくてはならないのでしょうか? 初期化リストがかなり長大なため、出来るだけ共通する部分は簡略化 したいと思っているのですが、どなたか教えてください。
初期化を関数に分けてしまうのが一番楽じゃないでしょか
>>96 メンバの構成をいじらない限りは、書かなくてはならない。
構成に手を入れてもいいなら、
共通の初期化を行うメンバをひとつのクラスにまとめてコンストラクタを書いたり、
private なコンストラクタ+インスタンス生成用static関数を作ったりできる。
>>97 メンバに「初期化」が重要な意味を持つクラスがあると、そう簡単にはいかない。
99 :
デフォルトの名無しさん :05/01/10 20:49:04
>>98 >共通の初期化を行うメンバをひとつのクラスにまとめてコンストラクタを書いたり、
あ〜、なるほど〜。今回はこの方法でいけそうです!!ありがとうございました。
100 :
デフォルトの名無しさん :05/01/10 21:48:55
スレ違いだったらスミマセン。 Windowsのプログラムを書くときってfstreamは使わないほうが良いのでしょうか? それともCreateFileのほうが使い勝手が良いだけなんでしょうか? 「使用を避けるべき」なのか「使用可だがCreateFileのほうがベター」なのか どなたか教えて下さい。出来れば理由もおねがいします。
Win32環境では、ファイルを開くためのAPI(CreateFile)に共有モードを 指定するパラメータがある。 意図的に「共有」を指定しない限り、(不用意にファイルを上書きしないように) ファイルを開くときには「排他モード」になる
>>100 Windows前提なら好きなほうを選べばいい。
他のプラットフォームを意識するなら fstream にして
移植性を高めることの利点が大きいかもしれない。
>>100 CreateFileはWindowsの世界に作られていて、fstreamはC++の世界に作られている。
要するにお前はどっちの世界の住人になるかだ。
それぞれメリット・デメリットがある。
それとWindowsプログラミングのサイトではCを対象にしていることが多いので大抵fstreamとかは出てこない。
Cのfopenもあるが、どうせならAPIの解説を……、ってことで特にCreateFileに偏っていると思う。
104 :
デフォルトの名無しさん :05/01/10 22:18:39
事故消滅するようなクラスを作ろうと考えているのですが 以下のようなコードはやめたほうがよいのでしょうか? DWORD HAGE::Delete(){ m_dwRef = m_dwRef - 1; if( m_dwRef == 0 ){ delete this; } return m_dwRef; }
105 :
104 :05/01/10 22:22:36
すいません戻り値見たらm_dwRefの保持する値が壊れてました 以下のコードなら大丈夫でしょうか? DWORD HAGE::Delete(){ m_dwRef = m_dwRef - 1; if( m_dwRef == 0 ){ delete this; return 0; } return m_dwRef; }
106 :
100 :05/01/10 22:23:06
>>101 〜103
みなさん、本当にありがとうございました。これで疑問が解消しました。
個人的にはWindowsAPIをあまり使いたくないので、必要に迫られない限り
fstreamを使いたいと思います。
107 :
デフォルトの名無しさん :05/01/10 22:33:42
>104-105 m_dwRef==0だったら? m_dwRefの値の遷移図を書いてみろ
>>105 そのコード自体に問題はないよ。
delete this の是非や、Delete() が戻り値を持つことの是非は気になるけどね。
109 :
デフォルトの名無しさん :05/01/10 22:51:42
if(){} else if{} else if{} を繰り返すのと switchをつかって処理分岐するのは 機械語からみたら同じ処理ですよね? 自分で操作できるぶんif〜elseのほうがパフォがいいと思うんですが 合ってますか?
110 :
デフォルトの名無しさん :05/01/10 22:54:11
>109 コンパイラッキー。 確率論勉強しろょ
>>109 switchの方が可読性が良いと思うから、switchを使えるならswitchにしてほしい。
それにswitchだとジャンプテーブルになることが多いという話もかなり聞く。
>>109 > 機械語からみたら同じ処理ですよね?
コンパイラによる
> 自分で操作できるぶんif〜elseのほうがパフォがいいと思うんですが
制約が多い分switchのほうがパフォがいい(ことが多い)
if else ifはその回数だけ条件分岐が発生するが、switchなら場合によってはjmp命令一発で解決する可能性がある。
107-108 m_dwRefってのは参照カウントです このクラスのポインタが3箇所で参照されていた場合はm_dwRefの内容が3になります。 それぞれの箇所でこれが不要になったに場合Delete()を実行し、 すべての箇所で不要になった場合(m_dwRefの内容が0になった場合) メモリから削除されるという仕様にしたかったのですが。
>>105 COMでは普通にする。
あと m_dwRef = m_dwRef - 1; はキモイから
if( --m_dwRef == 0 )
にしてくれ。
デクリメント前に assert( m_dwRef > 0 ) もほしいな。 Delete() は void じゃダメなのかな? もっというと、 boost::shared_ptr 使えってことになるんだが。
皆さんありがとうございます。 assertでウインドウが出た場合Direct3Dのフルスクリーンが解除されてしまうので その代わりにエラーログを出す処理を追加しました。 調べてみた結果boost::shared_ptrは速度が遅くなる恐れがあるようですね。
boost::intrusive_ptr もあるでよ。
121 :
デフォルトの名無しさん :05/01/11 13:58:38
質問です。環境は XP、VC++ 6.0 です。 wav サウンドを、sndPlaySound を使って再生しています。 そこで、2つの wav ファイルを同時に再生させることはできないでしょうか? 引数として SND_ASYNC を与え非同期で動かしても、 2つめのサウンドを再生すると、1つ目のサウンドの再生が止まってしまいます。 よろしくお願いします。
>>121 自前でミキシングするかDirectSound使うんじゃないかな?
DirectSound ですか……。 また色々と勉強が必要そうです。 急を要するので、ひとまずは midi か mp3 でも使っておきます。 ありがとうございました。
124 :
デフォルトの名無しさん :05/01/11 15:49:05
VC++なんですが、リストビューの要素の 編集をしたいのです ダブルクリックすると、編集可能になるお手本の とおりにやりたいのですが、どういう手段を使えばいいのでしょうか // ダブルクリック反応用 m_listctrl.SetExtendedStyle(LVS_EX_TWOCLICKACTIVATE); i = m_listctrl.GetHotItem(); これだと、一番左の行の場合しかiに値が入らず、編集もできないです リストビューのどこのカラムでもダブルクリックで編集できるような方法を教えてください
125 :
124 :05/01/11 15:50:09
すみません スレ間違えました VC++スレにいってきます 失礼しました
126 :
121 :05/01/11 16:24:12
引き続き質問です。XP、VC++ 6.0 です。 DirectSound を使ってみているのですが、 >LPDIRECTSOUND8 lpds; >DirectSoundCreate8(NULL, &lpds, NULL); ここで早速、 〜.cpp(62) : error C2065: 'LPDIRECTSOUND8' : 定義されていない識別子です。 と出ます。 >#include "mmsystem.h" >#include "Dsound.h" の2つはインクルードしているのですが……。 他に何かインクルードする必要があるでしょうか?
dsound8.hじゃなかった?
>>126 「LPDIRECTSOUND8」を含むファイルの検索を行う
と言う発送は出てこないのですか?
129 :
121 :05/01/11 17:10:40
検索しても出てこなかった……_| ̄|○ DirextX のバージョンは 9.0c なので大丈夫なはずです。何が抜けてるんでしょう……。 dsound8.h でぐぐっても0件でした。
スマソ Dsound.h→dsound.h これが原因ぽい
>>126 ヘッダの検索順序はDirectXSDKのヘッダファイルを先に探すようになってるか?
その9.0cがSDKじゃなくてランタイムのバージョンだったら(ry
>>131 何というか今、ものすごくごめんなさいって感じが……_| ̄|○
お騒がせしましたありがとうございました_| ̄|○
133 :
デフォルトの名無しさん :05/01/11 18:29:02
派生クラスのポインタを、派生元クラスのメンバに持たせることはできないのでしょうか? 省略して書くと、 class B; class A { B* pB; void Test(){ pB->Do(); } } class B : public A { void Do(){...} } これだとpB->Do()のところで「認識できない型Bが使われています」と弾かれ、 class A; class B : public A { void Do(){...} } class A { B* pB; void Test(){ pB->Do(); } } これだとclass Bの定義で「定義されていない基本クラスが宣言されてます」と弾かれ、 どちらにしてもコンパイルが通りません…。 VC++.net2003です。
135 :
デフォルトの名無しさん :05/01/11 18:39:22
>133 Doをvirtualメソッドにして、ポインタは基底クラスのもの、A*を代表させるといいのでは?
>>134 ありがとうございあmす。ただ実際にはテンプレートを使っていて
class A { list<shared_ptr<B>> pB; ... }
みたいな感じなので、ダウンキャストできないんです。
というわけで、できればB*のままで持たせたいのですが・・・
>>135 なるほど。
でもB以外にもAを派生したクラスがいくつかあって、
Do()はB固有のメソッドなので、A自体にDo()はあまり持たせたくないのです…
cppとhに分けて書くことで解決しました。 もうすこし考えてから書き込むべきでした。すいません…
>>130 > Dsound.h→dsound.h
そんな馬鹿な。Windowsでは大文字小文字の区別はないはず。
140 :
デフォルトの名無しさん :05/01/11 21:57:18
intからstringに変換するのって、どうすればいいんですか?
141 :
デフォルトの名無しさん :05/01/11 21:59:37
>140 sprintf
>>140 boost::lexical_cast<std::string>()
(std::ostreagstream() << 123).str()
WinXPSP2+VisualStudio2003.NET使いです. #include "stdafx.h" #include <windows.h> #include "Shlwapi.h" int _tmain(int argc, _TCHAR* argv[]) { char buffer_1[ ] = "C:\\TEST\\file.txt"; char *lpStr1; lpStr1 = buffer_1; int retval; retval = PathFileExists(lpStr1); return 0; } とすると, error LNK2019: 未解決の外部シンボル __imp__PathFileExistsA@4 が関数 _main で参照されました。 fatal error LNK1120: 外部参照 1 が未解決です。 というエラーをはきます.どうすれば解決できるでしょうか? あと, #include<Shlwapi.lib>や#include<Shlwapi.dll> とすると, fatal error C1083: include ファイルを開けません。'Shlwapi.dll': No such file or directory と怒られます.
>>146 ライブラリをリンクさせたい時は
#pragma comment(lib, ライブラリ名)
と書く
この場合なら
#pragma comment(lib, "Shlwapi")
VCの場合ね('A`)
>147 ありがとうございます.ようやくコンパイル通りました
151 :
デフォルトの名無しさん :05/01/12 08:05:14
>>144 素直にsprintf しとけ
今後もそれつかうぞ絶対
152 :
デフォルトの名無しさん :05/01/12 13:12:57
テンプレートでごてごてのライブラリを使ってプログラムを組んだときに コンパイルエラーが出るとエラーメッセージが意味不明すぎて困っています どうすれば委員でしょうか 委員?俺は委員なのでしょうか だとすれば何の委員なのでしょうか
>>152 モチツケ。そしてEffectiveSTLを読んでみろ。
エラーの解読方法が書いてある。
amazon見たら星5個ですね わかりました紀伊国屋いってきます
>>155 その項だけ立ち読みすればいいと思われ
ていうか、ただ「似てる部分はまとめろ」ってだけだけど
なるほど財布持たずに勉強だけしに行くことにします
本ぐらい買え
159 :
デフォルトの名無しさん :05/01/12 14:35:41
int main(int argc, char *argv[]){ FILE *fp; char keyword[80]; char line[256]; char* sp; int size = 0; if( argc<3 || (fp=fopen(argv[1],"r") ) == NULL){ printf("can not open file"); exit(1); } strcpy(keyword,argv[2]); size = strlen(keyword); while(fgets(line,256,fp) !=NULL){ sp = strncmp(line,keyword,size); if(sp==0){ printf("%s",line); } } fclose(fp); return 0; } ---------------------------------------------------------------------- 文字列処理のプログラムなんですが、keywordが1文字だった場合、 keywordに空白を追加して文字列比較(strncmp)の処理を行いたいのです。 どのようにすればよいでしょうか?
160 :
デフォルトの名無しさん :05/01/12 15:04:01
>159 sizeが1だったらstrcatで" "を追加。動作はデバッグして調べよ
#include<stdio.h> main() { char name[7] = {"NURUPO"}; char *add; int i; add=name; for(i=0; i<6; i++){ printf("%Xは文字%cを表している。\n",add,*add); add++; } printf("\n"); printf("逆に並べ替えると\n"); for(i=5; i>=0; i--){ printf("%Xは文字%cを表している。\n" ); } } NURUPOを反転表示させたいのですが、どのようにすればいいでしょうか?
#include<stdio.h> main() { char name[] = "NURUPO"; char *add = name; int i; for (i = 0; i < 6; i++) { printf("%Xは文字%cを表している。\n", add, *add); add++; } printf("\n逆に並べ替えると\n"); for (i = 5; i >= 0; i--) { printf("%Xは文字%cを表している。\n", add, *add); } }
#include <stdio.h> #include <string.h> #include <algorithm> int main() { char name[] = "NURUPO"; printf("%s\n", name); std::reverse(&name[0], &name[strlen(name)]); printf("%s\n", name); return 0; }
#include <cstdio> #include <cstring> #include <algorithm> using std::puts; int main() { char name[] = "NURUPO"; puts(name); std::reverse(name, name + strlen(name)); puts(name); return 0; }
おぷるん
int* func(){ 処理 } という関数を実行したとき返り値を必ずどこかに格納しなくてもいいんでしょうか? 例 int* a = func(); を func();だけにする。
func()が新しく確保して開放していないメモリへのポインタを返して いなければ構わないよ。
>>168 言い方悪くない?
>>167 そのポインタが指すオブジェクトを、
呼び元が解放しなければならない場合は駄目。
そうでなければ構わないよ。
printfやstrcpyの返り値を利用する割合は、全体の2.4%(当社調べ)
>168-169 解決しました。レスありがとうございます
fseek()の返り値は更に使われない悪寒。
173 :
デフォルトの名無しさん :05/01/13 20:15:49
こんちわ、ある関数の if(search_flug == 0){//もしもsearch_flug=0ならば新ノード作成 New_nord = (struct word *)malloc(sizeof(struct word));//そのノードの次ノードを作って。 strcpy(New_nord -> name,word_name);//単語を登録 (New_nord -> appear)++;//出現回数に1を加算 New_nord -> Next_pt = NULL;//Next_ptをNULLに(次がないんだからネ) Now_nord -> Next_pt = New_nord;//んで、さっきまでNULLだったノードのNext_ptを新ノードへのポインタに } else{ (Now_nord [hash_num].appear)++; } という所で、一番頭の if(search_flug == 0){ の所で構文エラーが出るのですが。 原因がわかりません。 全角文字を使ってるとか、{}の数が足りてないとかスペルミスとか色々試してみたがどうも ピンと来ないのですが、わかる方ご教授お願いします。 この記述の直前にdo whileでループを書いてるんですが、それとか関係ないですよね・・・? コンパイラはVC++6.0です。
174 :
デフォルトの名無しさん :05/01/13 20:17:01
おわーあ、表示崩れてる すいませんッ
flugだとかnordだとか突っ込みどころだらけだなぁ、おい。 構文エラーが出たならエラーの内容くらい書いとけ。
ゆとり教育の成果だな
ある意味表示崩れてるな。
178 :
デフォルトの名無しさん :05/01/14 03:20:28
あ、ホントだスペルちゃいますね。 直しておきます。失礼! エラーなんですが error C2059: 構文エラー : 'if' とだけで、自分もかなり面食らってます
あが〜、一度寝てからコードを見直したら原因がわかりました。 どうも申し訳ございませんでしたっ! なんか鬱です。ごめんなさい。
その前の行でセミコロンが抜けてたとか。
WindowsXP Visual Studio .Net C++ 以上の環境で、MFC、Win32API、ATL、C標準関数なんでもござれなアプリを作る予定です。 (MFCとWin32APIの違い等もよく理解していないのが正解だが) ダイアログベースで、ダイアログ内にJPEG画像を縮小して20枚くらいサムネイルのように貼り付け クリックされたら拡大表示っていうふうなアプリを作ろうと思っているんです。 そこで質問です。JPEG画像を縮小表示してダイアログに貼り付ける場合、どのように描画するのが よいのでしょうか。 俺のつたない予想 @ ダイアログのOnPaintでCBitmapを描画 A CImageで描画 B 自分自身に描画するクラスを作って20個貼り付ける? C CBitmapButtonで貼り付ける?
>>182 サムネイルならリストコントロール使えばいいだろ
リストコントロール!! その手がありましたか。エクスプローラの縮小表示のようにするってことですね。 これはかなり効果的でしたが、情報の後だしと言われてしまいますが 表示する20個はある条件にソートされて表示したいんで、 今回は使えませんでした。 ちょっともう少し自分で調べてみることにします。
>>184 リストコントロールは独自のソートできるよ。
void (*pKeyFunc[])() = {this->KeyBoardEvent_Field, this->KeyBoardEvent_FieldMenu, NULL}; ってムリ?
ムリだから質問したんでした。。。 どう改良すればコンパイルできます? switchにするしかないのかな
>>186 こう?
void (クラス名::*pKeyFunc[])() =
>>188 ありがと。
void (ClassA::*pKeyFunc[3])() = {ClassA::KeyBoardEvent_Field, ClassA
:KeyBoardEvent_FieldMenu, NULL};
(this->*pKeyFunc[m_iMD])();
で解決しました。でも、何故これでOKなのか理解でき(ry...
>>189 メンバ関数へのポインタ。
規格では &ClassA::KeyBoardEvent_Field のように & が必須なのでつけたほうがいい。
>>190 関係無い。
>>191 名前空間が解決できないからクラス名を指定しているんじゃないの?
(pKeyFunc[i])()も (*pKeyFunc[i])()も (ClassA::*pKeyFunc[i])();も (ClassA::pKeyFunc[i])();もダメ。 this限定で、「*」(C言語ではいらなかったはず)を付けないと いけないのかが分かりません。 ClassA::じゃ名前空間、物足りませんか...
195 :
デフォルトの名無しさん :05/01/16 16:00:42
neonをつかいWebDAV関連のプログラムを作りたいのですが、プログラムをうまくコンパイルすることができません。
neonのホームページは下の所です。
ttp://www.webdav.org/neon/ 開発環境はLinuxを使ってます。
以下のサンプルコードをコンパイルしようとした所次のようなエラーがでました。
#include<ne_session.h>
int main()
{
ne_session *sess;
sess=ne_session_create("http","ServerName",80);
ne_session_destroy(sess);
return 0;
}
gcc -L/usr/local/lib -I/usr/local/include/neon sample.c
/tmp/ccunwT5A.o(.text+0x18): In function `main':
: undefined reference to `ne_session_create'
/tmp/ccunwT5A.o(.text+0x25): In function `main':
: undefined reference to `ne_session_destroy'
collect2: ld はステータス 1 で終了しました
と上記のようなエラーがでてしまいます。
因みにne_session_createとne_session_destroyはne_session.hをインクルードすれば使えるはずなのですが。。。
#include <ne_session.h>
ne_session *ne_session_create(const char *scheme, const char *hostname, unsigned int port);
void ne_session_proxy(ne_session *session, const char *hostname, unsigned int port);
void ne_close_connection(ne_session *session);
void ne_session_destroy(ne_session *session);
コンパイラーに渡すオプション何か足りないものがあるのでしょうか?
教えて下さい。
>>195 インクルードファイルのディレクトリは-I/usr/local/include/neonで指定してるのに、
ライブラリは-L/usr/local/libなのか?
ホントにそのディレクトリにライブラリが入ってるのかどうか確かめてみては?
普通にインストールすればneon-configかpkg-config用の*.pcファイルも入っているはずだから gcc sample.c `neon-config --cflags --libs` か gcc sample.c `pkg-config neon --cflags --libs` とでもすればいい。
>インクルードファイルのディレクトリは-I/usr/local/include/neonで指定してるのに、 >ライブラリは-L/usr/local/libなのか? 突っ込むところはそこじゃなくて-lneonとを指定していないことだろ。
200 :
195 :05/01/16 17:47:57
Rubylist!さんありがとうございます。 おかげでコンパイルできました。
最近Cの方を始めたのですが #include<stdio.h> main() { printf("表示する文字\n"); } とありますがコマンドプロントがすぐに閉じてしまいますそれを閉じないようにするにはどこに何を加えればよいでしょうか?初歩的質問すみません。
203 :
デフォルトの名無しさん :05/01/16 18:12:45
>201 puts("プログラム終了。Enterキー押せよ"); getchar(); か system("pause");
ありがとうございました。さっそく試して見ます。
試してから書け
すみませんでした。教えてもらったのに・・・・・・ ちゃんとコンパイルもできいけました。本当にありがとうございます。
207 :
デフォルトの名無しさん :05/01/17 14:10:45
C++のプログラムで、 if ( (p.coef = d_ALC(p.ele)) == NULL )ERR("p.coef"); のような行があったんですが、ここにでてくる、「ERR」ってなんでしょうか?
ソースとヘッダ検索しろよ 基本的にC/C++はそれでシンボルの問題は解決するぞ
すごく既出かもしれませんが、なかなか検索しても引っかからないので、 すいませんがお教え下さい。 複数ファイル間でnamespace使う場合、 [ファイルA] namespace ns{int b;} とだけして、 [ファイルB]で namespace ns{int c;} int main(){......return 0;} と記述したのですが、[ファイルB]でint bを参照する場合、 using namespace ns; extern int b; ではダメみたいなのですが、どうすれば良いのでしょうか?
210 :
デフォルトの名無しさん :05/01/17 17:30:26
>209 なぜ共通ヘッダを使わない? namespace ns; extern int ns::b;
>210 ご回答ありがとうございます。 共通ヘッダを使うべきなのでしょうが、 「複数ファイル間で同名のnamespaceが同じ名前空間で扱われるか」 を試そうと思っていましたので共通ヘッダを使用しませんでした。 >namespace ns; >extern int ns::b; とありますが、どうもコンパイルエラーになるようです。 環境はg++3.3.2です。
212 :
209 :05/01/17 17:40:52
またソースは以下のとおりです。 [ファイルA] namespace ns{int b;} [ファイルB] #include <iostream> using namespace std; namespace ns{int c=100;} int main(){ using namespace ns; extern int ns::b; cout<<c<<endl; return 0; } で、エラーは以下です。 error: `ns::b' should have been declared inside `ns'
213 :
209 :05/01/17 17:43:32
int b;はファイルAのnamespaceのスコープでさえぎられているのでしょうか?
namespace ns{int c =100;} namespace ns{extern int b;} int main(){/*...*/} とするべき。 一般に名前空間に(その翻訳単位で)新しい名前を追加するときは 名前空間をオープンしないといけない。
215 :
デフォルトの名無しさん :05/01/17 17:55:49
コンパイル単位Aに宣言かつ定義されたns::bを外部のコンパイル単位Bから参照しようとしてるなら、usingの前に何かを書かねば…
216 :
209 :05/01/17 18:05:50
>214 おお!素晴しいです。できました!なるほど。 このテストをやってみたのは、複数のファイルで using namespace std; ってやってる場合、それらは同じ名前空間だけど、共通の空間として 認識されてるのか(もしくはそれぞれのファイル単位で別物のstdなのか) を確認したかったからです。 >namespace ns{extern int b;} とすることで、ファイルAの名前空間nsを参照できてるってことですかね。 >215 externとか書いてみたんですが、文法がおかしいみたいでした。。。 よくわからなかったもので。
217 :
デフォルトの名無しさん :05/01/17 18:12:32
>216 usingは、ns::を省略するぐらいの意味。externは外部(external)という意味。
ありがとうございました!
219 :
デフォルトの名無しさん :05/01/17 20:38:14
winscokを使ったクラスを作るために設計したんですが。 ただのラッパーみたいになってしまいます。 これは設計が悪いからでしょうか?
220 :
デフォルトの名無しさん :05/01/17 20:43:27
>219 常に決められた手順通りに動くことを想定すれば、途中の事務処理は自動化できるはず。
>>220 常に決められた手順は、そのクラスから派生して作るものかなと
思ったりしてるんですが、
そこまで考えてクラス設計はしなくても良いもんなんでしょうか?
それだけにしか使えないクラスを作成するとか。
クラスってイメージは、鯛焼きの型ってイメージがあるんで
専用クラス作るのは良いことじゃないと思ってるんです。
>>221 常に決められた手順だから、
クラスとしてまとめるんだろ?
そのクラスを使う上位で、
同じ事を何度も書かなくても言いように。
何度も宣言しないなら、クラスにしなくても良いじゃないかな? と思ってしまうんですよね。 クラスは、どんなときに使うのか?を理解する必要があるみたいです。 良い本を読んでみます。
225 :
デフォルトの名無しさん :05/01/17 23:30:36
boostのtokenizerで文字列を単語に分割したいんですが、 「aa<?bbcc?>dd」という文字列を、「aa」「bbcc」「dd」に 分割するようなことは出来ないのでしょうか。 ちょっと調べたんですが、1文字でしか分割できないような気がします。 それと、<??>の内部か外部かを判断するのは出来ますか?
boost::regexの方が簡単じゃないか?
ネストを許すかどうかで最適解が変わるんじゃないか
ネストを許すならパーサを書くかboost::spirit。許さないならboost::regex。
許さないのでregexにします。 ありがとうございました。
>>221 >常に決められた手順は、そのクラスから派生して作るものかなと
>思ったりしてるんですが、
>>219 の winscok を使ったクラスを例に考えてみよう。
例えば、藻前は上位クラスでコネクションを行う必要がある度に、
わざわざ、
・アドレス解決メソッド
・socket() ラッパーメソッド
・connect() ラッパーメソッド
と、複数のメソッドを呼ばそうとするのか?
普通なら、コネクションを行うメソッドを作り、
そのメソッドの中で
・アドレス解決
・ソケットの生成
・コネクション
と言う一連の手順を実行させないか?
231 :
デフォルトの名無しさん :05/01/18 15:40:43
自分の調べ方が悪いのかもしれませんが、 現在WinXPでBorland C++ Compiler 5.5を使って C言語でソケット通信のプログラムを組んでおりますが 通信相手を限定する為にWindowsのコンピューター名を 指定する方法で制約がかかっております。 そこでNetBIOS名からIPアドレスをプログラム上で 使う方法がありませんでしょうか?
232 :
デフォルトの名無しさん :05/01/18 16:42:41
これから言語覚えようと思うんですけど、direct Xって、visualc++以外でも使えますか?
>>231 gethostbyname() で、
コンピュータ名から IP 得られなかったっけ?
>>232 COMが使える言語ならどれでもいいと思うよ。
235 :
デフォルトの名無しさん :05/01/19 14:08:16
age
>>233 gethostbyname()で試したところ取得できました。
ありがとうございました。
237 :
デフォルトの名無しさん :05/01/19 15:56:04
あえて、文字列の途中にヌル文字を挿入したいのですが、 lstrcat(buf,"\x00");
238 :
デフォルトの名無しさん :05/01/19 15:57:21
おっと、途中で送信されてしまいました。 上記のような文をforループで回して文字列を作成したいのですが ヌル文字の部分だけ抜けてしまいます。 何か良い方法ってありますか?
239 :
デフォルトの名無しさん :05/01/19 15:58:25
>237 buf[len+1]=0;
240 :
デフォルトの名無しさん :05/01/19 16:04:23
memcpyでポインタをずらしてまわれ
[ CTest.h ] class CTest { void Draw() {}; void DrawTest2( CTest2 test2 ) {}; } [ CTest2.h ] class CTest2 { void Draw() {}; void DrawTest( CTest test ) {}; } main.cppの中でこれらを使用するにはどうしたらいいんでしょうか?
242 :
232 :05/01/19 16:10:27
>>241 正常にコンパイルする方法が知りたいんです。
244 :
デフォルトの名無しさん :05/01/19 16:19:09
>241 class CTest; class CTest2; をヘッダーの最初に書け
>>239 ってことはできあいの関数は使えないってことですね。
よくよく考えたら当たり前か・・・。
自作関数でもつくるしかなさそうですね。
ありがとうございました。
>>244 VCでやってるんですが、なぜかできないんですよ
エラーメッセージは
認識できない型 'CTest' が使われています。 >>> Init( CTest test ) {}の部分
CTest2' の宣言を確認してください。 >>> clas CTest2;
>>246 エラーメッセージ訂正
エラーメッセージは
認識できない型 'CTest' が使われています。 >>> Init( CTest test ) {}の部分
'CTest' の宣言を確認してください。 >>> class CTest;
248 :
デフォルトの名無しさん :05/01/19 16:59:27
>247 クラス定義の後で;忘れ
以前一つのファイルでできたと思ったので、分割せずに試してみたらそれも無理でした なんでだろ〜なんでだろ〜〜><;
ソースを晒すのが早いと思われ
_| ̄|○
class CTest2; class CTest { void Init( CTest2 test ) {} }; class CTest2 { void Init( CTest test ) {} }; int main() { return 0; } まーたったこれだけだからUPするまでもなかったorz
255 :
デフォルトの名無しさん :05/01/19 17:34:15
CTest::Init(CTest)
main.cppで#include "Func.h" sub.cppで#include "Func.h" Func.h内は クラスTimerの定義が有るとすれば いくら #ifndef DEF_NAME #define DEF_NAME ... #endif した所で、コンパイルして後のリンク時に再定義エラー が起こるわけで............。 これじゃ、再定義にならないように#ifndef,#defineの意味無いんじゃない? 1つのソースファイル内でまさか2度同じヘッダをインクルードするわけ なんてないし... だとしても、直ぐに気づくと思いますが
勘違い(orz
258 :
デフォルトの名無しさん :05/01/19 18:24:38
CTest,CTest2が相互に参照している。設計自体が悪い
>> 258 そうなのかな? オブジェクト指向だと双方向関連って普通にあると思うけど あと全く同じプログラムじゃないけど Win32プログラムだとなぜかうまくいく。。。なぜなんだ・・orz
>>259 あのね、君が普段から悪い設計しかしないのは解かったから。
>>260 は? 双方向関連 やってると設計が悪いのか?
オマイ だめぽw
>>256 関数の定義と実装を分ければ解決しますよ(たぶん)
>>261 いや、ダメなのは君の方だよ。場合によってはリスナとか作れよ。
>>262 レスありがとうございます。
なんだかヘッダファイルの意味をとんでもなく誤解してたみたいです。
ソースファイルのみで作った方が楽な気がしてきた。
何故ライブラリ作るんだろうと思ってたんですが、腑に落ちた気がしました。
ライブラリも結局は関数プロトタイプは必要で やっぱりライブラリの意味が見出せない。(ry
>>265 でかいプロジェクト扱ったこと無いだろ。
>>254 それだけならコンパイル通るはずだぞ。
ホントにそれだけでコンパイルしたのか?
実際はそれ以外のコードが含まれるんじゃないか?
>>265 それ、勉強つか経験が決定的に不足してるわ。
ある程度コーディングの経験があればヘッダファイルの有難味は判る。
>>254 CTest2はCTestより後で定義されてるからCTestはCTest2のサイズを知らない。
そういう場合はポインタ使え。よくある相互参照の解法だ。
ポインタそのものは環境依存だがサイズは固定値。
指してる先の構造体(この場合のCTest2)のサイズがまだ分からない時にも使える。
逆に、CTestはCTest2より前に定義されてるから
CTest2はCTestのサイズを知っている。よってポインタにする必要無し。
したがってこの1箇所の修正でコンパイル通るんじゃないかな?
class CTest
{
void Init( CTest2 *test ) {}
};
他のコードは一緒。
VC++7.1(のcl.exe)とcygwin g++3.2の両方でコンパイル通ったよ。
>>254 -
不完全型は引数の型とすることはできないだろ。
前方宣言と参照で済ますところだな。
271 :
デフォルトの名無しさん :05/01/20 10:00:37
一定の時間感覚で処理を発生させるのはどうやればいいの? sleepだと本当に止まってしまうので使えない VBでいうタイマーコントロールみたいなことをしたいのだけれど 誰か教えてたも くそ初心者でごめん
272 :
デフォルトの名無しさん :05/01/20 10:04:18
>271 SetTimer,WM_TIMER
274 :
デフォルトの名無しさん :05/01/20 10:11:18
すげーレスはやっ。ありがとう
>>272 ,273
それをキーワードに調べてみますよ
>>269 なるほど。構造のサイズが必要になってたんですね。
さすがでした。ありがとうございます。m( _ _ )m
関連ってポインタでとるものなのに、
簡単なテストコード書いたときに、面倒だったため、
省略してしまいました。
早く気づけば・・orz
VC++.NETについて質問です。 コンソールアプリで終了時にコンソール画面を残すことはできますか? いままではBCC+BCC Developerで作ってたのでわかりません・・・; 初歩的な質問ですがお願いします。
自己解決しました。 Ctrl+F5でできたとは・・・鬱
279 :
デフォルトの名無しさん :05/01/20 14:08:08
C言語で、 for(z=-10;z<=10;z++){ for(y=-10;y<=10;y++){ x=(Xnosa1(T,A,K,y,z))*(Xnosa1(T,A,K,(y+1),z)); if(x<0){ ※Xnosa1(T,A,K,y,z)、Xnosa1(T,A,K,(y+1),z)は関数 例えばこの様に書いたときに、x<0になる事が何度もあっても、初めにx<0になった時点でその時の値だけを返してfor文を終了させるにはどうすればよいでしょうか? よろしくお願いします。
返すと言う意味が関数から読み出し元に返すと言う意味なら if (x < 0) { return x; } 単純に二重ループから脱出したいなら for () { for () { if (x < 0) { goto OutOfFor; } }} OutOfFor:
281 :
デフォルトの名無しさん :05/01/20 14:49:17
VC++6を使っています ガイシュツかもしれませんしググレって言われるかもしれませんが、どこも初心者にも 判りにくいので質問させていただきます。 「半角文字を全角文字」にする方法を教えてください。 どこのサイトもわかりにくかったので・・・。 判りやすいサイトでもあればよいのですが。 自分も引き続きしれべますけどお願いします。
283 :
デフォルトの名無しさん :05/01/20 15:12:00
>281 LCMapString
なんとか自力でできました。スミマセンですた。
Windowsのコンソールアプリを作ろうとしています。 パラレルポートを監視し、その状態に応じ処理を行うものです。 やりたいことは、以下の様な処理です。 int main(void){ /* ここで初期化 */ while(1){ /* パラレルポートの状態を見る。*/ /* hoge 実行 or 何もしない */ } /* ここで終了処理 */ return 0; } このままですと、アプリ終了のためにはCtrl+C等が必要ですが、その場合 終了処理が行えないのが困りものです。パラレル及びhogeのコードそのものに問題はなく、 悩んでいる点は、上記の様なwhileをしつつ、どうやって終了処理をするか、です。 わからないなりに調べ、以下の方法で実現できるかも、という段階まできました。 (案1) Ctrl+Cのシグナルハンドラ作って終了処理を記述 (案2) 副スレッド作ってwhileをやらせる。本スレッドに、getcなどで副スレッド終了用のインターフェース記述 これらが妥当な方針かどうか御教示願えますでしょうか? (シグナルにせよスレッドにせよまだ勉強不足ですが、そこは今後じっくりやるとして、 方針が正しいかどうか教えて頂きたいのです) 長文すみません。宜しくお願い致します
286 :
デフォルトの名無しさん :05/01/20 20:05:26
案1が簡単。案2は多方向からの信号の排他制御に向いている。
287 :
271 :05/01/20 20:32:43
タイマーを組み込んでみたんですけど、なんか精度が100ms以下と悪いらしいのでがっくりしました。 そんなわけで「まるちすれっど」を採用しようと思うんですけど、こいつの精度ってどんなもんですか?大体でいいから数字で知りたい。 欲を言えば5ms、最悪20msくらいの分解能はほしいのです。
288 :
デフォルトの名無しさん :05/01/20 20:49:40
【何の質問】C++ 【プログラミング歴】数ヶ月 【2ch歴】3年程 【職業】学生 【質問】卒業研究でC++のプログラムを作ることになりまして,皆さんに教えて頂きたいのです. #include "spec.h" const double spec::getsVST() { return 23.00; } const double spec::getsTCV() { return 1.54; } const double spec::getsSK() { return 0.097; } このようなcppファイルがあり,今はreturnで数を代入していますが, 他プログラム(Visual C++) void CCompDlg::OnSaveButton() { UpdateData(TRUE); CFile f; f.Open("C:\\Compspec.txt", CFile::modeCreate | CFile::modeWrite ); CArchive ar( &f, CArchive::store ); ar << m_VstEdit << m_TcvEdit << m_SkEdit; ar.Close(); f.Close(); } で作成したファイルを読み込んで使用したいのですが,どのように組み込んで良いのかわかりません. ぜひどなたか詳しい方,方法をお教え願います.
>>287 藻前の作り方とコンピュータのスペック、
その時の状況などによる。
290 :
デフォルトの名無しさん :05/01/20 21:02:28
>288 ファイルの構造は書き込んだ順にデータが並んでいるだけだ。その順で読み込め。 CFile::Open CArchive::CArchive CArchive::operator>> をヘルプで見よ
291 :
デフォルトの名無しさん :05/01/20 21:06:20
>>290 レスありがとうございます。読み込むには上のcppファイルをどのようなにすれば良いのでしょうか?
思い当たるものを試したんですが、うまくいかないんです。
292 :
デフォルトの名無しさん :05/01/20 21:08:33
>291 ヘルプ見ない奴は何度も同じような質問をする。
293 :
デフォルトの名無しさん :05/01/20 21:22:16
string 型変数は多用してかまいませんか? char * で処理可能なら従来の C 的なコーディングのほうが 良いのでしょうか?(速度面やサイズなどで)
294 :
デフォルトの名無しさん :05/01/20 21:29:21
>>293 多用OKです。環境はVisualC++6.0です。
速度が大事なところではchar*を使うべき。 それ以外はすべてstd::string
普通のプログラムを書くときに、char*を使わなきゃならないほど 速度を求められる場面ってまずないけどな。 アルゴリズムの方がよっぽど重要ネ
298 :
デフォルトの名無しさん :05/01/20 22:11:03
教えてください。 フロッピーディスクが書き込み可能かどうか (使用可能なフォーマットかどうか) を調べる処理がどうやれば良いのかわかりません。 よろしくお願いいたします。
>>294-296 ありがとうございます。
特に気にするほどでもない、ということですかね。
string 型、便利ですね。
必要なことは問題領域において必要十分な柔軟性があることじゃないの?
302 :
デフォルトの名無しさん :05/01/20 22:31:18
void main() { char ans; while(1) { printf("INPUT y or n\n"); scanf("%c", &ans); if('n' == ans) break; } return; } 上のプログラムで y を入力すると「INPUT y or n」 が2行続けて出力されてしまいます。1行のみ順に 出力するにはどうしたらいいのでしょうか?宜しくお願いします。 環境、windows2000proSP4,VisualC++ 6.0SP6
>>287 タイマーの精度に対してはあまり正確なものは期待できない。
SetTimerよりも、と言う限定つきであれば「マルチメディアタイマー」
について調べてみよ。
>>302 散々既出だが、scanf()を捨てることをお勧めする。
>>302 試してないからうまくいくか分からないけど
- scanf("%c", &ans);
+ scanf("%c%*c", &ans);
>>286 御指導ありがとうございます。
案1を軸に、余力があれば案2にも挑戦したいと思います
>>302 scanf(" %c", &ans);
308 :
デフォルトの名無しさん :05/01/20 23:48:16
配列を別の配列に代入するとエラーとなるのですがいいやり方は無いでしょうか?
311 :
302 :05/01/21 00:00:33
教えて頂いた文で検索したら、バッファに\nが残ってしまう為とか…なるほど ありがとうございました。
次の方〜?
313 :
デフォルトの名無しさん :05/01/21 12:25:38
すいません 他人のDLLを使うプログラムで 最終的にDLLを使わず 実行ファイル一本にする方法が あったら教えていただけると助かります。 環境はWINとBCCとDIRECTX DLLのソースが無い状態です。 ライセンスひとまず考え無いものとします。
314 :
デフォルトの名無しさん :05/01/21 12:26:16
ライセンスはひとまず考え無いものとします。
315 :
デフォルトの名無しさん :05/01/21 12:30:15
>313 ライセンスが不要と考える根拠は?
パチかよ
>>313 DLLで行っている処理を自分で実装する。
これ以外は有り得ない。
って言うか、DLLはexeと別にあるから意味がある。
318 :
313 :05/01/21 12:36:08
BCC用でダイレクトxをやろうとするとき 必要になるために 無償で配布されてるライブラリなのと 作るものは商用とかそういうレベルじゃないし 仲間に配るだけなんで
319 :
デフォルトの名無しさん :05/01/21 12:38:23
インストーラーメン
320 :
313 :05/01/21 12:40:46
ファイル数を増やしたくないわけです。
>>320 なぜ?
ファイルの数は変わっても、
全体のサイズは変わらないぞ?
322 :
デフォルトの名無しさん :05/01/21 12:44:27
あなたを逮捕します。ガチャリ
324 :
313 :05/01/21 13:00:42
>>317 なるほどわかりました。ありがとうございました。
325 :
デフォルトの名無しさん :05/01/21 20:57:06
VC++7.1なんですけど class A : public float {... が通りません。 仕様ですか?
330 :
デフォルトの名無しさん :05/01/22 09:31:31
bcc32を使っています。3つ質問があります。 ぐぐっても入門書を漁っても解決できませんでした…。 一つ目は、 class test{ char test[3]=3; }; とすると初期化できないというエラーがでるんですが、文法的に間違っているんでしょうか? 2つ目 test.cpp int main(void){ char test[2][2][2]{ 2,2,2,2,2,2,2,2, }; return 1; } とすると「初期化子の一部のみに括弧が付いている」という警告が沢山出て困っているんですが どういう意味の警告か分かりません。どうすればこの警告が消せますか? 3つ目は入門書には配列は右から詰め込むと書いてあったので、下のようにすると 今度はさっきのに加えて初期化子が多すぎるとエラーがでます。 int main(void){ char test[2][2][2]={ {2,2}, {2,2}, {2,2}, {2,2}, }; return 1; } 何がどうなってるのかさっぱり分かりません。どなたかよろしくお願いします…。
class test{ char test[3]={1,2,3}; }; でした。よく探すと、初期化リストでは出来ないと書いてありました。すみません。
2つ目も間違ってました。char test[2][2][2]=...です。ホントすみません。
>>330 -
> 何がどうなってるのかさっぱり分かりません。
俺にはお前がなんでそんなに混乱してるのかがわからんよ。
おちつけ。
分かりました!カッコが足りませんでした。 ホントわけわからんくなってました。 二次元配列と同じ書き方だとダメなんですね…。 一人でスレ汚してすんません。
char test[2][2][2] = { {{2,2},{2,2},}, {{2,2},{2,2},} }
lmjoin.hを探しています。 Windows2000/XP VC++6.0 いずれもサービスパック等は当てていません。 lmjoin.hはどのように入手するのが良いですか?
337 :
336 :05/01/22 14:09:20
sageちゃいました。すみません…
338 :
デフォルトの名無しさん :05/01/22 14:52:45
>336 目的と用途は?
339 :
デフォルトの名無しさん :05/01/22 16:18:19
UNIX環境ではconio.hなどが使えないためにkbhit()やgetch()が使えませんが これらを実現するための方法をご教授願います。
340 :
デフォルトの名無しさん :05/01/22 16:21:10
>339 upxのソースに完璧な移植例がある
341 :
デフォルトの名無しさん :05/01/22 16:39:20
>339 readlineのソース見ろ
>>340-341 ソースをみてみました。参考にさせて頂きます。
ありがとうございました。
test
>>338 インターネットが使えなくなってて返事が遅くなってしまいました。
NetJoinDomainを使いたいのですが、lmjoin.hのインクルードが
必要らしいために探しています。
>>345 ググってわからなかったのでこちらにお伺いしたのです…
英語のサイトにあるらしいことは知っているのですが、お恥ずかしい
話ですがどれをダウンロードしたら良いのかがわからないんです。
工エエェェ(´д`)ェェエエ工
>>346 とりあえずSP当てろ
あと幼稚園からやり直せ
>>350 Win32APIスレのPlatform SDK Update
>>351 無事見つけてダウンロードできました。
本当に感謝しています。ありがとうございました。
C++を用いたプログラミングでstdio.hをインクルードして printfを使って表示したりするっていうのは、あまり良くないプログラムですか? stirng型を表示しない場面においてはcoutよりprintfの方が 使いやすかったりするので、coutとprintfの両方を使ったりしてもいいのでしょうか?
stdioを使うのはかまわない(cstdioにすべきという話は別)。sprintfとか便利だしね。 ただ、同一プログラムでiostreamとstdioの入出力を使うべきではない。 誤動作する可能性が充分にある。
意図したとおりの動作にならん可能性はあっても誤動作はしないだろ、普通。
cout と printf() を併用した場合、バッファリングが気になるところ。
意図したとおりに動かないことを誤動作というんじゃないのか?
>>356 が言うように、先にprintfした内容が後でcoutに出した内容の後に出てくるようなことでしょ。
命令通りに動いてはいるんだから、誤動作ではないだろうな
>>357 プログラムは思ったとおりには動かない。
作ったとおりに動く。
意図した通りに動かないのは誤動作だなんて言訳は通用しません。
最近はGCが取りざたされてるけど、
ブラックボックス的にプログラムの流れを制御する機構にちょっと不信感があるのは
>>360 の言うような感覚が染みついてるからかもしれん。
「コンピュータなんて、俺が言ったとおりに動いてりゃいいんだよ!」みたいな。 俺もそう思う口だが。
363 :
デフォルトの名無しさん :05/01/25 02:43:06
コンデンサ液漏れ&破裂で誤動作っていうのは最近多いんだが。
某芝製の15"モニタがタバコの脂の所為か、1/2の確率でコンデンサから火を噴いたのには笑ったが。
火事をどうやって未然に防ぐかの方で、意見を言わせて頂きます。 思うのですが、 1.CPUのクロックダウンが出来るようであれば、BIOSでFSBクロックを下げて、全体の発熱をおさえる。 2.CPU coolerソフトを導入し、CPU使用率を100%以下にし、CPUの発熱を抑える。 3.放熱を妨害するホコリがパソコン内部へ極力侵入しにくい様にする。 4.熱伝導の良い大きなアルミ板の上にパソコンを乗せて、少しでも熱を逃がす。 このくらいしか思いつきません。 消極的な対策としては、 1.鉄製のプリンタの消音BOXで、延焼を防ぐ。 という手もあるかも知れません。
367 :
デフォルトの名無しさん :05/01/25 09:02:25
>364 この状況を打破したかったら、 アホコンデンサを売ったアホメーカーを某有名サイトでさらせ
現在のパソコンにVisualC++6.0が入っているのですが、 新しく購入したVisualC++.net 2003を6.0をアンインストールせずに 導入してもいいものなのでしょうか?
>>353 そこで boost;;format ですよ
>>370 うちのMBは連続使用してたら8ヶ月くらいで壊れた
>>369 問題ない。
むしろVC++6をアンインストールしようとする方が危険。
374 :
デフォルトの名無しさん :05/01/25 12:10:43
自作関数内で構造体Foo内のchar var_foo[256]に文字列を格納したいのですが、 int main(void) { struct Foo *foo; func_getword(stdin, &foo); return 0; } void getword(FILE *fp, struct Foo **foo) { fgets(*foo->var_foo, 256, fp); } だと左辺が構造体と認められません、どう書けばよいのでしょうか?
>>373 ありがとうございます、早速インストールしています
>>374 >*foo->var_foo
* 付けて、何がしたいんだ?
っていうかfoo確保せんでいいの?
\ │ / / ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ─( ゚ ∀ ゚ )< ぱいちんこぱいちんこ! \_/ \_________ / │ \ ∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいちんこ! ぱいちんこ〜! >( ゚∀゚ )/ | / \__________ ________/ | 〈 | | / /\_」 / /\」  ̄ / /
379 :
デフォルトの名無しさん :05/01/25 12:33:09
>>376 えっと自作関数内のfooが指しているのはmain関数内のfooの先頭アドレスだから
その中身の構造体Fooを参照するには*演算子かなと・・・
もうワケワカリマセン
>377
省いてしまいましたがmallocはやっています
380 :
デフォルトの名無しさん :05/01/25 12:39:03
コードが長くなるとしても処理によって関数を作っていった方がいいですか? 例えば、 文字列入力の為にmallocの処理を使ったとした場合、 main関数の他に入力用関数とmalloc用関数 みたいな感じで。
381 :
デフォルトの名無しさん :05/01/25 12:41:21
>379 上官に嘘を報告するとは何事だ!あやまれ! この場合(*pp)->としろ!
382 :
デフォルトの名無しさん :05/01/25 12:44:42
>380 下級兵士が何を抜かす! おまいの様な奴は黙ってまともな解説本を読め! 二度とここには来るな!時間の無駄だ!
無能な軍曹あらわる
384 :
379 :05/01/25 12:50:14
>>380 隊長、わかりました! 演算子の優先順序ですね!
385 :
初心者歓迎でーす! :05/01/25 12:50:45
ハイ、次の初心者!
386 :
380 :05/01/25 12:52:00
>>382 隊長、キビシスギマス! もっとやさしく!
387 :
デフォルトの名無しさん :05/01/25 12:55:04
どこからもほとんど参照されない関数は、存在価値がない
388 :
デフォルトの名無しさん :05/01/25 13:29:10
質問です。環境は XP、VC++ 6.0 です。 Debug モードでコンパイルすると、 >Dxguid.lib(dxguid.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください というエラーが出ました。 HDを検索したところ、Dxguid.lib はプロジェクトの外部に存在し、dxguid.obj は存在しませんでした。 このような外部ライブラリをコンパイルするにはどうすればよいのでしょうか。
389 :
デフォルトの名無しさん :05/01/25 13:36:58
>388 再インストールする。 または、DirectXの製造元に入社してdxguidを再コンパイルする。
390 :
デフォルトの名無しさん :05/01/25 13:55:34
391 :
デフォルトの名無しさん :05/01/25 14:07:09
>390 throwしてしまえ!
392 :
デフォルトの名無しさん :05/01/25 14:36:53
双方向連結リストなのですが、片道しかわかりません。 nextの場合、↓ですよね。 //連結作業 pos->next = head; head = pos; //参照時 for (pos = head; pos != NULL; pos = pos->next) ではprevの場合はどうかくのでしょうか?
>>389 SDK 再インストールでうまく行きました。ありがとうございました!
394 :
デフォルトの名無しさん :05/01/25 15:41:08
デバッガを使いたいのですがそのためにLog.txtに書き込みを行ないたいのですが OutputLog()という関数で引数として渡されてきたデータを文字に変換して それを書き込みたいのですが例えば引数としてint型やFloat型などいろいろな 型が通っても大丈夫にする方法ありますか? それと命令でフォルダが存在するかどうかを知る命令はありますか?
>>394 「ですが」が3回も繰り返されていて何が言いたいのかよく判らないんですが。
取り敢えず、stdio.hのprintf()の宣言でも見てみたら如何でしょうか。
フォルダが存在するかどうかを知る命令は、「フォルダが存在するかどうか教えろ」でどうでしょう。
関数名を知りたいのなら、環境依存なので一概には言えません。
>>394 C++にフォルダが存在するかどうかを確かめる関数はない。
boost::filesystem使え
>>400 既にコンソールが割り当てられている状況でもAllocConsoleは失敗する。
だからGetStdHandleがINVALID_HANDLE_VALUEを返すかどうかでthrowするか判断した方がいいんじゃないか?
>>394 #define OutputLog fprintf
真面目にやるなら可変長引数。va_arg を調べれ。
403 :
デフォルトの名無しさん :05/01/25 19:39:28
はじめまして。以下の課題が完全にお手上げです。どうかアドバイスをお願いします。 1 文字列をキーボードから読み取り、その文字列を暗号化した文字列を表示するプログラム。ただし、入力する文字列は英数記号のみとする。 2 暗号化は次の方法で行う。文字列中のローマ字を大文字小文字を問わず下記に示すとおりの置き換えを行う。 3 ローマ字以外の文字は暗号化しない。 a b c d e f g ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↓ ↓ ↓ ↓ ↓ ↓ ↓ n o p q r s t 環境はBC++5.5.1 WinXPです。よろしくお願いします。
>>403 スレ違い
>「ぼるじょあがC/C++の宿題を片付けますYO! 39代目」
MYFUNC.DLL内にMyfuncがあり、下記のソースで呼び出そうとしているのですが落ちます。 typedef int (WINAPI *LPMYFUNC)(const HWND _hwnd,LPCSTR _szCmdLine,LPSTR _szOutput,const DWORD _dwSize); LPMYFUNC lpMyfunc; HINSTANCE hdll = LoadLibrary("MYFUNC.DLL"); if(hdll == NULL){ printf("MYFUNC.DLL が見つかりませんでした。\n"); exit(-1); } lpMyfunc = (LPMYFUNC)GetProcAddress(hdll ,"Myfunc"); lpMyfunc(GetForegroundWindow(),cmdLine,buf,sizeof(buf)); おそらく最終行で0x00000000に書き込もうとして、落ちてしまうみたいなんですが、 どこを直せばいいのかご教授お願いします。
(*lpMyFunc)(GetForegroundWindow(), cmdLine, buf, sizeof(buf)); じゃないか? というかコンパイル通ったのか?それ
レスありがとうございます。 実は (*lpMyFunc)(GetForegroundWindow(), cmdLine, buf, sizeof(buf)); でもやってみてあったんですが、 コンパイルは共に通り、同じように0x00000000に書き込もうとして落ちます。 一応コンパイラーは bc++ 5.5です。
それはGetProcAddressでコケてるんじゃないかな。 同名関数がちゃんとexportされてるか、exescopeあたりでdllを調べてみては。
>>410 のいうように、どうせextern "C"でexportしないでGetProcAddressが失敗してるだけ。
戻り値のチェックもしてないし。
最初に環境すら示そうとしないんだからその程度。
実は、tar32.dllから、 Tar関数を用いて 解凍処理をしたいなと思ってまして、質問いたしました。 ドキュメントを見る当たり、関数名はTarであっている気がしますが、 もしヒットしていないなら、 if(lpTar == NULL){ printf("Tarが見つかりません。\n"); exit(-1); } 上記には書きませんでしたが、 で弾かれますよね?
>で弾かれますよね? じゃねーよ 自分で確かめろよそのくらい 知恵遅れじゃあるまいし
printf("%p\n", lpTar); で0x00000000になってるかチェック
NULLがオールゼロビットとは限りませんが
BCC32って言ってるんだからいいだろ
>>414 printf("%p\n", lpTar);
の結果
10009F84
です
じゃあ与えてるパラメータが悪いのかもな。
というかもう、デバッガで追った方が早そう。
やはり修行が足りないようです。
修行しなおして
出直します。
低レベルですみません。
また何かあったときは宜しくお願いします。
回答者の皆様アドバイスどうもありがとうござした。
この短いプログラムで一週間も… orz
つうさんgoogle二桁後半…
自分なりに今のレベルで考えられることをし尽くしました。
>>413 さんの言うように知恵遅れなんでしょう。
では失礼。
421 :
デフォルトの名無しさん :05/01/26 13:44:32
>>420 初心者スレなんだからいいんじゃねーの。
がんばれ!
typedef int WINAPI (*LPMYFUNC)(const HWND _hwnd,LPCSTR _szCmdLine,LPSTR _szOutput,const DWORD _dwSize);
bccで以下のようなことをしたいのですが、hogeに代入するところでエラーが出てコンパイルが通りません。 このようなことは不可能なのでしょうか? typedef void (__closure *METHOD_PTR)(void); void sage(void) { } main() { METHOD_PTR hoge; hoge = (METHOD_PTR)sage; hoge(); } 以下のようにするとコンパイルは通り、正常に動作するのですが‥‥ (通常の関数ポインタを入れたいのでこれはNG) typedef void (__closure *METHOD_PTR)(void); class class_a { public: void sage(void) }; main() { METHOD_PTR hoge; class_a a; hoge = a.sage; hoge(); }
bccはよく知らんが、メンバ関数へのポインタとフリー関数へのポインタを 統一的に扱いたいなら、boost::functionを使うといいと思う。
C言語でfgetsを用いてファイルから例えば 200 3 20 10 200 300 1 20 3 という数字を読み込んで、その縦の数字をそれぞれたすには どうすればいいですか?教えてください
>>425 #define N 3
int i, j, (*num)[N], sum[N];
//ここでnumに読み込む。
for (i = 0; i < 行数 i++)
for (j = 0; j < N; j++)
sum[i] += num[j][i];
あっ425ではなくて426だったOTZ
double型からchar*型に変換したいのですが 有効数字の桁数を指定して変換するにはどうしたらいいですか? 小数点以下何桁という指定はできるのですが、有効数字何桁の指定がわかりません 環境はVisualC++2003のWindowsXPです
>>424 ありがとうございます。
VCLがらみだから無理か‥・orz
>>429 #include <sstream>
char* scientific(double d, int n, char* c, int size)
{
std::stringstream ss;
std::scientific(ss);
ss.width(size);
ss.precision(n - 1);
ss << d;
ss >> c;
return c;
}
#include <iostream>
int main()
{
char c[256];
std::cout << scientific(1.23456789, 8, c, sizeof(c));
}
433 :
デフォルトの名無しさん :05/01/27 00:23:26
質問です。XP、VC++ 6.0 です。 class CParent { public: func(int a, int b); }; class CChild: public CParent { public: func(int n); }; と定義し、 CChild child; child.func(x, y); とすると、不正な2つの実引数を持って呼び出されたとエラーがでます。 クラス CParent, CChild の func は引数の個数が違うため、 オーバーロードされないと思うのですが、 なぜこのようなエラーが出るのでしょうか。 child.CParent::func(x,y); とすれば動くことは動くのですが……。
>>433 継承による同名の関数宣言は、オーバーロードとはならず、隠蔽されます。
従ってエラーが出ます。
コンパイラに隠蔽ではない事を伝えるには
using CParent::func;
とすればよいです。
public に、だな
>>434 そそ。具体的には
class CParent {
public:
void func(int a, int b) {}
};
class CChild: public CParent {
public:
using CParent::func;
void func(int n) {}
};
あ、
>>436 は
>>435 さんに対するレスのつもりでした。
いやしかしC++は細かい変なルールがたくさんあって、忘れずにいるだけでも
大変だわ。。。。
C++ FAQ, 禿本, Effective C++ には良くない設計の兆候として書かれてたよな
>>438 C++FAQのFAQ7.06で、public継承した子クラスが親クラスの関数を隠蔽する
時点で、設計が間違っていると書いてあるな。
a-kind-ofなんだから、仮想関数で振る舞いを変えるのならわかるが、親クラス
の関数がデフォルトで使えなくなった時点で、もはや継承関係はぶっ壊れているも
同然だ。
>>438 読んだけれど、実感と理解はしていないんだね?
441 :
433 :05/01/27 00:56:13
数々のレスありがとうございます。
using 〜 を使う方法で上手く行きました。
>>439 の話に興味が沸きましたので色々調べてみたいのですが、
この方法自体に名前はついているのでしょうか?
名前が分かれば調べやすいので。
>>441 いや・・・・その前に、public継承の意味を正しく理解する事の方が先だ。
その上でusing宣言をすべきだと思う。
そもそもusing宣言は、friend宣言と同じく、C++のカプセル化の原則を
無視する危険なキーワードなので、乱用はよくない。
443 :
433 :05/01/27 01:01:46
>>442 確かに、実は最近まで 継承 = public と思い込んでいて、
他の方法での継承を学んだことがありません。
いい機会なので学んでみることにします。ありがとうございました。
>>441 調べるだけなら
using-declaration
でぐぐってみ。
Windows2000SP4,VC++6.0SP6でエスケープシーケンスの為 config.ntでdevicehigh=%SystemRoot%\system32\ansi.sysを追記して command.com内でプログラムを実行しましたが意図どおりに表示できません。 例:反転のエスケープシーケンスの場合 (k/bのenter記号)[7;32m どうしたら出来るのでしょうか?教えてください。
>>445 NT系ではエスケープシーケンスは使えない。
447 :
デフォルトの名無しさん :05/01/27 21:34:02
GetProcAddressに自モジュールハンドルを渡して文字列経由で関数呼び出しをしたいのですがリンク時に
エントリポイント '_mainCRTStartup' は 12 バイトの引数を持つ __stdcall ではありません。イメージは動作しない可能性があります
と警告が出て実行すると有効なWin32アプリでないといわれてしまいます. リンクオプションに/DEF:"test.def"を追加しています.
EXPORTS mainCRTStartupを加えてみたり__stdcallをmainCRTStartupの宣言に加えてみたりしたのですがだめでした
以下ソースコードです
#include <windows.h>
#include <iostream>
typedef void (*func_t)();
void Hello()
{
std::cout << "Hello" << std::endl;
}
int main()
{
HMODULE this_exe = GetModuleHandle(NULL);
func_t hello= (func_t)GetProcAddress(this_exe,"Hello");
hello();
return 0;
}
以下test.defです
LIBRARY test
VERSION 1.0
EXPORTS Hello
ttp://hp.vector.co.jp/authors/VA023539/tips/dll/006.htmにdefファイルを作れば__declspec (dllexport)がいらないと
書いてあったのでできるだけdefファイルを使いたいです
>>447 「_mainCRTStartup' は 12 バイトの引数を持つ __stdcall ではありません。」
というのはつまり普通のDLLだとDllMainを呼ぶべきところがEXEファイルだと
DllMainにあたる関数が_mainCRTStartupであり、_mainCRTStartupは引数を1つも取らないから変なことになる。
ちゃんとDLL作って試せ。
>>446 うーむ、そうですか。初心者としてこの機能が使えないのは痛い・・・
重ねてすみませんが、代替機能(画面消去・カーソル移動)などありますか?
exeとは別にdllを作りexeからdllを呼び出し成功しました. 確かにdefファイルを使えば__declspec(dllexport)をつけてない関数をよびだせました. 文字列経由で関数呼び出しの件なのですがとりあえずdefファイルをあきらめ extern "C" __declspec(dllexport) void Hello(){...}としたら自exeの関数を呼び出せました しかしdefファイルをリンクオプションに付け加えると448さんの言うとおりDllMain( 12 バイトの引数を持つ __stdcall)が ないため起動不可のexeになってしまいます.えせDllMainをつけても実行されませんでした. defファイルはdllを作るときにしか使ってはいけないのでしょうか defファイルを使いつつエントリポイントをmainCRTStartupにしても呼び出せる方法はありますか?
おお 動きました. ありがとうございました
急に悪いんだけど、おまいらアイコン作るときどんなツール使ってる? 普通にVC?それともなんか別のツール使ってる? 何かお勧めのツールあったら教えてくれ
D-Pixedにico出力フィルタ入れて使ってる
テキストエディタで書いて、IrfanViewで表示してCopy&Paste
460 :
デフォルトの名無しさん :05/01/28 04:00:08
他のプログラムからコンソールに出力される文字列を、自作プログラム中の変数に入れるには どうすればいいですか?
パイプでいいのでは? A>B
462 :
デフォルトの名無しさん :05/01/28 05:23:14
>461 すみません、書き方が悪かったです。 サーバプログラムAがあって、AからはSTDOUTにログが出力されます。 Aから出力されるログを、リアルタイムに自作プログラムBで受け取るということを行いたいのですが 無理でしょうか?
パイプでいいのでは? A>B
間違った。 A|B
>462 パイプについて調べてみます。ありがとうございました
466 :
デフォルトの名無しさん :05/01/28 09:38:16
STLのvectorからchar*に変換したいんですが、どうすればいいんでしょうか。 vectorの内容をchar*の外部ライブラリの関数に渡したいんです。
vectorの型は何ですか? vector<T>のT
>>449 あるよ。
コンソールAPIで調べれ。
GetConsoleなんとか、SetConsoleなんとか。
469 :
デフォルトの名無しさん :05/01/28 09:52:05
>>467 froat*です。
どうもすいません。
471 :
466 :05/01/28 09:53:44
Null-terminated じゃないっしょ
push_back('\0'); &vec[0] pop_back();
475 :
466 :05/01/28 10:00:16
なるほど! ありがとうございました。
そういう真似が必要となる状況について詳しく
477 :
デフォルトの名無しさん :05/01/28 11:54:16
全部で、3000個程の小数を書き込んだ(1行ずつ改行した)、 テキストファイルから、最大値を求めたいです。 ネットで、「n個の最大値を入力して求める」プログラムを見つけましたが、 とても3000個は入力できません。 どうか、そのプログラムを教えて下さい。
しかもマルチだったか
479 :
秘密K殺隊員8号 :05/01/28 12:09:08
>477 無断多重投稿の現行犯で逮捕する!
480 :
デフォルトの名無しさん :05/01/28 12:15:14
>>479 申し訳ありませんでした。
掲示板の決まりを知りませんでした。
別の所で、「宿題」のスレッドに書くように
教わったので、今からそちらに書かせていただきます。
失礼しました。
ヌルポインター!
ガッインター!
ロングダブル!
セミダブル!
アンサイントイント!
もしかしてアンサイン「ド」じゃなくてアンサイン「ト」が正しい発音なの?
アンサインドダブル!
ダウト!!!
谷原「カミングダウト」
492 :
デフォルトの名無しさん :05/01/30 13:58:24
ホクト!
アンサインドホクト!
Gackt!
質問です。VC.Net2003 を使っています。 //myapp.h内に記述 class A { public: static int get_a(){return a;} private: static int a; }; int A::a; という構成のヘッダを使ってプロジェクトをコンパイルしようとすると、LNK2005(シンボルの重複定義が行われている?)というエラーが発生します。 そこで、#pragma message("INC")とプリプロセッサを記述して、インクルードされた回数を確認したところ、複数回インクルードされているようなのです。 #pragma once/#ifndef myapp_inc~形式も試したのですが、変化がありませんでした。 myapp.hは、他のヘッダファイルからも参照されています。 これは、普通の事なのでしょうか。 入門中なので、正常な範囲なのか、異常なのかがわかりませんorz よろしくお願いします。
>>495 int A::a; は定義。定義はプログラム中で一回だけでなければいけない。
この定義が書かれたヘッダを複数のソースファイルでインクルードすると、
定義が繰り返されるので、結果としてエラーになる。
>>496 ありがとうございます。
#pragma onceや#ifndef~の内側なら問題ないかな、と思っていたのですが、だめだったのですねorz
ということは、class b{static const int b=1;};とかもダメかな、と思って試してみたら、問題なし・・・
つまりは、同じクラス定義はオブジェクト上に複数存在することができて、静的なメンバ変数とかのインスタンスが複数あると、まずいということなのでしょうか・・・
staticなメンバ関数とかは・・・と考えると、泥沼にはまりそうです。
奥が深い...orz
最近の入門者は、いきなり#pragma onceや#ifndef~なんて使うのか
>>497 static constは整数型のときだけenumや#defineから置き換えられるよう、そういう風にクラス内で初期化できる。
(その場合cppファイルに定義を書く必要はなくなる)
>>499 きみみたいな優秀な新人がうちにも欲しいよ
>>501 俺が行ったげる。
やべ、新人でも優秀じゃねえや
俺はもっと優秀だよ
>>497 ようするにヘッダファイル内で実体を作っちゃダメ。
型とか関数とかの宣言だけにしとけばいい。
マクロでごまかして変則的な作りにすることはできるけど、
あまりオススメできない。
そんなあなたに__declspec(selectany)
506 :
デフォルトの名無しさん :05/01/30 23:47:07
質問です。 以下のようなコードを書いたところ、 "構造体または共用体中にサイズが 0 の配列があります。" とエラーが出ました。 原因はfunc()で宣言された"A<N-1> a;"で、 順次N-1のクラスを展開(?)していくことになり 最終的にN=0のものを展開してint array[0];としてしまうことにあるようです。 template <int N> class A{ private: int array[N]; /* 中略 */ public: /* 中略 */ int func(){ A<N-1> a; if(N==1) return0; /* a使ったなんらかの処理。途中a.func()等の値を使う*/ return hoge; } } テンプレートを使った再帰的な処理をしたかったのですが なにかよい書き方は無いのでしょうか。 ご教授お願いします。 環境はVC++5.0とg++です。
>>506 何したいのか今いちわからないけどこんな感じ?
テンプレートの特殊化がコンパイラによっては通らないかも
template <int N>
class A{
private:
int array[N];
/* 中略 */
public:
/* 中略 */
int func(){
cout << N << endl;
A<N-1> a;
/* a使ったなんらかの処理。途中a.func()等の値を使う*/
return a.func ();
}
};
template <>
class A <1>{
private:
int array[1];
/* 中略 */
public:
/* 中略 */
int func(){
cout << "1" << endl;
return 0;
}
};
>>500 ,
>>504 ありがとうございます。
多重インクルードの回避の方法があり、それを適用しているにもかかわらず、定義が複数回行われてしまう、ということが不思議でしたが、そういうもんなんだと理解することにします。
コンパイラオプションで、ソースだけ出力、アセンブリだけ〜等をして、解析できるスキルがあればいいんですが、とても・・・orz
C++、奥深いです。
>>508 プリプロセッサはコンパイラの前段階で実行されるのー にゃんにゃん
たぶん、というか間違いなく、 #includeによって何が行われるかと、 分割コンパイルというのがどういうものなのかを 正確には理解していない。 アセンブラがどうこう言い出す時点で、極めて先行き不安。
わー、英雄にゃんにゃんだ!にゃんにゃんが来たからもう安心だー
>>509
>>511 キミたちのプログラミングの平和はボクが守るよー にゃんにゃん
>>509-510 includeは単なるテキスト置換で、ルートとなるcppファイルからツリー状にヘッダが展開されてって、結果として得られたクラス定義等がつまってるcpp??をアセンブリに変換して・・
実際のインスタンスは、cppに書いてあるから単一だけど、ヘッダでのクラス定義等は重複しうる。
で、最終的なリンクにおいて、未定義な部分と結合される・・・
って感じで理解してるんですが、だめですかorz
どっかのサイト斜め読みしたうろ覚えな記憶で・・・ あ。
そっか、最終的に結合されるときは、差分だけを結合するわけじゃなくて、機械的な結合だから、ヘッダ内に何らかの実体があると複数回、それが存在することになって・・・・
という脳内補完が降臨したんですが、いいのでしょうか・・・
--test1.c-- int main() { return 0; } --test2.c-- int main() { return 0; } この2つを合わせて実行ファイルを作ろうとするとエラーになる。 それと同じ。
では問題、 a.hに void func(); static int a; と書かれているとして、 a.cpp,は #include <iostream> #include "a.h" int main() {std::cout << a; func(); std::cout << a; return 0;} b.cppは #include "a.h" void func() {a = 1;} だったとしよう。 さぁどうなる。
簡単なことをわざわざ難しく考えてなんとかしようとする人を 俗に「センスがない」と言う。 ちょっと前に別スレで sprintf一発で済むところをstrcatを組み合わせて ごちゃごちゃやっている人がいたが、それと同じ。 ポインタを難しいものと考える人もこの部類か。 もちろん、「センスのなさ」は ある程度は「慣れ」でカバーできる。
>>515 なんか僕への問題っぽいですね。ありがとうございます。
初期化されてないaが出力されてから、1が出力される・・・・?
>>517 グローバル変数は、静的かどうかに関わらず0に初期化される。
静的変数は、コンパイル単位ごとにスコープを持つ。
従って、0が出力されてから、0が出力される。
仮にstatic int aではなくてただのint aなら、同じ名前のオブジェクトがそれぞれのコンパイル単位に存在し、
それらがグローバルスコープを持つためにリンケージエラーが起きるはず。
>>499 そのレベルでModernなんか読んだら大変なことにならないか?
>>513 >includeは単なるテキスト置換で、ルートとなるcppファイルからツリー状にヘッダが展開されてって、結果として得られたクラス定義等がつまってるcpp??をアセンブリに変換して・・
>実際のインスタンスは、cppに書いてあるから単一だけど、ヘッダでのクラス定義等は重複しうる。
>で、最終的なリンクにおいて、未定義な部分と結合される・・・
>って感じで理解してるんですが、だめですかorz
その理解で大体正しい。
関数や変数の定義は一つの翻訳単位(#includeが処理された後のソースファイルのことね)
にしか存在してはいけない。
一方、型(struct, class, enum, typedef)・inline関数・templateの定義は複数の翻訳単位に
出現しても良い。
例外として
>>500 が指摘していることがある。
>そっか、最終的に結合されるときは、差分だけを結合するわけじゃなくて、機械的な結合だから、ヘッダ内に何らかの実体があると複数回、それが存在することになって・・・・
>という脳内補完が降臨したんですが、いいのでしょうか・・・
うん。
>>519 あの本はtemplateの知識さえあれば読めるんじゃないか?
スレちがいな気もするんですが C、C++とかWindowsプログラミングに出てくるマクロについて詳しく知りたいんですが どうしたらいいでしょうか? そもそもマクロが何なのかもわからない状態で、本とか読んでても#define N 100ぐらいしか説明が無いので 行き詰まってます。
>>521 MSDNやPlatformSDKのドキュメント
それで出てこなければヘッダをgrepしとけ
そんな程度で良いんじゃない?
プリプロセッサマクロについて知りたいならまともなC/C++の解説書読め。それで解決する
>>521 あと、#ifとか#if definedとかと組み合わせて使えれば普通は十分かと。
折れはそれで40年間不便なかった。
>522-525 即レスありがとうございます。 MSDN読んで足りなかったときは専門書読んでみます。
メンバ関数ポインタなんですが、 VC++.net2003ではコンパイルして動くみたいなんですが gcc バージョン 3.4.0だとコンパイルエラーで怒られます。 gccでメンバ関数ポインタは使えないんですか? #include <iostream> using namespace std; class CTest { public: void func(); void funcCall(); }; void CTest::func() { void (CTest::*fp)() = funcCall; (this->*fp)(); } void CTest::funcCall() { cout << "hogehoge" << endl; } int main(void) { CTest t; t.func(); return 0; }
漏れの脳内コンパイラによると >void (CTest::*fp)() = funcCall; ん?何これ意味ワカンネ だとさ
>>527 自己解決
void (CTest::*fp)() = funcCall; を
void (CTest::*fp)() = &CTest::funcCall;
に変更したらうごきますた。
>>529 Modern C++ Design
楽しいよ
>>528 クラス CTest のメンバ関数 (引数なし、戻り値なし) を指すポインタ fp に
funcCall を突っ込む。
…で
>>527 よ。
エラーの位置と内容くらいは書こうや。
ここで出てくる質問の多くって、エラーメッセージ読めば一発で見当がつくようなのが多いんだよな。 ……なんでお前らエラーメッセージを読まないんだ!
いや、初心者なら普通VC++使うからエラーは日本語だろ('A`) しかしなんなんだろうね。ものすごくナチュラルに無視してるんだと思うけど。
エラーメッセージを読んでも意味が分からないとか?
心のフィルタがかかってて目に入らないんだと思う そういう人はそもそもプログラミングには向いてない
538 :
デフォルトの名無しさん :05/02/01 09:33:58
>>536 慣れないとさっぱり意味判らん、てのはあるだろうね。
それはまあしょうがないにしても、コードだけ見せて
「どこかがおかしい」としか言わないってのは
(初心者かどうかとは関係なく)
人にモノを訊ねる態度じゃないよなぁ、と思う。
>>538 都合の悪い評価に対して何も言い返せないからって
そんなに頭の悪い切り返しに走らなくても…(^_^:
>>539 ソースを晒さず「どうしたら良いですか?」よりはまし。
テンプレートがらみのエラーメッセージは
慣れてないとホントに呪文にしか見えんしな。
すみません、初心者なんですが、何から始めれば良いかわかりません。 何をすればいいのでしょうか?
アサートとかアサーションってなんなんでしょうか? 論理エラーをチェックする関数らしいんですが
>>545 アサルトの訛りだよー つまり攻撃するって事だね。プログラムからの攻撃だお。
・エラーメッセージを読む ・ぐぐる これだけ知ってれば10秒で解決するような質問を投げる人間の多いこと多いこと
それらを頼りに10秒で解決できるようになるまでには ここで質問する以上のコストがかかるのですから、 質問するという選択は実にまっとうだと思いますが? :-)
>>548 基礎がたりない。
下らない質問している時間があったら基礎をしっかりと抑えておけ。
そしてこのスレは用済みだ。
>>548 2chで質問出来るならググるのも簡単だろ。
むしろ、ググる方が簡単で早いだろ。
551 :
デフォルトの名無しさん :05/02/01 16:45:57
12 :Now_loading...774KB:04/06/23 10:56 ID:??? 自分SEっぽい仕事してるんですが・・・ 要は言われたものを作る仕事です。 言われた以上のものを作るのがプロってもんだと理解はしてますよ。 けど、言われた通りに作っても文句言われるんですよね。 言われた方向で、言われたレベル以上のものを作っても文句言われるんです。 要は、最後の最後で「方向が違う」って言うんですよ。 理不尽でしょ。 嫌になっちゃうでしょ。 FLASHで作品を作っていて、何が楽しいかというと、 自分で考えて、自分がいいと思って、時には制約により妥協しつつも、自分の思いで作品を晒せる。 だから、作品に対してはどんな辛らつなことを言われても甘んじて受け入れられるんですよね。 もちろん一方で楽しんでくれるひともいるからなんですが。 何か疲れた頭で書いたんで文章変なところもありますが、許してください。 別の話ですが、いろいろ言葉を調べたんですが、 「クリエイター」ってのは、言われた方向で、言われたレベル以上のものを作る人を言うそうです。 業種によっては、「エンジニア」もこれに当たるのかな。 自分の良いと思ったもの作り、それを評価してくれる人に提供するのが 「アーチスト」だそうです。 「職人」っていう言葉は前者の「クリエイター」を意味する言葉だそうです。 でも、ここ板の「職人」は、後者の「アーチスト」の類だと思うのです。
よくchar型の配列をchar[126],char[256],char[1024] とか2乗の数をよく利用しているのを見ますが、 2乗の数を用いると何か利点があるのでしょうか?
>
>>555 2バイト文字対応なら1024よりも1000の方がスッキリしていていいような
1kbyte = 1024 だからじゃないの?
>>552 マイコン時代はチップの容量が 4k とかだったから、
&h0000〜&h0FFF まではチップ0
&h1000〜&h1FFF まではチップ1
とかだったのよ。チップをまたぐと極端に遅くなったりアライメントが
ズレたりするもんだから、プログラマも領域を確保する時はチップを
またがない様に組んだものさ。その名残りさね。
仮想メモリのページサイズが2^nだからとか?
メモリって1000確保するのと1024確保するのでは 実際は同じだけのメモリを貰ってるから 結局1024貰ったほうがお徳…とかどっかで聞いた気がする まぁ、上はあんま当てにならんけど 10進数で割り切れるよりも2のn乗で割り切れたほうが 情報量を計算しやすかったりなんだりで好む傾向にある
実行ファイル単体を作って実行した場合と 同じソースをdllにして、Javaから呼び出し->実行を行った場合で 実行結果があまりに異なる現象が起きてます(ノД`) dll内でスレッドを分けているわけでもなく、 メモリリークが発生しているわけでもなさそう(STL酷使でポインタは皆無) なんですが、他にどういったケースが考えられるでしょうか? コンパイラはVC7.0,7.1,MinGWで、実行ファイルでの結果はどれも期待通り得ています。 また、Javaは相方が作ったもので、私自身は詳しくありませんので、 なんとなく構文理解ぐらいしかできません。 エスパー待ちになりそうな質問で申し訳ありませんが、 経験談などでも構いませんので、何かヒントになりそうなもの、ご教授ください よろしくお願いします。
>>561 呼び出し規約が違う
とりあえず、引数をそのままどっかに出力する関数書いて確認してみ
アドレス貰ってるつもりが値貰ってたりその逆だったりもありえるっしょ
びっぐてぃんぽ りとぅてぃんぽ の違い。
>>562 ありがとうございます。
ひとまずひたすら値を調べてみます。
568 :
デフォルトの名無しさん :05/02/01 22:32:15
質問です。XP、VC++ 6.0 です。 CString 型 str の値によって大量の分岐を行ないたいのですが、 switch (str) { case "い": 〜 case "ろ": 〜 case "は": 〜 } とすると、 〜.cpp(61) : error C2450: switch式の求める数値の型 'class CString' が不正です。 この変換を実行可能なユーザー定義変換演算子がないか、または演算子を呼び出せません。 と怒られました。 CString 型の値によって分岐するには、if 文を並べるしかないでしょうか。 もしくは、キャストか CString 型のメンバの何かを使うかなどでうまく switch 文を使うことが出来るでしょうか?
>>568 case "い":
なんてのは
const char str_i[]="い"
case &str_i
とみたいなもんなので無理です
ifを書き連ねてください
つD言語
>>569 CString 型うんぬんの前に "い" 自体に問題がって何で気づかないんだよ俺ヽ(`Д´)ノ
ありがとうございました。
>>568 "い"←これ、何型ですか?
char型の値が2つ並んでいますね。
CString("い")←これはCStringクラスのオブジェクトです。
>>568 因みに、switchで扱えるのは整数型のみ。
>>571 CStringは型ではない。凍んどけ。
575 :
デフォルトの名無しさん :05/02/01 23:00:54
printfの第一引数を、動的にコマンドライン引数から指示して 標準出力にて表示するコマンドを作ろうとしています。 xxxx.exe set SIZE=%s のように実行すると printf("set SIZE=%s", strA); となるような。 ところが"%s"を含む文字列がうまく操作できていないようで 次の例ような現象が出ています。 (LSI-C試食版を使用しています) int main(int argc, char *argv[]) { int iCnt = 0; char sAllArg[256]; char *bufP; bufP = sAllArg; while ( ++iCnt < argc ) { bufP = stpcpy(bufP, argv[iCnt]); *(bufP++) = 0x20; } printf(sAllArg, "##", "@@"); } ここで「xxxx.exe aa%s bb%s」を実行して 期待する表示内容は「aa## bb@@」なのですが 「aas」とだけ表示されます。 ぐぐるとしても、検索するキーワードすら思い浮かびません。 なにかヒントをお願いします。
576 :
575 :05/02/01 23:04:31
長文すいません
すいません。自己解決しました。
>>578 プリミティブな型以外は型とは認めない。
>>752 >"い"←これ、何型ですか?
「const char *」型
アホっていうかどっかの学生さんなんじゃないの?
>>582 どこの学生さんのことを言っているのか見当もつかないんだけど…^^;
"あ"を2byteの整数として判定すればいいんだよ。
いや、俺が、俺が・・・
ゴガギーン
ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい
>>585 「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
>>585 反論してみろや!おら!
できないのか?
え?だったら謝れやッ ボクが間違っていました。ごめんなさい。ってな。
ギャハハハハッうぇっっwww
>>593 ボクが間違っていました。ごめんなさい。ぐすん
>>589 英語も読めない厨房に、
ソース出すだけ無駄。
いますよ、もっといじめて、ゾクゾク
const char * だと思うんだけど違うんですか ネタだったらすまん
>>598 cout << (typeid ("い") == typeid (const char *)) << endl;
今更他人面して聞きにきてんじゃねーよ
cout << typeid ("い").name << endl; ??
.BSS
リテラルだろ、ぷ
ISO/IEC 9899:1999(C99規格) 6.4.5 String literals -5より ... For character string literals, the array elements have type char, ... ISO/IEC 14882:1998(C++規格) 2.13.4 String literals -1より ... An ordinary string literal has type “array of n const char”...
それは、でも、書き換えできるかも?、オブジェクトポインターは定数 なのは確か、
>>606 ISO/IEC 9899:1999(C99規格)
6.4.5 String literals -6より
If the program attempts to modify such an array, the behavior is
undefined.
ISO/IEC 14882:1998(C++規格)
2.13.4 String literals -2より
The effect of attempting to modify a string literal is undefined.
この二つに凹んだってことかw
早いとこ、文字数UTF実装しろよ、だな
>>611 字形とか気にしなければいいんじゃない?だめか・・・
複数のスレッドから同一のグローバル変数に代入、 もしくグローバル変数を参照した場合、エラーが起きる場合とかありますか?
>>613 そういうことしても突然プログラムが終了するということはない。
なぜなら結局のところプロセス・スレッドの同時実行なんて、
1つのCPUが次々と切り替えながら順に実行しているだけだから。
だからと言って何も考えずに実行すると作業中の中途半端な
オブジェクトを操作することになってしまって鼻から悪魔が(ry
なんてことがあるから、複数スレッドから同じグローバル変数を
扱おうとするときはクリティカルセクションとかスレッド間の同期を取り、
同時にアクセスすることの無いようにするのが普通。
あります。
>>614 CPU2個積みとかも想像しておいたら?
まぁ、どっちにしろ2つ以上のスレッドで扱うデータは一つのスレッドで処理中は
他のスレッドからアクセスしないようにしないとデバッグが大変になる
しかし、ミスるとデッドロックの危険性もあるから
なんつうかマルチスレッドは嫌いですorz
CPUいくつあっても単純な読み書きのどっちかなら別に壊れたりしない。
cpuの数は本質とちゃう。複数のcpuでも同じだって。 ていうか共有メモリ型の分散コンピューティングやった事あるひといるの?うぇっっwww
ダイアログととメインウィンドウのプロシージャって2つになりますよね その場合互いに1つのグローバル変数を参照する場合は排他制御はしなくてもいい? マルチスレッドとは関係ないですけど・・・マルチスレッド以外で排他制御する場合などないですか?
>>619 スレ違いだし、それに今までの流れでなんでそんな
ことも理解出来ないんだよ。池沼じゃあるまいし。
>>617 Zaurus上でのJava開発したことがあるけれど、簡単な読み書きで簡単に
フルリセットかかったりしたぞ。同期採るのがスッゲー面倒くさかった。。。
C/C++の話題ではないのは確か
626 :
デフォルトの名無しさん :05/02/04 21:42:43
質問いいですか? クラスを分割してコンパイルするときに、 ヘッダとクラス定義部にファイルをわけることが多いと思いますが、 これは何故でしょうか? 定義部もヘッダファイルのほうに書いてしまうと、 何か都合のわるいことがあるんでしょうか?
>>626 単なる慣例で深い意味はないよ。まあちょっとコンパイルが遅くなるくらいかな。
629 :
デフォルトの名無しさん :05/02/04 23:47:06
>>626 そのクラスを使いたい人(というかプログラム)にとっては定義などいらない。
いらないものをincludeで読み込ませるのは無駄。
インスタンスも作らずメンバも参照しないならヘッダをincludeする必要すらない。
そうだ、Cの話をしよう。
♪ Cカップ好きは正解に近い 最も限りなく正解に近い でも、Cに満たない女性も多いので 油断は禁物で〜す
Cガール
お答えありがとうございました。 参考にさせていただきました。
いいよなCは、 大好きだった彼女はAA65だった
フフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフフ
\0がない
638 :
デフォルトの名無しさん :05/02/05 18:08:14
ストリームって何ですか?
ガイア!オルテガ!マッシュ!
俺を踏み台にぃぃぃぃぃぃぃ!!!
>>638 直訳すれば「流れ」。コンピュータ用語では、先頭から順々に、シーケンシャルにしかアクセスできない
(またはランダムアクセスのコストが非常に高い)データのことを指す。
以上、アスキー デジタル用語辞典より。
Jet Stream
creek:小川 stream:川 river:河
large(great) river:大河
ちょっと質問。 VCTKを使ってるんだけど、cl.exeのコマンドラインオプションを デフォルトで指定する方法ってない? 警告とか最適化とかを指定しておきたいんだけど。 ちょっとテストプログラムで試すのにmakefileは作りたくないし 環境変数CFLAGSとか指定してnmakeを動かすか バッチファイルでも作っておくのが妥当なのかな。
バッチが妥当だろうね
普通環境変数とmake
教えてください。 namespaceについてのですが、 どのnamespaceにでもアクセスできる変数(globle変数)を作りたいのですが。 それは無理なのでしょうか? 今、下のようなsrcでコンパイルをかけているのですが、 mの値を参照できずコンパイルエラーになってしまいます。 -- src --- #include <iostream> namespace N{ double value=10.00; } namespace M{ double value=m; <-参照できない } double m=99.9; int main() { std::cout << "N::value= " << N::value << std::endl; std::cout << "M::value= " << M::value << std::endl; return 0; }
>>648 これならできる。
#include <iostream>
namespace N{
double value=10.00;
}
double m=99.9;
namespace M{
double value=m;
}
int main()
{
std::cout << "N::value= " << N::value << std::endl;
std::cout << "M::value= " << M::value << std::endl;
return 0;
}
ポカーン
スマネイ、凡ミスだった
Windowsで開発を始めて4月。 とりあえず疑問をぶつけさせてください。 なんでBMPは逆さで、使いもしないデータが多いのでしょう。 設計者は何でこんなのにしたんでしょうか。
>>648 これならできる。
#include <iostream>
namespace N{
double value=10.00;
}
double m=99.9; <--- (1) この変数のnamespace名はなんになるんですか?
namespace M{
double value=m;
}
int main()
{
std::cout << "N::value= " << N::value << std::endl;
std::cout << "M::value= " << M::value << std::endl;
return 0;
}
(1)の質問よろしくお願い
654 :
デフォルトの名無しさん :05/02/06 12:58:25
「namespace名」って何?
>>652 リトルエンディアンとビッグエンディアン
653の答えは654だったり(w
エンディアン嘘つかない
>>654 、659
マジだ、"::m"で参照できる
有賀と産
662 :
デフォルトの名無しさん :05/02/06 22:43:52
はじめまして。Cの入門者です。 いまとあるプログラムを書いているのですが、 int i=87654321: (←8765万4321) char j[9]; となっているとき、aを1文字ずつ文字配列にぶちこむにはどうすればいいでしょうか? つまり、 j[0]:8 j[1]:7 j[2]:6 ・・・ としたいのです。
sprintf
上からやるのか…面倒だなぁ int ii,k = 10*10*10*10*10*10*10*10*10; char j[9]; ii = 0; for(ii = 0;ii < 9; ii++){ j[ii] = i /k; k/=10; } まるでテストしてないが
と 誤:j[ii] = i /k; 正:j[ii] = i /k +'0';
>>662 sprintf(j, "%8d", i);
>>652 >なんでBMPは逆さで
ビットマップではy軸の上方向を正とした座標系なのに対し
ディスプレイでは下方向が正だからそうなっちゃったんじゃないかな?
>使いもしないデータ
パディングのことだと思うんだけど
多分4バイト境界に合わせとくとメモリアクセスが速いとかそんなんだと思う。
669 :
デフォルトの名無しさん :05/02/07 01:22:31
VC.NETでダイアログベースのアプリを作っています。 ダイアログを任意の数だけ表示させたかったのでポインタでCDialogを宣言して new→create→ShowWindow(SW_SHOW)の手順で表示させているのですが 消すとき、OnOKまたはOnCancelでDestroyWindowしてPostNcDestroyで delte thisしているのですがメモリが完全に元に戻りません。(少し残ります) これはこういうもんなんでしょうか
671 :
デフォルトの名無しさん :05/02/07 01:42:29
超初心者なんですが質問させてください。 #include <stdio.h> main() { int data[10],i; for(i=0;i<10;i++){ printf("%2d件目の入力:",i+1); scanf("%d",data); } printf("\n配列内容一覧\n"); for(i=0;i<10;i++){ printf("%2d件目:%d\n",i+1,data); } } これで入力と出力の値が変わるんですけど、どこが間違ってるんでしょうか。
- scanf("%d",data); + scanf("%d",&data[i]);
-printf("%2d件目:%d\n",i+1,data); +printf("%2d件目:%d\n",i+1,data[i]);
674 :
デフォルトの名無しさん :05/02/07 02:11:16
配列の要素番号が偶数でアクセスすると プログラム落ちるから、おそらく型の指定が間違ってると 思い、テンプレート使ってるんでsizeof(T)と関数の呼び出し側引数sizeof(型) で調べてみたら全く同じ数値出ました。 template <class T> void DataLoad( T* pData, int max ) { for(int i=0; i<max; i++) { pData[i].Load(); } } のようなコードです。 アクセス違反だと思われるんですが...。というか、そのメソッドに 行く前に落ちてるからアクセス違反に間違いないと。 偶数で落ちるってのも気になる。
>>675 言ってることが意味不明だけど、そのコードで
落ちてるんだったら配列をポリモフィズムに扱ってるからじゃないか?
例えば
class Base {
};
class Derived : public Base {
};
Base* p = new Derived[10];
DataLoad(p, 10);
こんな風に
確かに継承使ってますが、ポインタ使わずともダメです。 キャストしても同じ
>>677 言ってることの端々が意味不明だから、
ごちゃごちゃ言わずにソース晒せ。
オブジェクトの生成から関数呼び出し、
あとはsizeofでテストしたコード、が重要。
デバッガで追うだけであっさりわかりそうな気がする
配列の要素毎の確保サイズが足りないんじゃないか?
681 :
勉強中653 :05/02/08 02:03:28
#include <cstdio> class CTest { public: void Func(); void Func2(); }; void CTest::Func() { void (CTest::*fpFunc)() = Func2; //<-ここでbcc32は、”メンバ関数は、アドレスまたは値を入れてください"とのエラーが出る。 (this->*fpFunc)(); } void CTest::Func2() { printf("--\n"); } int main(){ CTest c; c.Func(); return 0; } このsrc、cl.exe(vc++toolkit)じゃコンパイルできるけど、bcc32.exeではコンパイルできない。 昔の仕様では、静的メンバ関数でないと、関数ポインタに設定できない仕様があったらしいことまで調べたけど bcc32.exe 5.5.1は、あまり使わないほうがよいのでしょうか
むしろ、bcc独自拡張の__closureが影響してる。 関数名だけを取り出すと、thisとメンバ関数のセットとして扱われる。 どんなコンパイラでも通すには &Func2とすれば良い。
- void (CTest::*fpFunc)() = Func2; + void (CTest::*fpFunc)() = &CTest::Func2;
684 :
勉強中653 :05/02/08 02:34:30
>>682 ,683
ありがとうございました。解決しました、明日Unixでも試してみます
685 :
超初心者 :05/02/08 03:22:21
コマンドラインから単語を入力して、 二分木を用いて単語を登録するプログラムを作りたいのですが、 どうやって適切な関数を作ればいいのか分かりません。 メモリを確保する(malloc?)ことや、->を使うと良いのはなんとなく分かるのですが使い方がどうも・・・ あと単語を辞書順に並べるのはstrcmpを使おうと思っているのですが問題ないでしょうか? ↓ここで止まってます; #include <stdio.h> struct node { int data; struct node *left; struct node *right; }; int main(int argc, char argv[]) { int i; struct node *top; for (i = 0; i < 10; i++){ kansuu()+ } exit(0); }
686 :
超初心者 :05/02/08 03:23:34
コマンドラインから単語を入力して、 二分木を用いて単語を登録するプログラムを作りたいのですが、 どうやって適切な関数を作ればいいのか分かりません。 メモリを確保する(malloc?)ことや、->を使うと良いのはなんとなく分かるのですが使い方がどうも・・・ あと単語を辞書順に並べるのはstrcmpを使おうと思っているのですが問題ないでしょうか? ↓ここで止まってます; #include <stdio.h> struct node { int data; struct node *left; struct node *right; }; int main(int argc, char argv[]) { int i; struct node *top; for (i = 0; i < 10; i++){ kansuu()+ } exit(0); }
>>686 初心者を超えたらもう、歓迎はされないのだよ。
先ずは二分木を使わないバージョンでも作ってみたらどうかね。
それから、厳密に辞書順である必要があるならstrcmp()だけでは無理だね。
strcmp は辞書式の順序ですが何か? まあ初心者を超えた超アホの意図するものではないと思うけど
不思議なのが全角ひらがなの場合濁点のある文字が辞書順にならない (元々コードがそのようになっていない)こと。
>>688 ほほぉ、あんたの辞書では'a'は'Xray'より後にあるのかね。
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF|_CRTDBG_LEAK_CHECK_DF); でリークチェックしたんですが、ファイル名、行番号が表示されない。 どなたか原因分かる方いらっしゃいませんでしょうか。 リーク情報は表示されますがファイル名、行番号のみが表示されません。 #define CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h> の順で記述してます。 _CrtSetDbgFlagマクロは、プログラムエントリポイント始めに記述。 環境依存(VC++)ということで促されてこのスレで 質問です。
>>692 ここは環境依存OKではあるがC/C++言語の話題を扱う。
開発環境だのデバッガだのの操作はその環境のスレに逝ってくれ。
VCスレは
>>2 あたりにリンクがあるはず。
★初心者にVisual C++を教えるスレ★
は次スレ立ってないんだよな。
俺立てられないから誰か立てて。
で
>>692 は_CRTDBG_MAP_ALLOC
C言語での行列について質問があります。 行列の要素数(行数、列数)の最大値はいくつなんでしょうか? double型で要素数90万個(3000行300列)は可能でしたが、 900万個(3万行300列)ではcore吐いて落ちるので、 最大値はこの間にあるだろうということはわかりました。 また、最大の要素数は変数型に依存するのでしょうか? OSはFreeBSD4.9Rでcc 2.95.3を使用しています。
メモリとアドレスが許す限りいくらでも。
>>695 動作環境に依存するので一概には言えない
malloc でメモリを確保できなかった場合はヌルポインタが返ってくるので
それで判断すべし
>>695 core吐いて落ちるのは別の原因の可能性もあるぞ。
>>696 言語依存だと大きな勘違いをしておりました。
どうもありがとうございました。
入門書を一通り終わらせたら次なにやればいい? おまいらみたいに、ハイレベルになりたい。
>>701 とりあえず、大会社の下請けプログラマを10年やれ
嫌なら転職しろ
間違えて子供作ってしまいました
抹消(delete)か解放(free)か……
abortが正解
人生をabort
現在200ms周期でログ(CString型)を保存するスレッドから データをファイルに書き込むスレッドを動作させていますが ファイルの書込みの時点で例外エラー(未定義エラー)がたまに発生します。 データを書き込むスレッドはログが300件(200kバイト程度)たまったら 動作させているのですが、ファイルの書込みでエラーがでているようです。 ちなみにファイルは書き込みスレッドが呼ばれるごとに違うファイル名で作成しています。 エラーなく書き込みさせるにはどうしたらよいでしょうか。 VC.NET2003 言語はC++です
>>709 まさかストリームを閉じてないとかってことないよな。
>>709 「例外エラー(未定義エラー)」 って何だよ。
>>710 閉じてます
>>711 CFileException::generic 未定義エラー
のコードのことです。
C++関数の多重定義(オーバーロード)について 詳しく載ってるサイト教えてくださいな コンパイラの型チェック方法など知りたいです
簡単だよ、関数名に引数の型をつなげて行くだけ。
>>715 ありがとう。
でもエラーで見れない...。しばらく待ってから見てくださいって
表示されたから、また今度見てみます。
>>715 ローカルに保存できないんだね。
有能なプログラマを育てる為にもなんとかならんかねぇ。
ローカルキャッシュ
というかまぁ日本語でなければならない時点でプログラマとしては 「有能な」という接頭辞をつけるのが憚られる訳だが。
また古いタイプの勘違いした人がいるな。
C++のコンパイラってどこで手に入るの?
>>721 Borland C++ Compiler 5.5 無償ダウンロードサービスページ
>>721 ググれば紹介ページが見付かるだろ。しね。もう来るな。
VC++6.0 ProとVC#.net2003 standardを持ってるんですが、 4万数千円払って、VisualStudio.net proに格上げする価値はあります? 現状ではVC++7が目的になるわけですが(VB.netやVJを使う気は無いです)、 VC++7だと6に比べて画面が作りやすいとか、C++.netにソースレベルで持って行けるとか 利点があるのでしょうか?
VC++7.1は既にゴミ同然なVC++6.0とは比較にならないほどC++標準準拠度が高いので最新のナニなライブラリが使い放題。
VC++ 6.0って標準からかけ離れてる部分多いらしくて テンプレートクラスとかでコンパイル不可になる可能性がある んでboostとか使うつもりなら7.1にすべしってことじゃねぇかな
謎のHNが入ったorz
>>727-729 なるほど。そんなに文法レベルで異なるんですか。
4万円ちょっとのステップアップを買おうかと思います。
結局 BCC や Cygwin+GCC とかに落ち着くんじゃねーの? Borlandが出したTurboCのデキの良さに焦ったM$が出したQuickCなぞ、 バグだらけな上にANSIC準拠じゃないわ遅いわ重いわバグだらけだわで 使いモンにならんかったぞ。 汚名挽回で得意の改名をして出したMS-Cは結局最後のバージョンまで 酷い使い勝手のままだったし。
弘法は筆を選ばず。
いまどきbccなんて本気で言ってる奴がまだいたのか。
そうか、汚名を挽回するのか。
挽回しちゃったよね
名誉挽回 汚名返上
MSは汚名返上したためしがないからな。
Longhorn でやってくれるさ
>>736 挽回なんかしてないよ。
汚名をすすいでないから。
挽回する必要はないもん。
M$は常に正しいですが?何か?
bool MS() { return true; }
const bool MS = true;
enum { MS = 1 };
#define MS true
class MS { bool operator()() const { return true; } };
747 :
デフォルトの名無しさん :05/02/11 21:20:08
C言語を何も分かってない素人です。 printf("\n 出力ファイル名を入力してください。\n "); scanf("%s",&ofn); これだと、ファイル名にディレクトリや拡張子を書かないと思いの場所に思いの形式で保存できません。 ディレクトリと拡張子をプログラムのほうで固定する方法をご教授ください。。。orz
strcat
winなら入力した文字列を後ろからスキャンして'.'ガあれば拡張子と見る。 さらに'\'があればそこまでがファイル名。 で、あらかじめ用意したパスと拡張子を前後に加える。
さっそくありがとうございますorz
>>748 おかげさまで拡張子に関してはうまくいきました。ありがとうございます。
これの逆のやり方があればディレクトリもうまくいきそうなのですが・・。
>>749 winですが、、、すみません。俺のボンクラ頭脳では理解しきれませんでしたorz
>>750 漏れの持ってる入門本にはそのような関数は・・・orz
int _tmain(int argc, _TCHAR* argv[]){ const char* lpszBuf = "全角スペース→ " ; int i = 0 ; do{ if((lpszBuf[i] == 0x81) && (lpszBuf[i+1] == 0x40)){ cout << "全角スペース発見" << endl ; i++ ; } i++ ; }while(lpszBuf[i] != '\0') ; return 0; } 全角スペースを発見できないです。このやり方では駄目なんでしょうか? 最終的には文字列からスペースを全て取り除く関数を作りたかったんですが 半角は問題なく出来て全角で引っかかってしまいました。
>>754 char型が格納できる値は処理系依存。例えば-128〜127のこともある。
そんなときに0x81と比較して一致するはずが無い。だから0xじゃなくて'\x'にしろ。
(まぁ、const unsigned char *にするという逃げもあるが)
でもな全角文字のあるときはなんだかんだ言ったってワイド文字が楽だ。
int _tmain(int argc, _TCHAR *argv[]) {
const char* pszBuf = "全角スペース→ ";
int i = 0;
for (int i = 0; pszBuf[i] != '\0'; i++) {
if ((pszBuf[i] == '\x81') && (pszBuf[i + 1] == '\x40')) {
cout << "全角スペース発見" << endl;
i++;
}
}
return 0;
}
C++でファイル入出力の勉強しています。、 開くファイルが存在しなかった場合はプログラムを終了させようと思ってますが、 ファイルが存在してないにもかかわらず、プログラムは終了せず、 フォルダを見ると勝手にファイルが作成されています。 ファイルがない場合、即時終了させるにはどうしたら言いのでしょうか。 ---- ソースファイル ----- #include <iostream.h> // 標準入出力 #include <fstream.h> // 標準ファイル入出力 #include <cstdio> // getchar #include <cstdlib> // exit int main(int argc, char *args[]){ ifstream fin; // ファイル読み込み // 読み込み用ファイルを開く fin.open( args[1], ios::in ); if( !fin ){ cout <<"ファイル:" <<args[1] <<"が開けません。" <<endl; getchar(); exit(1); }else{ cout <<"ファイル:" <<args[1] <<"を開きました。" <<endl; getchar(); } return 0; }
>>756 C++でexitはやめたほうがいいよ。
デストラクタが働かない。
えーーーー 知らなかったよーーーー
>>756 それで問題ないはずだけど。
ただし、exitをreturnにするのと、
#include <iostream>
#include <fstream>
using namespace std;
761 :
デフォルトの名無しさん :05/02/12 16:14:38
int a; int a; int a; int a; int main() { a = 10; return 0; } このソースがコンパイル通ってしまうことに気づいて愕然としたんですが・・・ このような表記が許されている理由がわかる人はいますか?
>>761 Cでは通るが、C++では通らないらしい。ちょっと安心した。
763 :
デフォルトの名無しさん :05/02/12 16:28:37
>761 aは再定義で同じ定義内容。 externの省略か? 多重定義はやめろ
764 :
デフォルトの名無しさん :05/02/12 16:53:17
VC++6.0でmap<string, char *> m;として m["key1"] = "data1"; m["key2"] = "data2"; と代入したら cout << m["key1"] << endl; cout << m["key2"] << endl; の結果がともにdata2になるんだがどうして???
>>756 デストラクタあまり意識したことなかったのでCと同じようにしてました。
C++でのexitはこれ以降止めときます。
>>759 ありがとうございます。うまく期待通りに動きました。
namespaceを使用しなければいけなかったんですね。
使用するしないで変わる意味がよくわからないので
namespaceから勉強しなおします。
>>765 非ローカルなインスタンスがなく、exit()の使用をmain()に限定し、main()ではインスタンスを生成しなければ問題ない。
つまり、main()をOSとのインターフェースに限定するということだね。
#include <io.h> #include <iora.h> #include <iostream.h>
768 :
デフォルトの名無しさん :05/02/12 17:46:16
>>766 ごめん、漏れの頭じゃわかんない。
もうちょっとわかりやすくしてほすい。
>>755 そういうことだったんだ
これを3日間悩み続けてました(-_-)
そもそも0x81のみでもまったく引っかからなかったので・・・
\xなんて書き方ぜんぜん知らなかったからここで聞いてよかったです
ありがとー!!
>>768 >766は、デストラクタが必要ない状況。
771 :
デフォルトの名無しさん :05/02/12 18:26:12
>>766 >非ローカルなインスタンス
は、あっても構わないと思われ
質問です。 long number; ↑の変数に入っている数字の 桁数と各桁の数字を取り出したいのですが、 どのような方法があるでしょうか。 どうかよろしくお願いします。
sprintf(buf, "%ld", number); strlen(buf);
776 :
デフォルトの名無しさん :05/02/12 19:17:45
>774 電話番号だったら文字列使えよ
>>776 ゲームのスコアなんです。
0〜9の数字の画像でスコアを表示させたいので
各桁の数字と桁数が必要になりました。
779 :
デフォルトの名無しさん :05/02/12 20:55:50
780 :
デフォルトの名無しさん :05/02/12 21:00:14
>764 ハッシュ値の衝突か? バグっぽい map<string,string>使え
781 :
764 :05/02/12 21:06:52
つーか、map<string,char*>なんかに代入してスコープ外れたときどうするつもりなのか小一時間。
stringにつっこんで取り出すときにc_strさせれば。
>>775 ありがとうございます。できました。
>>778 すぐには理解できなかったんです。すいません。
>780 map はハッシュ表じゃないぞ
786 :
764 :05/02/12 21:59:20
というかstringに変えたところでmapの動きには変化が無いわけで・・・
↑ジュン君発見
実はchar * の指している先が同じエリアだったとか?
ていうか、ほんとに
>>764 のソース だ け で テストしてるのか?
こういうケースはたいてい実際テストしたソースにポカミスがある。
>>764 リテラル渡してるのが気になるところ。
nullで終わる文字列としてコピーされるのかな?
ちなみに、
template < typename T >
void showName( T& ) { std::cout << typeid(T).name() << std::endl; }
として、
showName("data1");すると、char const [6]って表示されます(VC++7.1)。
>>790 なに寝ぼけたこと言ってんだ。
引っ込んでろ。
C++習い始めて三日って感じですな 微笑ましいじゃありませんか
【初心者歓迎】って、初心者が回答するスレだって 思ってるのがかなり居そうだな
>>791-793 ”nullで終わる文字列としてコピーされる”ってあたりがなんだけど,
全体としてそんな的外れかな?
using namespace std;
map<string, char *> m;
cout << static_cast<void const*>("data1") << endl;
m["key1"] = "data1";
m["key2"] = "data2";
cout << static_cast<void*>(m["key1"]) << endl;
cout << static_cast<void*>(m["key2"]) << endl;
ってやってアドレス確認してみたら,
0x446000
0x446000
0x446010
ってなったよ(g++ 3.4.0).
VC6ではおそらく,3つとも同じ数値になるんじゃない?
>>794 =
>>790 おまいのレベルが低すぎて話になってないってこと。
要するに書くだけ邪魔。
>>791 にも言われてるだろ。
あとやっぱりずれてんの。
せめて禿本なり一冊は良本読んで出直してこい
ruby最強なことがよく分かる。
>>795 ごめん.文字列リテラルってスタックとは違う領域に配置されるのね...
文字列リテラルは静的記憶域期間だけど、おまいはそれ以前の問題
>>794 念のために言っておくが、
その一番目と二番目のアドレスが同一なのは環境依存だぞ。
801 :
デフォルトの名無しさん :05/02/13 13:16:16
コピーコンストラクタで引数が不正だと判断できる場合って delete this;しちゃってもよかですか?いちお例外くらいは出しとくとして。
>>801 だめ。newで呼ばれたコンストラクタで例外が発生した場合、自動的に
deleteが呼ばれる。
デストラクタ呼ばれないから厳密にはoperator deleteではなかろか。
operator delete[] かもしれないぞ
レスありがとうございまっす! なるほど、Essenceパターン使えばよさそうですね。 ただ、Essence役を間に挟んでのアクセスは嫌なので、 生成したインスタンスのポインタを返そうと思ったのですが、 その場合解体責任が不明確になってしまうなぁと。 smart_ptr使えばいいのかもしれないけど、組み込み系プログラム なんでそこまでやるとおおげさな気もしてしまいます。 単純にコンストラクタで例外を発生させるだけでもよかですか?
std::auto_ptr でも大げさなの? なら仕方ないが。
>>806 例外投げるコストは大丈夫で、smart_ptrが大げさ?
珍しい環境だな。
809 :
764 :05/02/13 23:50:59
map<string,string>にしたら動きました。 理由は不明・・・
>>809 いやmap<string,string>なら期待通り(?)に動くのは当然でしょ、
問題はchar*のときの挙動なのであって。
>>764 うちの環境(BCC)なら問題なし。
VC6があるシト検証キボン。
プリプロセッサとマクロの違いがよくわからないんですが何が違うんでしょうか?
>>814 #include
#define
#ifndef
etc..
これらはプリプロセッサで、コンパイルが始まる前に実行される。
マクロとは、手続きの静的な置き換えのこと。
816 :
デフォルトの名無しさん :05/02/14 18:50:44
C言語ではさみうち法のプログラムを教えて下さい。
マルチポストには教えられません。
818 :
デフォルトの名無しさん :05/02/14 18:59:03
そこをなんとか・・・本当に困っているので。やっぱりいくら困って いてもいろんなとこに書き込むのはだめですか?すみません気をつけます・・ 時間がとにかくなくて・・・
>>818 人に聞くなら信用しなさい。
マルチポストをするということはそのスレ住人を信用していないことになります。
「静的」と「動的」の違いを教えてください。 動的に確保する、とか、、
「性的」コンパイル時 「動的」実行時
>>820 始めにこうと決めてしまったら動かしようがないのが静的、
決めた事を後でも動かせるのが動的
質問させてください。 現在C++BuilderでCpad使ってるのですが、 file1.h 関数プロトタイプ宣言 file2.c 作成した関数の定義 sample1.c プログラム本体 と作って ソースファイルをコンパイルしオブジェクトファイル作成されたのですが その後どうやってプログラムを動かすのかがわかりません。 良ければレス下さい。。。
>>823 どこかにsample1.exeができているはず。
>>814 C/C++での「プリプロセッサ」とは、
言語仕様のうち
・コメント
・#if〜 による条件コンパイル
・#include によるファイル取り込み
・#define によるマクロ置換
などを担当する部分。
C/C++で「マクロ」と言えば、このうち「 #define によるマクロ置換」で定義されるもの。
828 :
デフォルトの名無しさん :05/02/15 10:34:38
NT3.5&VC++5.0では a = (a >= 100) ? 1 : a++; が正常に動いていたのに XP&C++.NETではaの値が増えません。 a = (a >= 100) ? 1 : a + 1; とすれば動きましたが何故でしょう? 3項演算子使うなと言えばそれまでですが、 原因が知りたいのです。 宜しくお願いします。
>>828 >a = (a >= 100) ? 1 : a++;
副作用点の違い。
個人的には、こんな書き方で正常に動くと思う、
あなたの頭の方がおかしいと思う。
ちょっと割り込むけど a = a++; って、aの値を取り出してaに代入してからaをインクリメントするのか(結果インクリメントされる) aの値を取り出してaをインクリメントしてから、先ほど取り出した値をaに代入するのか(結局値は変わらない) 言語的に決められてるのかな?
>>828 a = 1 + a%100;
ではダメか?
a = a**: なんて書くアフォ始めてみた。 実在したんだな
>>833 割り算のコストと条件分岐のコスト、どっちが高いんだろう。
>>828 a++ってa=a+1っていう意味だよね?
a=(a>=100)?1:a=a+1;???
サブクラス化したエディットコントロールにn個の要素を持つ配列aを 表示してるのですが、配列aのx番目の要素にフォーカスかキャレットが 来たときにそれを判別する方法はありますか?教えてください
マルチウザ
>>839 わざわざマルチしてるか巡回して調べたんですか?w
カスは黙っとけよwww
>>838 エディットコントロールにどうやって配列を表示してるのか知らんが
(多分、ここを説明しないと誰にも判らん)
フォーカスが来たところで選択している位置を取得して、そこから
判断出来ないのか?
>>840 この上なく頭悪そうに見えるんで、「w」連発はやめておいた方が吉。
配列を表示というか変数にテキストデータを格納して表示したってことです。 フォーカスが来たときの座標を取れたとしてその位置に表示してある データの中身が1バイトだけわかればいいです。教えてください
マルチは放っとけよ
マルチじゃねぇし。カスは消えろって
わざわざリンク貼ってご苦労さまwwそれは2時間前にレスつかたkらマルチって言わないの。 わかるか?カス?w
NGWord: カス, マルチ
マルチ必死w
事前に作っておいた検索アルゴリズム応用して何とかなりそうだからもういいわ。 とりあえずこのスレにはマルチじゃないのにマルチとかほざくうざい自治厨がいるってことは頭の片隅においとく
やっとマルチが消えてくれるのか。 よかったよかった。
851 :
C++スペシャリスト :05/02/15 16:57:27
System::DateTime now = DateTime::get_Now(); String *msg = now.ToString(); int n; String a; n = 123; a = ???.Format ("n=",n); // ここのやり方がわかりません。 MessageBox::Show (msg + &a); // ここも どなたかよろしく。
>>851 Managed C++?専用スレがあるよ?
>>851 なんだそのStringクラス。
環境も書かずに判るわけねぇべさ。
>>851 まず、そこで何をしたいかを書くべきだろ。
856 :
C++スペシャリスト :05/02/15 18:43:22
環境 MS VS.NET 2003 >まず、そこで何をしたいかを書くべきだろ。 int のnをStringに変換してMsgboxに表示したいだけです。
ワラタ
>>856 で、言語は何だ?C++か?Managed C++か?
マルチをばかにしないでください〜。はわわわわ〜。
失礼します BCCでタスクトレイのみで動くプログラムを作ろうと思っています 調べたところ、MFCやVBではNOTIFYICONDATAのhwndに 自分のウィンドウハンドルをいれてるようなのですが、 これはBCCで動かすにはどのようにしたらよいのでしょうか? よろしくおねがいします
>>860 C/C++とタスクトレイのみで動くプログラムはどう関係あるんだろう。
OSは何だろう。Windowsでいいのかな…
ひょっとして池沼だったりして…
>>863 環境依存OKは分かった。初心者歓迎も分かった。で?
開発環境 と 環境依存 の区別ができてないってことかな? それはそれとして、862のような「専門スレへの誘導」は普通のことだと思うがな。
初心者向けの、環境依存したトピックもOKな『C/C++相談室』 のはずなんだが。 初心者は「環境依存したC/C++のトピック」と 「開発環境の操作方法」や 「特定(非標準)ライブラリの操作方法」 との区別がつけられない。 それはそれで仕方がないんで、そういうお客さんがきたら 専門スレへ誘導で何の問題もないはずなんだが? ま、あんまり手荒な扱いはどうかとは思うけど。 余談だけど、VBから移行した初心者は、そもそも開発環境と言語を 切り分けて考えることすら出来ないことがままある。 「開発環境の使い方覚える前にC++の基本ぐらい勉強しとけ」 って言っても何のことかまるで理解できないんだよな。
867 :
C++スペシャリスト :05/02/15 22:14:16
>で、言語は何だ?C++か?Managed C++か? Managed C++でお願いします。 「注文の多い料理店」って知ってます。 なんでもいいから早く食わせてくれーー。
868 :
C++スペシャリスト :05/02/15 22:15:48
>866 貴方の意見に賛成します。
869 :
C++スペシャリスト :05/02/15 22:18:13
貴方の意見に賛成しますから、どうぞ私の質問に答えてください。 せめて貴方だけでも。 もしそうでなければ、あなたのおっしゃていることはかなり空虚に 響きます。
>>868 そうか、ありがとう。分かってくれて僕もうれしいよ。
それならさっそく Managed C++専用スレ に逝ってくれ。
871 :
C++スペシャリスト :05/02/15 22:29:44
>870 アレだけ解りやすく言っても馬鹿だと気がつかないのか? 直接馬鹿とは 言いたくなかったのだが。
873 :
C++スペシャリスト :05/02/15 23:53:07
>お願いだから、荒さないで 下らん。お前も馬鹿か? たったアレだけの質問に答えられんのか? 能書きたれる前に答えろ。アフォー。
Cでmalloc使って双方向リスト作りたいんですけど なにか参考になる資料とかありませんか?
より適切なスレがあるんだったらそこで聞いた方が早いと思うけど。 ここで聞くのは、誘導のための入り口みたいな感じで。 で、>860 は別に移動してもらうまでもないんで答えるけど、 BCC でやる場合でも何も変わらないぞ。 不可視のウインドウを作ってしまうのが常套手段だと思う。
877 :
デフォルトの名無しさん :05/02/17 09:35:49
VCでmp3やmpeg4のストリーミングするプログラムかこうと思ってるんですが参考資料が ほとんど無くて困ってます。誰かよい資料や方法など知ってましたら教えてください。
ワープロで論文を書こうと思ってるんですが参考資料がありません。 つーくらい頓珍漢な質問だな。
参考資料がないんじゃなくて脳みそが 圧倒的に足りてないだけだろ
参考資料 → パクっていいソース と置き換えると納得。
884 :
デフォルトの名無しさん :05/02/17 12:51:06
うーん、言い方が悪かったですね。 具体的に言いますと 1、デコードされたmp3やmpeg4等はどのようにクライアントに送出 するかその具体的な方法。 2、クライアント側で受信させたデータはどのようにして再生させ ればいいのか? 3、できれば、クライアント側はブラウザでアクセスすればそれだ けで再生ができるようにしたい、その方法。 といったところです。 誰かわかりますか?
1. あなたが仕様を決めて下さい。 2. あなたが仕様を(ry 3. あなたが(ry 俺なら、そんなの再発明しようなんて思わないな。
886 :
デフォルトの名無しさん :05/02/17 13:10:05
>>885 答える気がねーんならくんな。
ていうか答えらんねーのかw
C/C++にストリーミングなんて概念があったか?
>>886 サーバ側・クライアント側共に態々自作するのなら
(どういう目的・意図があるのかは知らんが)
すべて自分で仕様を決めて実装しろ。
自作しないのなら、現存するものを使えば済む話だ。
…と言っているんだが。
そもそも、
>>884 で「具体的」とか言ってるようじゃなあ…
せめて「ストリーミング プロトコル」辺りでググってこい。
class Aを派生したクラスclassBにて A* lpA1 ; A* lpA2 ; newで生成しといて //lpA1又はlpA2のアドレスを呼び出し先に返す関数 B::GetStatus(A* pTemp) { if(何たら〜)pTemp=lpA1 ; else pTemp=lpA2 ; } B::Reload() { A* pTemp ; GetStatus(pTemp) ;//GetStatusから戻ったアドレス得たい・・けどエラー //&付けちゃうとclassAの変数入れちゃうし・・・・ //pTempの内容(classAの変数)を更新すると //lpA1又はlpA2の中身が更新されて欲しい・・・ } GetStatus関数でアドレスを返してそれをReload側で受け取って 更新内容をGetStatusで渡したlpA1, lpA2のどちらかに反映させたいんですが アドレス渡せない・・(´・ω・`) 上記のような感じを実現したいんですが無理でしょうか?
>>889 やりたいことを整理汁。
つーか、GetStatus()はA*を返せばいいんじゃないのか?
ポインタを理解できてないなら勉強し直すか、ポインタ使わずに考えろ。
生理汁
>>890 >つーか、GetStatus()はA*を返せばいいんじゃないのか?
あっ!
なんで気がつかなかったんだろう
昨日の晩から今日帰ってくるまでずっと考えてたり(^ω^;)
ありがd !!
>>892 ちなみにどうしても引数で渡したかったら、ポインタへの参照にすれば良い。
馬鹿は馬鹿なりにグローバル変数なんて使っちゃうからな。
>>894 oserrはプロセス固有のグローバル変数だろが?
出来る人は出来る人なりにグローバル変数を使う
897 :
デフォルトの名無しさん :05/02/17 18:56:39
馬鹿は馬鹿なりに、 出来る人は出来る人なりに、 ってのをよく理解汁!!
898 :
デフォルトの名無しさん :05/02/17 23:49:23
以下のプログラムで、配列や構造体の先頭のみの初期化でも、 残りが全て0になるのは、どの環境でも共通でしょうか。 #include <stdio.h> int main(void) { int hairetu[5][5] = {0}; struct Hoge{int zero; int one;}; int x, y; struct Hoge hoge = {0}; for(y=0; y<5; y++, puts(""))for(x=0; x<5; x++) printf("%d ", hairetu[y][x]); printf("%d %d\n", hoge.zero, hoge.one); return 0; }
899 :
デフォルトの名無しさん :05/02/17 23:51:22
否
>>898 直接関係ないけど、初期化の意味を調べ直した方がいいよ
残りの要素は0で初期化されることが保証されてたと思うけど。
902 :
898 :05/02/18 00:33:43
>>902 言葉の意味を調べろ、って事。
0にするだけが初期化じゃない。
905 :
デフォルトの名無しさん :05/02/18 00:47:36
自動変数の初期値は不定だと思っていた。配列は特別なのか…
907 :
デフォルトの名無しさん :05/02/18 00:55:11
C の練習にとパズルを考えているのですが面白いものが思いつきません パズルっぽい課題を知っている方、出題してくれませんか ちなみに、昨日やった (同僚が出してくれました) のはこんな問題でした > 下のような 10 × 10 の地図と島の数と広さを表示しなさい > 隣接した小島はひとつの島とします (ナナメも隣接とする) ○●○○○○○●○○ ○○○○●○●○○○ ○○●○○○○○○● ○○○○○○○○○○ ●●○○○○○●●○ ○●○●●○○○○○ ●○●○○●●●○● ○●○○○○○○○○ ●○○○○○○●○● ●○○○○●○○●○ 1.Island(1) 2.Island(2) 3.Island(1) 4.Island(1) 5.Island(1) 6.Island(13) 7.Island(2) 8.Island(1) 9.Island(3) 10.Island(1) total:10(26)
908 :
デフォルトの名無しさん :05/02/18 01:10:38
>>907 はもうできて次の課題を捜している、という意味です
分かりにくくてすみません
>>907 C Magazineにそんなのが毎月載ってるよ。
>>902 そのリンク先はあまり信用しない方がいいかもしれない。
しかし…大丈夫か?北星
どなたか今日宿題手伝ってくださいませんか? class Node,class List,class Employee,class EmpTable 項目は、File Process,Linked-list,node. 報酬します。 興味のある方は、上のメアドにメールください。 ちなみにC++で6時間以内に仕上げなきゃいけないので。
>>911 大きいのがどうしたって?
君はまず日本語を勉強するべきだと思われるが。
つーかマルチかよ。
>>907 最近出版された、
「パズルの宣教師」(ISBN:4-89072-816-3)
って本には、面白そうなネタが沢山詰まっている。
Cマガで使われたネタも多い。
915 :
デフォルトの名無しさん :05/02/18 15:45:08
c++の int() のような()演算子の名前は、値生成演算子でいいのですか?
916 :
デフォルトの名無しさん :05/02/18 16:15:08
Win2kでBorland C++ Compilerっていうフリーのコンパイラを使ってます。 関数のプロトタイプ宣言に関する質問があります。 下のAはあるC言語講座のサイトに載っていたプロトタイプ宣言の例文で、これは 警告が出ずにコンパイル出来るんですけど、Bみたいに引数を取ると 「プロトタイプ宣言のない関数」っていう警告が出てくるんです。 ちなみにBのプログラムも、ちゃんと動いて7と表示されます。 この警告はなんで出てくるんでしょうか? A------------------ #include <stdio.h> int plusint(int, int); void main(){ int i1, i2; int total; scanf("%d %d", &i1, &i2); total = plusint(i1, i2); printf("%d\n", total); } int plusint(int a, int b){ return a + b; } B------------------- #include <stdio.h> int plusint(); void main(){ int total; total = plusint(); printf("%d\n", total); } int plusint(){ int a=3;int b=4; return a + b; }
void
プロトタイプ宣言すらいらん #include <stdio.h> void main(){ int total; total = plusint(); printf("%d\n", total); } int plusint(){ int a=3;int b=4; return a + b; }
919 :
デフォルトの名無しさん :05/02/18 16:32:43
>>918 さん
動きましたけど、やっぱり同じ警告が出ます。
初歩中の初歩で申し訳ないのですが char (*foo)[2]; や int (*foo)[2];の意味が解りません・・・。 いったいこれは何を指し示しているのでしょうか? またどういったときに使うのでしょうか?
配列のポインタ printf("%x", foo++); printf("%x", foo++); printf("%x", foo++); とかすれば意味がわかる
>>920 char (*foo)[2];は、fooがchar [2]へのポインタであることを示す宣言。
たとえば、n*2の二次元配列を動的に確保したいとき、
char (*foo)[2] = (char (*)[2])malloc(n * 2);
のよう使う。
printf()に戻り値はありますか?
>>924 あるけど使っているのは見たことが無い。
出力されたバイト数(失敗時は負の値)が返るらしい。
>>919 int plusint(void);
int main(void) {
〜;
return 0;
}
>>921-922 なるほど。
解りやすい解説ありがとうございます。
何とか理解できそうです。
>>924 fprintf()同様、出力にエラーが無いか確認するためにチェックする方がよい。
stdoutが壊れているならどうしようも無いけどね
プ リダイレクトしても書けないんだからどうしようも無いのでは?
まだstderrが使えるかもしれない
void mainって書くのってどうよ?
937 :
デフォルトの名無しさん :05/02/18 20:55:29
938 :
デフォルトの名無しさん :05/02/18 22:20:50
>>900 関係ないなら擦れ野無駄なので黙ってて欲しいです。
参照渡しって実際には何をやってるんでしょうか? コンストラクタ呼ばなくて済むから効率いいってのはわかるんですが、 オブジェクト渡しやポインタ渡しみたいにコピーを生成しないのに どうやって関数のスコープの中に情報を渡してるのか疑問に思ったので。
実際にはほとんどポインタ渡しと同じ。nullのときの挙動が違うけど。
>>940 参照型もポインタみたいに4バイトでアドレス保持してて
それをコピーしてるって意味でしょうか?詳しくお願いします。
X(&X)コンストラクタ
ポインタが4バイトだと誰が言った。 const参照引数と暗黙の変換コンストラクタ呼び出しとか色々違う点はある。
>>940 とりあえず単純な関数作って引数をオブジェクト、ポインタ、参照と変えて
VCの混合モードで見てみました。アセンブラわからないけど参照渡しのときと
ポインタ渡しのときで似たようなコードになるのは確認できました。
あとはなんとか自分で調べてみます。ありがとうございました。
>>944 そこ絶対つっこまれると思いました。質問するときは厳密に表現するように気をつけます。
946 :
デフォルトの名無しさん :05/02/19 09:41:34
引数付のコンストラクタを持つクラスを、別のクラスのメンバにする方法が分かりません。 例えば class Sub{ public: Sub(char*); }; のようなクラスを、 class Main{ Sub sub; }; のようにメンバで持ちたいのですが、 コンストラクタに渡す引数はどこで指定すればよいのでしょうか?
949 :
デフォルトの名無しさん :05/02/19 11:50:24
>>947 参照かポインタをメンバにした方がいいよ。
>>948 949
わかりました。ポインタをメンバにします。
ありがとうございました。
Main::Main() : sub(引数) { }
>>949 なんで?
new したら delete しなくちゃだし、
参照なら、じゃどこに実体作るのよ、って話にならん?
>>952 普通そういう使い方したいなら継承するだろ
相変わらず初心者が回答してるな
955 :
デフォルトの名無しさん :05/02/19 13:50:21
#include <stdio.h> #include <ncurses.h> int main(void) { int i,j,k,h,x,y; char unko[3][19] = { " kono gyou ha 1", " kono gyou ha 2", "kono gyou ha 3" }; y=8; x=32; initscr(); clear(); for(i = 0;i < 3; i++){ move(y+i,x); printw(unko[i]); } for(j=1;j>0;j++){ }
//int key,oldx, oldy; //noecho(); //cbreak(); //keypad(stdscr, TRUE); //while ((key = getch()) != KEY_BACKSPACE) { // move(20,0); //printw("------------------------ type backspace --------------------"); //} endwin();} 文字が表示されなくて困ってます.二番目のforの無限ループのところを消して //でコメントアウトしたところを戻せば表示されるのですがこんな結果になるのは何故ですか?
貼り付けたところ以外に原因がある
それ無限ループじゃないような
>>953 …あなた基礎からやり直した方がいいですよ。
「is-a」「has-a」辺りから。
>953 そう設計したクラスを使わされるヤツは可哀相だな
でもまあ妙なクラス設計で苦しむのが2chネラなら良いな(▽
残念だが12〜3時までは俺は布団の中だ(▽
つか>951で終わってるのにいつまで引っ張るんだよ。
968 :
デフォルトの名無しさん :05/02/19 19:16:20
VC++6.0からJScriptを呼び出したいんですが、ご存知の型 というかご存知の方、いらっしゃいますか? IActiveScriptあたりを使うんでしょうか。
> ご存知の型というかご存知の方 ( ´,_ゝ`)
>>969 ShellExecute(NULL, "〜.js", ...);
>>972 ん。説明不足でしたが、戻り値を(たぶんVARIANTで?)
取得したいんですよ。
無理
975 :
デフォルトの名無しさん :05/02/20 12:22:02
質問させてください。 class BASE { public: void (*func)(void*); }; のvoid (*func)(void*)に class NEW : public BASE { public: void new_func(NEW* obj); }; のnew_funcのアドレスを入れたいのですが、 どうすればいいのでしょうか。 よろしくお願いします。
>>975 class NEW;
class BASE {
public:
void (NEW::*func)(void*);
};
class NEW : public BASE {
public:
void new_func(void* obj);
};
BASE b;
b.func = &NEW::new_func;
ATL使えばいいんじゃないか?
enum って何て読んでますか? 漏れは 「イーナム」 なんだけど。
Ruby使えばいいんじゃないか?
いにゅーむ
今まで「えなむ」って読んでいた……。
えにゅめ
胸
今まで「いーぬるぽ」って読んでいた・・・・・・・
漏れもイーナムかな 言いやすいし
そろそろ次スレの季節だな。
漏れは規制で立てらんないけど。
>>987 enumerate じゃなくて enum の話をしてるんです。
int の読み方の話に integer を持ち出すようなお方ですね。
>>987 を参考にすると「えにゅむ」かな。
脳内では「いーなむ」って読んでるけど。
えみゅむて・・・ えみゅーむです。
うが、 えにゅーむな・・・。
イニューム
こらこら 次スレ立つまでネタレスは止めとけ
「えにゅーむ」って読んでたけど正しくは何・・?
997
998
ほげ
乙
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。