C++相談室 part9
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNG(´∀`).。o(関連URLは>>2-5の辺り)
0652デフォルトの名無しさん
NGNGそれだけだと、
スタックの巻き戻し(一時変数のデストラクタ呼び出し)
対応する catch を見つける
なんつー処理ができない。もう少し面倒だよ。
0653デフォルトの名無しさん
NGNGYes
コンストラクタ中で例外が発生すると、対応するデストラクタが呼ばれないから、
自前で try - catch を書く
auto_ptr などのスマートポインタを使う
メンバ変数の初期化を使う
いずれかで対応する。
0654デフォルトの名無しさん
NGNGnewに失敗したインスタンスのdeleteは不要。
0655デフォルトの名無しさん
NGNGistream.read(buffer, offset, streamsize) ではなく
istream.read(buffer, streamsize)
という形式になっている理由がわかりません。
ストリームの使用者は
ランダムアクセスよりも順次アクセスの頻度が高いと仮定して、
後者の性能を高めるためでしょうか?
0656デフォルトの名無しさん
NGNGランダムアクセスしまくりたいの?
0657デフォルトの名無しさん
NGNGランダムアクセス出来ないデバイスを抽象化しやすいようにするため
0658デフォルトの名無しさん
NGNGわけていただけませんか?
0659質問小僧A
NGNG簡単なリスト作成ツールなどをせこせこ作って自己満足してますw
で、今作成したプログラムはDOS窓で動くんです。
それをwindowsの窓で動くプログラムにしたいのですが、なにからはじめればいいでしょうか?
参考書、やり方などなんでもいいので、教えていただけないでしょうか?
0660デフォルトの名無しさん
NGNG「猫でも」
0661質問小僧A
NGNGそこは無論聞く前に見て、勉強しました。
ですが、いまいちしっくりこないというか、微妙な感じというか・・・
0662デフォルトの名無しさん
NGNGC++BuilderかC++.NET買え。
それ以外の方法は効率が悪すぎる。
0663デフォルトの名無しさん
NGNG0664デフォルトの名無しさん
NGNG環境ぐらい書かないとアドバイスしようがない。
0665デフォルトの名無しさん
NGNG(´Д`)
(( ─━OO━─ ))
∪∪
0666デフォルトの名無しさん
NGNG「プログラミングWindows」を読む。
それで難しいと感じたら、C++ Builderでやってみる。
0667デフォルトの名無しさん
NGNGhttp://www.42ch.net/UploaderSmall/source/1028634544.zip
いちおう確認したけど、LokiPortの存在は知ってるよな?
0668デフォルトの名無しさん
NGNGあれはVC6だめじゃないの?
0669デフォルトの名無しさん
NGNGerror LNK2005: "bool __cdecl operator<(double const &,class TestClass const &)" (??M@YA_NABNABVTestClass@@@Z)
はすでに foo.obj で定義されています
ヘッダファイルに直接以下のように書いているのですが、なにがダメなのでしょうか?
// 比較演算子(upper_boundで必要)
bool operator < ( const double &a, const TestClass &v )
{
return v.x < a;
}
なぜか解りませんがinlineを付けるとエラーが出ませんでした。
0670デフォルトの名無しさん
NGNGそのままinlineつけておけばいい
0671669
NGNGでもinlineではエラーにならないのが解りません。
0672デフォルトの名無しさん
NGNGヘッダに実装を書いた場合、そのヘッダを複数回includeすると、
実体も複数できるからリンク時エラーになる。
inlineにすれば実際には関数を作らないのでエラーにならん
0673デフォルトの名無しさん
NGNGああなるほど。言われてみればそうですね。
ありがとうございます。
0674デフォルトの名無しさん
NGNG○ return a < v.x;
× return v.x < a;
0675デフォルトの名無しさん
NGNGSleepを使ったら文がいっきに表示されて困っています。
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNG0678質問小僧A
NGNG買うお金が・・・
>>664
すいません。環境かいてませんでした(汗
開発環境はVisualC++6.0です。OSはWin2000とWin98です。
>>666
さっそくその本立ち読みしに大学までいってきます。
ところで・・・獣の数字・・・w
0679デフォルトの名無しさん
NGNG学生だろ?アカデミックパックで安いものじゃん
そもそも今の学生って俺たちより余程金持ってるじゃん
0680デフォルトの名無しさん
NGNG知らんよ。というか 675 が意味不明だから、補足しろと言ってるんじゃないの?
0681デフォルトの名無しさん
NGNGありがとう!
0682質問小僧A
NGNGそれは偏見なのでは・・・(汗
少なくとも私は貧乏生活です・・・
成人祝いに買って貰ったVisualStudioで頑張ってるんです。
0683デフォルトの名無しさん
NGNGMFC使えばいいんじゃないか?
自分は良いサンプル集めて勉強してる。
ダイアログアプリなら簡単だよ。
0684質問小僧A
NGNGその良いサンプルをできればおしえていただけませんか?
はっきりいってどこから手をつければいいのか・・・
0685デフォルトの名無しさん
NGNG自分は主にココにある物を参考にしてる。
http://www.codeproject.com/
http://www.codeguru.com/
CDialogだったらボタンとかリストとかを
ダイアログエディタでくっつけて、動作は自分で記述することになるよ。
MSDNにCButtonやCListBox,CListCtrlがあるからそのメンバ関数とかをみれば
使い方は分かる。
0686デフォルトの名無しさん
NGNG0687デフォルトの名無しさん
NGNGネットワーク経由のメッセージを契機に、
特定プログラムを起動するサービス(NT4.0上で動作)を
作りたいと考えています。
NT4.0サービスを作成・インストールする部分がわからないのですが、
参考になる書籍など、ご存知でしたら教えてください。
MSDNを見ると、「ATL COM AppWizard を使う」とありましたので、
早速使ってみたのですが、どこに記述してよいやらわかりません。
よろしくお願いします。
サービスとCOMに何の関係が?
0689デフォルトの名無しさん
NGNGあるじゃん。COM を使わずに直接 API 叩く方法もあるが、ふつーは COM の
形で実装するし、そのための Wizard も用意されてる。
0690デフォルトの名無しさん
NGNGグローバルスコープ?ファイルスコープ?
どちらになる?
もうちょい具体的に
0692デフォルトの名無しさん
NGNG意味がわからん。
0693デフォルトの名無しさん
NGNG0694デフォルトの名無しさん
NGNGそのファイルの中だけに限定されたスコープ
0696デフォルトの名無しさん
NGNG#include <stdio.h>
をするとここではprintfを使うものの
#include "my.h"
をしたときにprintfという名前を占有してほしくないとする
どうにもならない?
namespace使うとふるいヘッダでエラーが出ることがあるし
0697デフォルトの名無しさん
NGNG0698デフォルトの名無しさん
NGNGprivate_my.hをつくれ。
ヘッダファイルの中からprintf()呼ぶ気か?
0700デフォルトの名無しさん
NGNG>>698
どういうこと?
0701デフォルトの名無しさん
NGNGmy.h内でincludeするのではなく、別にprivate_my.h等を作ってこっちで
includeすればいいじゃん。で、private_my.cpp等にprintfを必要を
必要とするモジュールを封じ込める
0702デフォルトの名無しさん
NGNGテンプレートはどうにもならん?
exportがサポートされないとだめかな?
0703デフォルトの名無しさん
NGNGなにがやの?
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNGマクロはともかく、標準関数は std ネームスペースに封じられてるから問題ない。
問題は Win32 API だけど、こいつはどうにもならんね……。
0706デフォルトの名無しさん
NGNG::windowsに閉じ込めるバージョンがあればいいんだが
0707デフォルトの名無しさん
NGNG#include <windows.h>
}
は?
0708デフォルトの名無しさん
NGNGそもそも KERNEL32.DLL とか USER32.DLL にある API の本体が、namespace
なし、extern "C" でコンパイルされておろうが。
0709つまづきさん
NGNGfor (sum=0, i=0; i<v.size(); i++)
vectorクラスでデータの総和をとる計算の一部なんだけどわからない(欝
0710デフォルトの名無しさん
NGNGsize()は要素数を返す。ってゆーかイテレータを使うだろ普通
0711710
NGNG0712デフォルトの名無しさん
NGNGむしろ std::accumulate を使うと思われ。
0713デフォルトの名無しさん
NGNGforを知らずにvectorとはこれいかに。
0714つまづきさん
NGNGiがv.sizeより小さかったらi++と判断したらいいのかなぁ
この後にsum += v[i] が続いてるんだけど
0715デフォルトの名無しさん
NGNGその部分も予め書きなよ。
0716つまづきさん
NGNG0717デフォルトの名無しさん
NGNG709のスタイルなんだが、
iterator使ったコーディングにするとどう違ってくるの?
0718デフォルトの名無しさん
NGNGいってることは正しいが書かなくてもわかるな普通。
それよりforを知らないのが信じられない。
0719つまづきさん
NGNG0720デフォルトの名無しさん
NGNG{
sum += *i;
}
かな?
0721デフォルトの名無しさん
NGNGキーワードは STL と vector だ。あとは「プログラミング言語 C++」を読め。
0722デフォルトの名無しさん
NGNGsum=0;
for(vector<int>::iterator vi=v.begin();vi!=v.end();vi++)
sum+=*vi;
みたいな
0723つまづきさん
NGNGvoid main ( )
{
vector < int > v ;
int i, data, sum ;
cout << "数値以外の文字を入力して終了" << endl ;
while ( cin.good ( ) ) {
cin >> data ;
if ( cin.good ( ) ) v.push_back ( data ) ;
}
for ( sum = 0, i = 0 ; i < v.size ( ) ; i ++ ) {
sum += v[i] ;
cout << v[i] << " - " << sum << endl ;
}
}
できればforからの文を日本語で説明して欲しい
0724デフォルトの名無しさん
NGNGさすがに C++ の「いろは」から解説を頼むのは、スレ違いだと思われ。とりあえず
本を読んで、最低限の知識を身につけてクレ。
0725デフォルトの名無しさん
NGNGSTLの解説がある本をお勧めする。
0727717
NGNGiteratorで記述してれば、記述は大変だが、使うときに便利になる。
アルゴリズムの記述が、特定のポインタでなく、様々なコンテナに
適用できる点がiteratorのいいところということだと思った。
0728デフォルトの名無しさん
NGNGさらに一歩進んで、template 関数 or 関数オブジェクトにしないと、あまり嬉しくないと
思うが。
0729nns
NGNG一応作ってはいるんだが挫折しそう。
0730デフォルトの名無しさん
NGNGCStringを作りたいと思っています。
class CString :
public std::string
{
public:
// 追加機能いろいろ省略。
private:
static void* operator new(size_t);
};
「仮想デストラクタのないクラスからpublic継承してはいけない」
というのはC++の常識らしいですが、こういう風にnewを自分で禁止しておけば、
ポインタからアクセスすることがなくなるので問題はないと思うのですが、
どうでしょうか? これでも、まだなにかやばい事が起こり得る抜け道って
ありますか?
0731デフォルトの名無しさん
NGNGsscanfを別の関数から呼びたいのですが、
どうやったら...の部分を渡せるのでしょうか?
sprintfの場合は、vsprintfでva_listを渡せばできるのですが、
sscanfにはvsscanfのようなものは見あたりません。
test(const char* buffer,const char* format,...)
{
//sscanf が呼びたい
va_list arg;
va_start(arg, format);
int i = sscanf(buffer,format,arg);//うまくいかない。
va_end(arg);
return i;
}
sscanf(const char*,const char*,...);
0732デフォルトの名無しさん
NGNGnewできないと残念だから、継承させないでstd::stringのインスタンスを
メンバに持たせたらどう?
ちょっとめんどくさくなるけど。
0733デフォルトの名無しさん
NGNGちなみにそれで何をするの?
0734731
NGNGスイマセン。よく調べてみたら、
sscanfはdoubleの変換ができないようなので
atoi,atof系を使わないとだめですね。
C++的には
double d;
std::stringstream a;
a << "123.456789";
a >> d;
0735デフォルトの名無しさん
NGNG6nbsp;int *ip = new int[-1];
}
catch (std::bad_alloc &a) {
cerr<<"(・∀・)マンコー"<<endl;
}
0736デフォルトの名無しさん
NGNG> sscanfはdoubleの変換ができないようなので
そんなことないでしょ?
0737731
NGNGMSDNの
scanf 関数の型フィールド文字に
e、E、f、g、G
はfloatのポインタと書いてある。
でもやっぱり、sscanf使えないと面倒だなぁ。(鬱
0738デフォルトの名無しさん
NGNGMSDNをよく読んでみましょう。
0739731
NGNGありがとう!!doubleやっぱり使えるんですね。
「printf 関数と wprintf 関数の書式指定フィールド」を参照してください。
とあるのにリンク先をクリックすると
scanf 系関数の書式指定フィールド
になっている罠
だったんだねぇ。
731の件は sscanf.cにソースがあり解決しました。
後一つだけ質問させてください。お願いします。
sscanfを Cでコンパイル(*.c)すると問題ないのですが、
C++でコンパイル(*.cpp)するとRUNTIMEエラーがでてしまうのですが、
どうしたら回避できるのでしょうか?
(浮動小数点の場合に起きています。)
#include<stdio.h>
int main()
{
double d;
sscanf("123.456","%f",&d);
}
0740デフォルトの名無しさん
NGNG>sscanf("123.456","%f",&d);
sscanf("123.456","%lf",&d);
0741731
NGNGfloating-point support not loaded
とでていたのがそれ以後、不思議と直りました。
>>740 ありがとうざいました。
0742デフォルトの名無しさん
NGNGCString* ps = new CString[1];
0743730
NGNGいや、メンバで持たせるのはちょっとやってみたんですが、stringが持ってる
関数を全部委譲させようとすると、かなりの量の作業が必要なので。
で、いくつか委譲作業をやってる途中で思ったのです。『public継承って、もともと
こういう面倒な記述をしなくていいようにするために出来たんじゃないの?』って。
そう思って冷静に考えたら、委譲の保守の労力と、ポインタ間接が一個増えることによる
効率の悪化、このふたつの変わりに得られるメリットが、string*経由のdeleteという
落とし穴を回避できる、ってのは、あんまりじゃないですか。
だから、なんとかpublic継承させたいんです。
>>742
おおっと。そうですね。たしかに、それも回避しておかないと。
0744デフォルトの名無しさん
NGNG> で、いくつか委譲作業をやってる途中で思ったのです。『public継承って、もともと
> こういう面倒な記述をしなくていいようにするために出来たんじゃないの?』って。
いいえ。
0745デフォルトの名無しさん
NGNGpublicで済ませるのは、暗黙の型変換が考えられない場合
(traitsとかね)だけ。
0746730
NGNGいや、あの。どうせなら、どういう歴史的経緯があったのか、教えてくださいよ。知ってるんでしょ?
>>745
private継承とusing……? private継承でも、using宣言でCStringのスコープに
stringの各関数をインポートできる、ってことですか? もしそうなら、
ひとつのusing宣言でstringをまるごとインポートできればいいんですけど……。
ま、調べてみます。
ところで、
>publicで済ませるのは、暗黙の型変換が考えられない場合
ってのは、どういう意味ですか? 「暗黙の型変換はよくない」と
前提した上で、CStringからstringへの暗黙の型変換がいっぱい起こりうるから
public継承はやめとけよ、って意味でいいんでしょうか。
0747744
NGNGpublic 継承は実装の再利用ではなく、あくまで OOP のパラダイムを実現する
ための機能。あまり書き方は良くないんだが「プログラミング言語 C++」に記述
があるよ。
0748デフォルトの名無しさん
NGNGなんでそんなことするの?
std::stringにどんな拡張をする計画なの?
0749デフォルトの名無しさん
NGNGマンセー
0750730
NGNGありがとですー。
>>748
// 最初に現れる指定文字位置を探す。日本語を含んだ文字列でも正常動作する。
int Find(char ch) const;
// 最初に現れる指定文字で分割できる部分文字列(左側)を返す。日本語含んでもOK。
CString FindLeft(char ch) const;
// 最初に現れる指定文字で分割できる部分文字列(右側)を返す。日本語含んでもOK。
CString FindRight(char ch) const;
// 文字列が "10" "-5" 等ならtrue。
bool IsDigit(void) const;
こんな感じです。
0751デフォルトの名無しさん
NGNGメンバにする必要ある?
■ このスレッドは過去ログ倉庫に格納されています