■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室 part52
751 名前:デフォルトの名無しさん :2006/09/23(土) 02:03:27
>>750
charにsprintfしてからstringにすれば良いんじゃね?

752 名前:デフォルトの名無しさん :2006/09/23(土) 02:11:02
(boost::format("%g") % 1.234).str()


753 名前:デフォルトの名無しさん :2006/09/23(土) 02:12:47
標準C++の範疇でやりたければstd::ostringstream使え。
Boostを使ってよければlexical_cast使え。

754 名前:デフォルトの名無しさん :2006/09/23(土) 05:04:54
>>753 の言うとおりだが、補足として、std::ostringstream
使うときには precision に注意すべし。

755 名前:デフォルトの名無しさん :2006/09/23(土) 05:37:05
double f=1.00;
string s = f.to_string();
とか出来るクラスがあったら楽でいいのに。
と思ったけど。

string str_thousand = "1000";
int int_ninety = 90;
int a = lexical_cast<int>( str_thousand );
string s = lexical_cast<string>( int_ninety );

boostっていいね。
boost落として使いたくなったよ。

756 名前:デフォルトの名無しさん :2006/09/23(土) 05:56:47
使いたいけど、中でやってることがそれなりに大げさで、組み込みの類みたいな
性能要求の厳しいところには、ほんの一部しか持ち込めない場合も…
lexical_castとかはガチで便利だけど、同時にソースの大きさ&生成されるコードのデカさには
吹く事請け合い。
いやまあ、ほとんどの環境じゃ問題にならないとは思うんだけどね。

757 名前:デフォルトの名無しさん :2006/09/23(土) 06:08:18
>>756 それ言ったら、標準ストリームも使えんぞ。
いまは組み込みでも標準ストリームは当たり前なのかな。
俺が組み込みにいた頃は C++ とかあり得なかったけど、
今じゃ C++ も結構使われて居るみたいだし。

758 名前:デフォルトの名無しさん :2006/09/23(土) 06:19:40
>>757
まあ、そうなんだけどね。
実際そういう環境だと標準ストリームは禁じ手扱いだなー。
IOデバイスが抽象化されてないのでそもそも出番が無いなんてこともあるけど。
あとは例外とRTTI。蛇蝎のごとく嫌われてる。実際負担はでかいにせよ。

CとC++じゃ、相変わらずC++の方が重い局面も多いのだろうけど、
コンパイラ様の性能がこの数年で格段に跳ね上がった感がある。
テンプレートも味方してくれるし、今更Cじゃ辛いからC++というだけでなく、
純粋に性能面から見てもC++のが有利ってのも、今となっては寝言じゃない。

ただ、言語機能的にはまったく問題なくても、ライブラリ類に大幅な制限食らってまで
使うC++が本当にC++なのかと、ふと考えることはある…かも。

759 名前:デフォルトの名無しさん :2006/09/23(土) 06:27:41
例外はまぁ仕方ないとも思う。
実際その方がロジックはきれいになることも多いし、
エラーを見逃すことも少なくなる。

RTTIは、boost のいくつかのライブラリが要求するから
コンパイラオプション的には禁止していないけど、
自分が各プログラムでは使いたくない、と言うか、使わない。
C++ のようなアーリーバインディングな言語では
コンパイルが完了した時点で型に関する整合性は
保証されていることが大切だと思っているから。

760 名前:デフォルトの名無しさん :2006/09/23(土) 07:02:20
Javaみたく例外が低コストなら、がんがん使うんだけどね。
構造上仕方が無い。

>C++ のようなアーリーバインディングな言語では
>コンパイルが完了した時点で型に関する整合性は
>保証されていることが大切だと思っているから。

基本的には同意。
RTTIは、個人的には要らない子に思う。
けど、奴がいないとできない仕事は結構あるしなー。
機構としてのRTTIを言語がサポートしていることには何の不満もないけど
影響範囲をコントロールできないのがムカツク。
素のままだとAll or nothingなんだもんなー。

761 名前:デフォルトの名無しさん :2006/09/23(土) 07:27:46
Boostはエンタープライズなライブラリを
がんがんacceptしてるな
そろそろC++言語が高級言語らしくなってきたよ

762 名前:デフォルトの名無しさん :2006/09/23(土) 07:29:40
エンタープライズなライブラリって・・・なに?

763 名前:デフォルトの名無しさん :2006/09/23(土) 14:18:41
template <typename List_, typename Parameter_>
class MessagePort
{
public:
typedef List_ mes;

/*
コンストラクタとかメソッドとか
*/

};

struct PlayerMesList
{
typedef int type;
static const int ESCAPE = -1;
static const int MOVE = 0;
static const int WARP = 1;
static const int FIRE = 2;
};
typedef MessagePort< PlayerMesList, Point > PlayerMesPort;

質問です。上のようなクラスがあったとき、私の予想では
int a = PlayerMesPort::mes::WARP;
はコンパイル時に
int a = 1;
に置き換わると思うんですが、何故かG++-3.3.2でリンク時に
undefined reference to 'PlayerMesList::WARP'
と出てリンク出来ません。何故でしょうか…。

BCC(BuilderX)では何の問題も起こらなかったのですが…。

764 名前:デフォルトの名無しさん :2006/09/23(土) 14:50:22
>>763
こんなん出ました。
http://www.google.co.jp/search?q=gcc+%22undefined+reference%22+static+const

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=20547

つまり、これも undefined reference になるってこと。
struct S { static const int N = 1; };
int main()
{
int const& x = S::N;
return x;
}

gcc が正しいのか?

765 名前:デフォルトの名無しさん :2006/09/23(土) 14:51:34
>>763
>undefined reference to 'PlayerMesList::WARP'
この時点では見えないよ。と、いわれてるのだからどこが悪いか検討つくのでは。
リンクの順序orコンパイラ

766 名前:デフォルトの名無しさん :2006/09/23(土) 14:53:29
>>764
参照はダメだろう

767 名前:デフォルトの名無しさん :2006/09/23(土) 14:59:20
>>763
参照で使ってるとこあるの?

768 名前:デフォルトの名無しさん :2006/09/23(土) 15:29:32
static constな整数のメンバ変数はclass内で初期化できる。
しかし、それがメモリ上のオブジェクトとしての実体が必要な形で使用する場合、
改めて実体を宣言する必要がある。ってことだよな? もし>>763がどっかで
参照とかポインタに突っ込んでる箇所があるならgccの挙動で正しい。

struct T {static const int n = 3;};
void f( int x){ cout << x << endl;}
void g(const int& x){ cout << x << endl;}

int main()
{
f(T::n); //ok
g(T::n); //NG
return 0;
}

769 名前:デフォルトの名無しさん :2006/09/23(土) 15:34:12
独立参照はしてないのですが、const int &な引数になら渡しているっぽいです。

ためしに一箇所だけ、
一度int型に格納してから引数に渡すように変更してみたら、
大量のエラーの内一つだけ消えました。^^;

質問時の
「int a = PlayerMesPort::mes::WARP;
はコンパイル時に
int a = 1;
に置き換わると思うんですが」
というのはかなり不適切な言い方でしたね…。


…でもconst int &に数値リテラルなら直接渡せるのに何故?
(クラススコープでのstatic const int定義はコンパイル時解決だったと思うのですが…)

770 名前:769=763 :2006/09/23(土) 15:46:04
……ってコンパイル時解決というのは私の勘違いっぽい?

771 名前:デフォルトの名無しさん :2006/09/23(土) 16:10:18
やっぱり一悶着あったようで。
http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#454

static const な整数型(enum 含む)メンバが初期化子を持つとき、それは
定数式として使えて、 & でポインタ作ったり直接参照を初期化したりしない限り
定義が要らなくなる、という特別扱いがされている。

static_cast<int> や +0 で結果が変わるんだから、混乱してもしょうがないと思う。

定数式として使える整数型変数が右辺値として評価されることにすれば、
みんな幸せになれるだろうか?

772 名前:763 :2006/09/23(土) 18:48:56
>>771
むー…そういうことですか。static const 整数って意外と不便なものなのですね…。( ´ ・ω・ ` )
cppファイル上で定義するなりなんなり、とりあえず別の方法を検討してみます。

みんなありがとう。

773 名前:デフォルトの名無しさん :2006/09/23(土) 19:51:47
ちなみにC++3rdでその件について解説してる部分では
「enum使えenum」って結論だったな。ってBCCはenumにバグがあるんだっけ?

774 名前:デフォルトの名無しさん :2006/09/23(土) 20:12:47
BOOST_STATIC_CONSTANT マクロを読めば、その辺の実装状況が分かる。
**/config/static_constant.hpp

See Also:
http://boost.cppll.jp/HEAD/more/int_const_guidelines.htm

775 名前:ららら :2006/09/23(土) 20:27:47
助けてなのらー!
VC7.1 で以下の Multiply 関数の 2 つめの引数の const を削除してコンパイルすると
"function does not take 2 arguments" エラーになるのらー!
なんでなのらー?どうしたらいいのらー?

template<class T> 
class Complex {
public:
    typedef T ValueType;
};

template<class T>
class Vector {
public:
    typedef T ValueType;
};

typedef Vector<Complex<float> >  MyVector;

template<class VectorT>
void Multiply(VectorT* vec, const typename VectorT::ValueType::ValueType a)
{ }

void test()
{
    MyVector v;
    Multiply(&v, 2.0);
}


776 名前:デフォルトの名無しさん :2006/09/23(土) 20:45:31
329 名前:ららら[sage] 投稿日:2006/09/06(水) 00:41:45
>>328
ばかはおよびでないのらー

また出たよ……。


777 名前:デフォルトの名無しさん :2006/09/23(土) 20:52:10
七誌ではないことに感謝しろよ

778 名前:デフォルトの名無しさん :2006/09/23(土) 21:25:27
>>775
Multiply(&v, 2.0);の場合、
1つ目の引数より、テンプレート引数VectorTの型は、
Vector<Complex<float> >だと判断される。
するとtypename VectorT::ValueType::ValueTypeはfloat型になる。
しかし2つ目の実引数の2.0はdouble型になっているのがまずいのだと思う。
2.0fだとどうだろうか。

779 名前:デフォルトの名無しさん :2006/09/23(土) 21:33:09
>>778
どうやらそういう理由ではないようだ。
>>775
そのソースをVC8でためしたらコンパイルすらされない。
で、
template<class T>
class Vector {public: typedef T Type;};
このように変更したらMultiplyのconstなしがvc7.1とvc8両方でコンパイルされた。

たぶん、vcのバグかな。


780 名前:763 :2006/09/23(土) 21:54:56
774>>見てBOOST_STATIC_CONSTANT使ってみたけどundefined reference…。
それ使えばconst &へ直接渡せるようになるってワケではないのですね…。

とりあえず定数を使う場合に全て単項の+付けるようにして対応しました。
なんだかなぁ…。( ´ ・ω・ ` )

781 名前:デフォルトの名無しさん :2006/09/23(土) 22:12:42
>>780
じゃあ、コンパイラがenumでの参照初期化が駄目なのかも。

boost/config/suffix.hppの

// BOOST_STATIC_CONSTANT workaround --------------------------------------- //
// On compilers which don't allow in-class initialization of static integral
// constant members, we must use enums as a workaround if we want the constants
// to be available at compile-time. This macro gives us a convenient way to
// declare such constants.

# ifdef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
# define BOOST_STATIC_CONSTANT(type, assignment) enum { assignment }
# else
# define BOOST_STATIC_CONSTANT(type, assignment) static const type assignment
# endif

で切り替えてんだけど。

782 名前:デフォルトの名無しさん :2006/09/23(土) 22:14:56
環境
  OS WinXP
  コンパイラ Visual C++

if文を用いたプログラムを作りたいので質問します
最初に[F5]を押し、もしパケットの受信(なんらかの通信)があったなら、5秒後にまた[F5]を押し
もし、パケットの受信がなければ、そこでプログラム停止 

というプログラムを作りたいのですが、全くわかりません ある程度のコマンドを表記してもらえれば後は自分で独学するので
使うコマンドだけ教えてくれませんか?

2ちゃんねるの実況などのオートリロードに役立てたいのです(Janeですと、制限があるので…)


783 名前:デフォルトの名無しさん :2006/09/23(土) 22:19:44
>>782
すまないが、環境依存の話はスレ違いなんだ。
Visual C++のスレとかあるからそっちへ行ってくれ。

784 名前:763 :2006/09/23(土) 22:32:22
BOOST_NO_INCLASS_MEMBER_INITIALIZATIONが定義される(可能性のある)コンパイラは
MPW C++、Sun C++、Visual Age (IBM) C++、Microsoft Visual C++の四つだけみたいですね。
(boost/config/compiler/より)

あくまでclass内で直接定義できない場合にenum仕様に分岐するってだけで、
const &に渡すとか、そういう用途は想定してなさそう…。

785 名前:デフォルトの名無しさん :2006/09/23(土) 22:35:48
元のお題ならenumになれば問題ないでしょ?

786 名前:デフォルトの名無しさん :2006/09/23(土) 22:45:42
「enumハック」とか「非推奨」とか言われることも多いけど
結局、定数をクラス内enumにするのが
一番トラブルが起きにくいし、読む側も(わかってれば)納得できるんだよね。

787 名前:デフォルトの名無しさん :2006/09/23(土) 22:52:39
>>786
enum は enum で template 関数に使うと妙なことになるぞ。

#include <algorithm>
struct S { enum { N = 1 }; };
int main()
{
return std::max(S::N, 0);
}

:5: error: no matching function for call to `max(S::<anonymous enum>, int)'

788 名前:763 :2006/09/23(土) 23:14:31
>>785
よく考えてみればそうですね。頭固い763に乾杯。

…ってtemplate関数に使うと 787>> みたくなっちゃうのか…。
別に質問の件ではtemplate関数に渡したりしないから大丈夫だけど、
もうstatic const 整数で定義して、使用時に単項+付けるんでいい気がしてきた…。


789 名前:デフォルトの名無しさん :2006/09/23(土) 23:18:07
よくiteratorのループで以下の形が用いられますが

for(iterator i = begin; i != end; ++i)

「i != end」の部分が気になります。
例えば以下の関数があったとして、
引数endにNULLその他、不適切な値が渡された場合
無限ループになってしまいます。皆さんはどう解決されてますか?

template< typename iterator >
void function(iterator begin, iterator end)
{
for(iterator i = begin; i != end; ++i){ ...}
}

790 名前:デフォルトの名無しさん :2006/09/23(土) 23:19:08
>>788
定義を追加するのはだめなのか?
undefined referrence っていうんだから、一番まっとうな解決方だと思うが。

使用箇所全部に不気味なコード書くぐらいなら、
実装側に不気味なコードひとつのほうがマシだろ。

791 名前:デフォルトの名無しさん :2006/09/23(土) 23:20:25
struct S { static const int N; };
const int S::N = 1;

792 名前:デフォルトの名無しさん :2006/09/23(土) 23:22:43
>>789
渡すやつが悪いという理屈が通用しないなら、
function側で、X.end()と生成するしかないだろ。

793 名前:デフォルトの名無しさん :2006/09/23(土) 23:44:33
確かに、俺なら、
firstとlastを受け取る関数のlastにNULLを渡すなんて
絶対やらないけどな。

794 名前:デフォルトの名無しさん :2006/09/23(土) 23:55:05
そもそも型が違うのではないのか?

795 名前:763 :2006/09/23(土) 23:55:14
>>790

うーん。そういう記法で統一すればさほど不気味でもないかな、とも思っていたんですが。
(定数リストをテンプレート化するという目的上)cppファイルも増やしたくなかったし。
でもそう言われると悩んできますね…。


796 名前:デフォルトの名無しさん :2006/09/24(日) 00:01:04
>>795
記法を変える必要は無い。定義を追加すればいいだけ。

797 名前:789 :2006/09/24(日) 00:13:56
>>792-794
お答えありがとうございました。
渡す奴が悪いで法にすることにします。
確かC#とかだとテンプレート引数に制限かけれるんでしたよね。
C#触る機会があればまた考えることにします。

798 名前:デフォルトの名無しさん :2006/09/24(日) 00:15:46
std::string::npos なんかの参照とったらどうなるんだろう?

と思ってやってみたら普通に通る。ちゃんと定義が置いてあるみたい。

と思って libstdc++ のソース見たらクラス内で -1 で初期化したうえで、
クラス外に初期化子の無い定義が書いてあった。

めんどくさいけど、これが正解なんだろう。

799 名前:デフォルトの名無しさん :2006/09/24(日) 00:29:03
参照取るのを禁止/防止する方向はダメなのか

800 名前:763 :2006/09/24(日) 01:02:52
>>796
言葉足らずでしたね…。
記法を統一というのは、使用箇所に単項+を追加するという方の意味です。

ていうかもしかして >>796 のは >>798 のことを言っているのかな。
cppファイルが増えるのはいやだけど、
const&に渡せる上にswitch文にも使えて(定数としての性質を失っていない)
一番理想的な動作をしますね。(こういう書き方できたんですね…)

というわけで >>798 の方法を取ることにします。

>>799
STLのクラスに渡していたりするので無理。

801 名前:デフォルトの名無しさん :2006/09/24(日) 01:51:41
>>800
元が template なら、定義も template になるから cpp は増えないでしょ?

802 名前:763 :2006/09/24(日) 02:14:03
>>801
定数リスト用のクラス自体はtemplateじゃないのです。
定数リスト用クラスをテンプレートのパラメタとして与えるというお話。

803 名前:デフォルトの名無しさん :2006/09/24(日) 02:59:18
定数リスト用のクラスもテンプレートにしちゃえ。

804 名前:ららら :2006/09/24(日) 03:40:46
で、どうしたら解決するのらー?

805 名前:デフォルトの名無しさん :2006/09/24(日) 04:05:42
template<template <typename > class VEC,typename C>
void Multiply(VEC<C>* vec,typename C::ValueType a)
{}

これでいいんじゃね?

806 名前:デフォルトの名無しさん :2006/09/24(日) 05:04:27
>>804
標準では合法なコードなんだから、このスレで話すことはもう無い。
VCスレにでも逝ってくれ。

807 名前:デフォルトの名無しさん :2006/09/24(日) 13:30:15
16の倍数に切り上げるにはどうすればいいですか?
たとえば
15 -> 16
16 -> 16
17 -> 32
みたいな感じです。切り捨てるには
n = n / 16 * 16でいいのですが…


808 名前:デフォルトの名無しさん :2006/09/24(日) 13:32:41
(n+15)/16

809 名前:デフォルトの名無しさん :2006/09/24(日) 13:33:00
>>807
n = (n + (16 - 1)) / 16 * 16;

810 名前:807 :2006/09/24(日) 13:42:49
>>809
できました、ありがとう!!
でもなんかダサいっすね

811 名前:デフォルトの名無しさん :2006/09/24(日) 13:45:54
((i-1)/16+1)*16
これなら0値でも16になるぜ!!

812 名前:デフォルトの名無しさん :2006/09/24(日) 14:12:06
参考書に載ってたサンプルプログラムを打ったのですが

http://mitty.jp/up/src/up1962.cpp
プログラムの
pwork = pchar = new char[size + 1];
の部分で、pcharとpworkにメモリ割り当てをしているのはなんとなくわかるんですが
Cの時はmallocの戻り値がvoid*型なのでキャストして、一つのポインタ変数に
一つずつメモリをわりあてていたのですけど
C++では、まとめてメモリをわりあてることができるのでしょうか
あと、本では、pcharしか解放してないんですが、pworkの方は解放しなくて良いのでしょうか
それと、蛇足ですが、このような知識が手に入るC++の読むべき本てあるのでしょうか。
最後の本については、スレ違だと思いますので、できれば、前者のnewにかんする部分を
教えていただけないでしょうか

813 名前:デフォルトの名無しさん :2006/09/24(日) 14:15:49
>>810
n = (n + 15) & 0xfffffff0;

814 名前:デフォルトの名無しさん :2006/09/24(日) 14:22:03
>>812
「土地を取得して、その住所をpwork君とpcharさんに教えてあげた」
ということ。

確保されたのは new char[size + 1]; だけ。
pworkとpcharは同じ場所を指している。

815 名前:デフォルトの名無しさん :2006/09/24(日) 14:27:37
>>812
それをmallocを使って書いたらpwork = pchar = malloc(size + 1);になる。
ただ代入演算子を並べているだけ。

816 名前:810 :2006/09/24(日) 14:37:59
>>813
かっこいいです!
使わせていただきます。
その他の人も本当にありがとうございました

817 名前:デフォルトの名無しさん :2006/09/24(日) 14:41:30
>>816
さらに2のべき乗以外の丸めができないし
コメントつけても「(本当に大丈夫か?)…ああ、大丈夫だ」と逡巡すると思われ
止めておけ・・・忠告はしたからねっ!

818 名前:デフォルトの名無しさん :2006/09/24(日) 15:53:20
>>813
nが32bit integerじゃないと破綻する。

819 名前:デフォルトの名無しさん :2006/09/24(日) 16:08:50
>>818
それはキミへの宿題だってこった

820 名前:デフォルトの名無しさん :2006/09/24(日) 16:09:33
n = (n + 15) & ~15;

821 名前:デフォルトの名無しさん :2006/09/24(日) 16:41:25
3点だな

822 名前:(^-^) ◆MONSOON/qo :2006/09/24(日) 16:49:46
整数、小数を含めて上位5桁で6桁目を四捨五入するにはどうしたらいいですか?

823 名前:デフォルトの名無しさん :2006/09/24(日) 16:52:25
>>822
それ言語に寄らない機能モデルだよね
そしてそれくらいなら小学校で習うことだよね
というわけで

つ たのしい算数

824 名前:(^-^) ◆MONSOON/qo :2006/09/24(日) 16:57:01
>>823
桁数が多い場合でもループ使わずに出来ますか?

825 名前:デフォルトの名無しさん :2006/09/24(日) 17:00:57
>>824
なんでループが必要になるのかがわからん。
とりあえず一通り算数を学んでからコードを書いてみろ。
自分で書く前に人に聞くな。

書いた後で相談する時は、スレを適切に選んでソースを貼れよ。

826 名前:デフォルトの名無しさん :2006/09/24(日) 17:01:52
>>824
その機能モデルと、機能の実体を中途半端に混ぜるのはやめておいたほうがいい
そもそもループ使うかどうかなんて決まってないじゃんか
ついでに言えば進数もわからないし

頭にある前提条件を残さず書き下してから、そういうのを考えようね

827 名前:(^-^) ◆MONSOON/qo :2006/09/24(日) 17:05:19
101.206なら四捨五入して101.21
0.0350119なら四捨五入して0.035012
とかです 有効桁5桁を残して四捨五入するということです

828 名前:デフォルトの名無しさん :2006/09/24(日) 17:11:12
BCC Developer使ってHello World作ったんだけど
exeが一瞬しか表示されないのですがなぜでしょうか。。
たぶん、プログラムじゃなくて漏れのPCが原因だと思うんだが・・

よかったら誰か教えてくれ・・・

http://www.uploda.org/uporg526158.zip.html

829 名前:デフォルトの名無しさん :2006/09/24(日) 17:15:41
連投スマソ(*_ _)人
exeが一瞬ってのは実行したら
一瞬Hello World!ってでてプログラムが終了してしまう・・
Developer使って実行したらちゃんと閉じる押すまで閉じることはないんだが
なぜなんでしょうか。。。?

830 名前:デフォルトの名無しさん :2006/09/24(日) 17:15:46
>>827 コード書けよクズ

831 名前:デフォルトの名無しさん :2006/09/24(日) 17:20:37
>>828
環境依存な話はスレ違い。そういうのはこっち。
【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145593/

832 名前:デフォルトの名無しさん :2006/09/24(日) 17:21:58
>>831
(;゚д゚)ァ.... どうも、スレ汚してすみませんでした。(_ _(--;(_ _(--; ペコペコ
あと、URL d(゚Д゚)☆スペシャルサンクス☆( ゚Д゚)b

833 名前:(^-^) ◆MONSOON/qo :2006/09/24(日) 17:24:18
>>829
printf("Hello World!\nキー押してね");
int a=getchar();

に変更してみて

834 名前:デフォルトの名無しさん :2006/09/24(日) 17:29:48
>>833
糞コード

835 名前:デフォルトの名無しさん :2006/09/24(日) 17:30:34
>>833 いい加減に「スレ違い」というものを覚えろカス

836 名前:デフォルトの名無しさん :2006/09/24(日) 17:49:13
カスがそんなこと覚えられるわけないじゃん。
カスに向かって説教するのがどれだけ無駄か理解しろ。

837 名前:デフォルトの名無しさん :2006/09/24(日) 17:56:56
親クラス Oya のポインタ oya** に、それを継承して作ったクラス Child をnewで割り当てるって出来ませんか?
動的に配列を割り当てたいんですけど

oya = new Child*[n];
for(int m = 0;m < X;m++)
    oya[m] = new Child[X];

とやればできるのかな?と思ったらコンパイル出来なかったんです。
oya = new Child*[n];
for(int m = 0;m < X;m++)
   oya[m] = new Child[X];

ならコンパイルはできたけど、当然エラーでました(当たり前ですよね)
多分、やり方が悪いだけできっと何かしら方法があると思うんです

ご教授願えませんでしょうか?お願いします

838 名前:デフォルトの名無しさん :2006/09/24(日) 18:05:04
>>837
上の例と下の例に違いが見つからないが

839 名前:デフォルトの名無しさん :2006/09/24(日) 18:12:55
あ、すいません。下のほう間違えました

oya = new Oya*[n];
for(int m = 0;m < X;m++)
   oya[m] = new Child[X];

とやったらコンパイルは出来たっていうのが正しいです。打ち間違えてすいません

840 名前:デフォルトの名無しさん :2006/09/24(日) 18:18:55
>>837
相談するときはエラーの内容を忘れずに。

841 名前:ららら :2006/09/24(日) 18:18:56
>>778 779 804 805 806
お返事ありがとうなのらー。
たしかに VC7.1 のバグっぽいのらー。
仕方ないのらー。。。

842 名前:763 :2006/09/24(日) 18:20:14
>>803
なるほど。そういう考え方もアリなのですね。

843 名前:デフォルトの名無しさん :2006/09/24(日) 18:22:26
>>827
有効桁数は数値からは分からないよな、したがって有効桁数と数値の組を扱わなくちゃならない
(10と10.00000000000の違い)
まぁ、ここまでくれば問題ないとおもうので略

844 名前:デフォルトの名無しさん :2006/09/24(日) 18:25:56
>>839
oya = new Oya*[n];
for(int m = 0; m < n; m++)
   oya[m] = new Child[X];

でいける。

845 名前:(^-^) ◆MONSOON/qo :2006/09/24(日) 18:32:29
>>843
普通の意味のとは違うんです
その数字が、数字として意味を持つ上位5桁ということです


846 名前:デフォルトの名無しさん :2006/09/24(日) 18:33:33
>>840
エラー内容ですが、VC++(環境依存で申し訳ないですが)だと、
メモリ0x00373164でハンドルされていない例外が発生しました。:0xC0000005 場所 0xffffffffを読み込み中にアクセス違反が発生しました

と出ます
このとき、変数の状態を見てみると、oya[0]にはChildクラスのオブジェクトが割り当てられており、本来はoya[0][0]にChildクラスが割り当てられていて欲しいのですが、そうなっていなくて、oya[0][1]へアクセスしようとすると失敗するようです

>>844
そのやり方でできなかったのでご相談しているのですが・・・
ひょっとして、これって一次元配列のやり方として正しいっていうことでしょうか?
さっき配列とだけ書いたので良くなかったですね
僕がしたいのは二次元配列として扱う場合なんです

847 名前:デフォルトの名無しさん :2006/09/24(日) 18:36:29
>837
無駄に解りにくいな。

要するに
class Child : public Oya
だとしても
Oya *oya = new Child[X];
はやっちゃ駄目。
配列をポリモーフィックに扱うな

848 名前:デフォルトの名無しさん :2006/09/24(日) 18:39:42
>>847
まとめてくれてありがとうございます。

配列を扱ってはいけないんですか?
理由がよくわかりませんが・・・
そういうことができるのがオブジェクト指向だと思っているのですが・・・勘違いでしょうか?

849 名前:デフォルトの名無しさん :2006/09/24(日) 18:49:37
>>848
いい加減にしろ
うざいんだよ
入門書読み直せ糞がき

850 名前:デフォルトの名無しさん :2006/09/24(日) 19:01:07
>848
array[i] = *(array + i)
ポインタの加算
sizeof(Oya)とsizeof(Child)

851 名前:デフォルトの名無しさん :2006/09/24(日) 19:23:46
>850
なるほど。そういうことだったんですね
ん〜・・・
そうなると、こういう風に二次元配列で派生クラスがいろいろ並んでいる状態を作るってC++ではできないんですか?
Javaだと普通に出来たので、C++でも出来ると思ったのですが


852 名前:デフォルトの名無しさん :2006/09/24(日) 19:29:59
>851
ポインタの二次元配列を使え。Java だって参照使ってるんだから同じことだろ?

853 名前:812 :2006/09/24(日) 19:35:49
>>814さん
>>815さん
わかりやすい説明ありがとうございました
いままで、malloc()でpwork = pchar = malloc(size + 1);のような使い方
をしたことがなく、知識不足でした。
解釈がまちがってたらすいませんが、片方をdeleteしたら、両方のポインタ変数君の居場所
は無くなると思っておきます。

854 名前:デフォルトの名無しさん :2006/09/24(日) 20:06:54
>>853
用語はちゃんと理解するようにしたほうがいいよ。
この先、本や他の人の話を聞いて勉強するためにも。

>>853が「ポインタ変数君の居場所」をどういう意味で使っているかは分からないが、
ポインタとかポインタ変数というのが pworkと pchar。
ポインタのアドレス(ポインタがメモリ上のどこにあるか、つまり居場所)は &pwork, &pcharで得られる。
deleteで削除するのはポインタ変数の居場所(&pwork, &pchar)ではなく、
ポインタ変数に格納していた値が指す領域(= malloc()で確保した領域)。

>>812
>pcharとpworkにメモリ割り当てをしているのはなんとなくわかるんですが
これを見ると勘違いしているっぽいが、
mallocするかどうかに関係なく、pcharとpworkはサイズを持った変数としてメモリ上に存在する。
malloc()で確保した領域はこれらとは全く無関係の領域で、その領域の場所を
たまたまpcharとpworkに入れただけ。

絵を描いてみるといいよ。

855 名前:854 :2006/09/24(日) 20:09:43
mallocとdeleteが混在してしまって余計な混乱を招いていたらスマンです。
書く必要ないと思うけど念のため。
mallocした領域はfreeで、newした領域はdeleteで解放して。

856 名前:デフォルトの名無しさん :2006/09/24(日) 20:11:05
>>854
かまちゃだめだ。この人、おかしい人なんだからさ。

857 名前:デフォルトの名無しさん :2006/09/24(日) 21:43:15
オ、オマエモナー

858 名前:812 :2006/09/24(日) 22:58:57
>>854さん
ご忠告ありがとうございます。
malloc()は、C言語で構造体で線形リストや、双方向リストを作るときに
構造体のメンバのポインタ変数に対してや、構造体ポインタにのみにしか使ってなく
まだまだ、経験知識不足でした。
もう一度C言語で抜けている知識を再確認して勉強し直します。



859 名前:デフォルトの名無しさん :2006/09/24(日) 23:03:50
メモリッ!!アアアロケエタアアアアアアアアアアアアアアアアアアアアアアアアア!!

860 名前:デフォルトの名無しさん :2006/09/24(日) 23:38:18
つ【3byte】

861 名前:デフォルトの名無しさん :2006/09/25(月) 00:07:03
つ【512kB】

862 名前:デフォルトの名無しさん :2006/09/25(月) 13:01:56
すいません。おしえてください。

char** pchar = new char*[3];
for (int i=0;i<3;i++) pchar[i]= new char[3];
とかで、ヒープに3×3の配列つくると、

pchar[0][0]〜pchar[0][2]は、連続するアドレスに領域確保されますが、
pchar[0][2]と、pchar[1][0]の間は、かなり空きが生じます。

このような空きは、やっぱり、ヒープ領域で非効率な無駄になっているのでしょうか。
別に9個の連続する配列つくっといて、そのアドレスを1次元配列のポインタに代入して
3×3の配列つくったほうが、効率的なんでしょうか。

普通はあんまり気にしなくていいものなんでしょうか?

863 名前:デフォルトの名無しさん :2006/09/25(月) 13:08:14
>>862
かなり無駄。

864 名前:デフォルトの名無しさん :2006/09/25(月) 13:09:30
よっぽどメモリが苦しい状況で無い限り気にしない。
それよりも分かりやすさ/読みやすさを優先する。
俺は。

865 名前:デフォルトの名無しさん :2006/09/25(月) 13:11:49
空きがどうとかいう以前に、前者はポインタ3つ分(32bit環境でchar12個分)メモリが余計に必要なわけだが。

866 名前:862 :2006/09/25(月) 13:16:17
>>865
実際のプログラムでは、配列はcharでなく、ポインタ40byteくらいのオブジェクトになります。

867 名前:デフォルトの名無しさん :2006/09/25(月) 13:17:31
打つのミスりました。
実際のプログラムでは、配列はcharでなく、40byteくらいのオブジェクトで、
40×250くらいの配列になります。

868 名前:デフォルトの名無しさん :2006/09/25(月) 13:25:02
別に9個の……ってこういう事?

char** pchar = new char*[3];
pchar[0] = new char[9];
for (int i=0;i<3;i++) pchar[i] = pchar[0] + 3 * i;

たいていの場合、無視出来る無駄。好きにしたら。

869 名前:862 :2006/09/25(月) 13:31:01
スタック領域が一杯一杯になって、ヒープ領域に持ってったんで、ちょっと神経質になっていました。
ヒープならあんまり無駄を気にすることもないんですね。
みなさんのご意見参考になりました。
ありがとうございました。

870 名前:デフォルトの名無しさん :2006/09/25(月) 13:58:00
そんなに心配ならchar *p = new char[3 * 3];として、
p[0 * 0] ~ p[3 * 3]とアクセスすることにすればいいだろ。

871 名前:デフォルトの名無しさん :2006/09/25(月) 14:11:50
確かにp[3*i+j]でアクセスすればいけるですね。
でもさすがにそれだと読みにくさが勝るですね。

872 名前:デフォルトの名無しさん :2006/09/25(月) 14:16:53
template < typename T >
inline
T & at(T * p, int len, size_t i, size_t j)
{
  return p[i * len + j] ;
}

873 名前:デフォルトの名無しさん :2006/09/25(月) 14:27:08
template<typename T>
class array_adapter
{

874 名前:デフォルトの名無しさん :2006/09/25(月) 14:28:16
template<typename T>
class array_adapter
{
public:
T *operator[](int i)
{
};


875 名前:デフォルトの名無しさん :2006/09/25(月) 14:33:57
template<typename T,int X>
class array_adapter
{
T *array;
public:
array_adapter(T *a) : array(a) {}

T *operator[](int i)
{
 return array + X * i;
}
};

876 名前:862 :2006/09/25(月) 14:41:00
template って便利そうですね。
勉強してきます。

877 名前:デフォルトの名無しさん :2006/09/25(月) 22:31:09
世にも奇妙な世界へようこそ
お勧めの参考書は>>8

878 名前:デフォルトの名無しさん :2006/09/25(月) 23:39:13
C++でO/Rマッピングを使いたいのですが何かツール知りませんか?

879 名前:デフォルトの名無しさん :2006/09/26(火) 01:59:42
質問。例外仕様ってどうやって使ってる?

今までデストラクタやswapにthrow()と書いていたんだけど、
unexpectedするだけでさほど意味ないんじゃないかと思うようになって。


880 名前:デフォルトの名無しさん :2006/09/26(火) 02:06:30
初めまして、インターネットを通じる以外にコンパイラー等を
手に入れる方法はございませんか??
参考書等についていたりしませんか??
そういった参考書をお知りでしたら、教えてください。どうかお願いします。

881 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 02:11:40
>>880
本屋で探せば見つかるだろうけど
ネットを開通した方が安いし困ったときも便利

882 名前:880 :2006/09/26(火) 02:27:37
>>881
お勧めのサイトありますか??
もう一度がんばってみたいです。
ここで、これを諦めたらだめな気がします。

883 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 02:31:57
>>882
無料のコンパイラはVisual Stdioだとおもうよ
これなら書籍でも付いてるとおもう
http://www.microsoft.com/japan/msdn/vstudio/express/

884 名前:880 :2006/09/26(火) 02:34:26
>>883
この中のvisual C++でいいのですか??

885 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 02:38:38
>>884
それでいいけど
書籍を購入する程度の入門レベルだと
BCC Developer(とボーランドc++)がお勧めだよ

886 名前:デフォルトの名無しさん :2006/09/26(火) 02:40:40
aoe

887 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 02:40:51
>>884
BCC Developerはここ
サイズも小さいし教科書、入門書どおりのプログラムがそのまま動く(Visual C++はそうではない)

http://www.hi-ho.ne.jp/jun_miura/bccdev.htm

888 名前:880 :2006/09/26(火) 02:55:26
>>883-887
やはりできませんでした・・・。cpadもどこなのかわからないし・・・orz
なんでだろう・・・。本買って始めた方が効率よさそうです・・・。
883にはってある物はどうやってうごかせばいいのですか??

889 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 02:57:34
>>887の方が簡単だって
ちょっと待ってて直リン貼り付けるから


890 名前:880 :2006/09/26(火) 03:00:02
>>889
ほんとうにすいませんorz

891 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:00:24
>>888
上から順にインストールすれば完了

ftp://ftp.borland.co.jp/pub/cppbuild/freecommandlinetools2.exe
ftp://ftp.borland.co.jp/pub/cppbuild/freecommandlinetools_update.exe
http://www.cmagazine.jp/download/setbcc15b.exe
http://www.hi-ho.ne.jp/jun_miura/download/bccdev1221.lzh



892 名前:デフォルトの名無しさん :2006/09/26(火) 03:04:37
おぉぉっばかがふたりになったっ

893 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:04:55
>>891がダウンロードできない場合、ダウンロードツールを使うと出来るからインストールして

http://www.geocities.co.jp/SiliconValley-SantaClara/1908/files/182a/NT2Setup_multi.zip

894 名前:880 :2006/09/26(火) 03:11:46
>>891
ただいま、デスクトップにすべてインストールいたしました。
この次はどうすればいいですか??

895 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:13:09
>>894
ダウンロードしたって事?
そのあとfreecommandlinetools2.exeなどをクリックして実行

896 名前:880 :2006/09/26(火) 03:15:00
freecommandlinetools2.exeのインストール先はそのままでいいのですか??

897 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:16:09
>>896
そのままでいいけど
問題があれば変更も可

898 名前:880 :2006/09/26(火) 03:20:26
>>897
解凍?できました。
次は何をすればいいですか??

899 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:21:52
>>896
bccdev1221.lzhは解凍して
c:\Program Filesの中にディレクトリ付きで入れる
そのあとBccDev.exeを実行してツール→環境設定でコンパイラを設定すると完了

900 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:22:29
>>898
setbcc15b.exeまでいきましたか?

901 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:24:40
>>898
setbcc15b.exeを実行するとディレクトリの中にsetbcc.exeがあるはず
これを実行して指示に従ってください

902 名前:880 :2006/09/26(火) 03:25:39
すいません、ディレクトリとは??無知すぎてすいませんorz


903 名前:デフォルトの名無しさん :2006/09/26(火) 03:31:31
>>902
C++とかVBとかC#とかいう以前に、
PCのことある程度知らないとPCのプログラム書くのは無理。

904 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:31:42
>>902
ディレクトリ = フォルダ
黄色い書類入れのようなアイコンのやつです

905 名前:880 :2006/09/26(火) 03:32:03
>>901
setbcc15bを実行し設定はそのままで実行しましたが
setbccはあったのですが、exeがついてませんがこれでよかったですか??

906 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:35:18
>>905
それでいいです

907 名前:880 :2006/09/26(火) 03:38:31
>>906
これであとはBccDev.exeとやらを実行すればいいのですか??
あと、こちらのファイルはどこにありますか??

908 名前:デフォルトの名無しさん :2006/09/26(火) 03:40:18
今更BCC薦めんのってどうよ。

909 名前:880 :2006/09/26(火) 03:46:43
>>908
すいません。

910 名前:デフォルトの名無しさん :2006/09/26(火) 03:47:11
この流れは何?

911 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:47:18
>>907
最後にbccdev1221.lzh 
(WindowsXPならクリックすると中が見られるはず、違うなら解凍ソフトが必要)
を解凍して>>899の通りに設定すれば完了

>>908
Visual C++2005はコードも(教科書にあるような)普通のが通らないし色々と難しい

912 名前:880 :2006/09/26(火) 03:53:45
>>911
このネジのようなやつですか??

913 名前:デフォルトの名無しさん :2006/09/26(火) 03:56:23
>Visual C++2005はコードも(教科書にあるような)普通のが通らないし色々と難しい

この前提がそもそも間違ってる気がするんだがどうよ。
具体的にどんなコードが通らないんだ。
どの本のコードが通らないかがわかるだけでもいいぞ。

914 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 03:58:54
>>912
そう、
そしてツール、環境設定、コンパイラの所を
C:\bcc5.5\Bin\bcc32.exe (フォルダが違うかもしれないけど)に設定すればOK

915 名前:880 :2006/09/26(火) 04:03:02
>>914
なんとか環境設定まではできたのですが
今まで使っていたものと違うのですが
どこに文字というか、言語をうてばいいのですか??

916 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 04:03:37
>>913
↓これが通らん

#include <stdio.h>
main(){
printf("Hello World!\n");
}

fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?

917 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 04:07:20
>>915
ファイル→新規作成→プロジェクト名を適当につける→
再び、ファイル→新規作成→
C/C++ファイルのファイル名で****(適当なファイル名).cpp
を入れてOK

918 名前:デフォルトの名無しさん :2006/09/26(火) 04:07:22
>>916
まあ、VSのIDEのデフォルトの設定でやると自動的にプリプロセッサが有効になるので通らんな。
というかそのコードはC++として通らないけど。
いくらCでおkったってそういう暗黙の了解の下に成り立っているコードは嫌いだ。

919 名前:デフォルトの名無しさん :2006/09/26(火) 04:07:33
どうみてもスレ違いっつーか鼬害です。

920 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 04:11:26
>>915
いつも使ってたやつがいいならこちらをダウンロードしてください
CPad for Borland C++Compiler

http://www.vector.co.jp/soft/win95/prog/se141451.html

921 名前:880 :2006/09/26(火) 04:19:50
>>920
ほんとなにからなにまでありがとうございました。
あと、スレ違いでしたら本当にすいませんでした。

しかしいつも通りHello,worldを実行しようとしたらエラーがでてしまいましたorz

922 名前:デフォルトの名無しさん :2006/09/26(火) 04:23:42
チャットとして使うなよ
こんなのまでログに残すのか?

923 名前:デフォルトの名無しさん :2006/09/26(火) 04:23:50
そういう時はエラーの出たソース、エラーの内容、使ってる環境、その全てを書くんだ。
情報を小出しにしてはいかん。
大抵の場合、見る人が見れば一発でわかるエラーだったりするもんだ。
そんなんで蹴躓くなんてもったいないだろう?
スレ常駐のベテランの手を借りるんだ。
あの変なコテはベテランじゃねーっぽいので放置の方向で。

924 名前:デフォルトの名無しさん :2006/09/26(火) 04:38:47
だからここは初心者向け開発環境構築スレじゃねぇって。

925 名前:880 :2006/09/26(火) 04:45:03
#include <stdio.h>


int main(void)

{

printf("Hello, world");

return 0;

}

エラー F1009 c:\documents and settings\\my documents\0\a\aa.cpp: 入力ファイル 'c:\documents and settings\\my documents\0\a\aa.cpp' をオープンできない
*** 1 errors in Compile ***

** error 1 ** deleting Debug\aa.obj

Compile End !! (Elapsed time 0:00.078)

環境はBCC Developerです。

えっと・・すいませせん。なんででしょうか??

926 名前:デフォルトの名無しさん :2006/09/26(火) 04:48:23
>>880
今は1から10まで全部教えて貰って、やっとの事で環境構築したわけだが。
たかが環境構築で躓く段階で、何も調べる能力が無いことが明らか。

断言してもいいが、このままじゃおまえさんは何も出来はしないぞ。
インスコしたbccだって無駄になるだけだ。
自分の作りたいものに関して、1から100まで全て他人に質問して済ませるつもりか?

927 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 04:50:54
>>925

> \\my documents\ ← ここの\\が怪しい



同じような症例がここに
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2035273




928 名前:デフォルトの名無しさん :2006/09/26(火) 04:52:15
単にユーザ名入ってたのを手で消したってオチと違うのか。

929 名前:880 :2006/09/26(火) 04:55:31
>>926
最初から1〜10まで教えてもらっていたわけではありません。
最初はいろんなホームページを探し回って、きときとさんだったかな??
そのcpadつかっていろいろやってましたが、
途中からエラーがとまらなくなって
また新しくインストールしようと思ったらできなくて
どうしたらいいかわからなくなっていたのでorz
すいません。

930 名前:880 :2006/09/26(火) 04:57:05
>>928
そうです。書き込むのにさすがに本名入ってるのはどうかと思いまして・・・

931 名前:(^-^) ◆MONSOON/qo :2006/09/26(火) 04:59:40
>>930
日本語が入ってるとBCCがコンパイル失敗する模様
日本語が入ってない場所に保存するとOK

ファイル→新規作成 で日本語でないディレクトリ名に変更する

932 名前:デフォルトの名無しさん :2006/09/26(火) 05:08:18
スレ間違えたかとおもた

933 名前:デフォルトの名無しさん :2006/09/26(火) 06:43:32
なんかwww

934 名前:デフォルトの名無しさん :2006/09/26(火) 07:09:53
BCCスレなり何なりに誘導すればよかったんじゃね。

935 名前:デフォルトの名無しさん :2006/09/26(火) 07:53:25
>>929
>921で過ちに気付きながら何故未だ居座る。いい加減、BCCスレなりに逝け。

>>931
おまえもだ、この馬鹿珍。

936 名前:デフォルトの名無しさん :2006/09/26(火) 09:19:52
コンテナの標準のイテレータと少し挙動の違うイテレータを定義しようと思っています。
イテレータクラスを定義する為のテンプレートって用意されているのでしょうか?
また独自のコンテナもどきのライブラリを作ったときにイテレータを用意する為に
使える便利なテンプレートってあるのでしょうか?

937 名前:デフォルトの名無しさん :2006/09/26(火) 09:47:32
>◆MONSOON/qo
>◆MONSOON/qo
>◆MONSOON/qo
>◆MONSOON/qo
>◆MONSOON/qo

938 名前:デフォルトの名無しさん :2006/09/26(火) 09:51:39
>>936
boost::iterator_facade, boost::iterator_adaptor

本当に何も頼らず1から作るならstd::iterator。最低限必要なtypedefをしてくれるだけ。

939 名前:デフォルトの名無しさん :2006/09/26(火) 09:58:55
新着レス 60
  _, ._
( ゚ Д゚)?



>◆MONSOON/qo
>880
>◆MONSOON/qo
>880
>◆MONSOON/qo
  _, ._
( ゚ Д゚)…

940 名前:デフォルトの名無しさん :2006/09/26(火) 10:03:23
新手の荒らし

941 名前:デフォルトの名無しさん :2006/09/26(火) 11:09:07
いまさら BCC とか言ってる時点で…

942 名前:デフォルトの名無しさん :2006/09/26(火) 11:35:27
一年ぐらい前から◆をNG登録してある俺が賢い

943 名前:デフォルトの名無しさん :2006/09/26(火) 11:38:07
釣り自演だから相手すんな

944 名前:デフォルトの名無しさん :2006/09/26(火) 11:56:09
boost::shared_ptr等のスマートポインタで if( sp ) { … } と書けるように
operator bool() や operator unspecified_bool_type() としているようですが
このunspecified_bool_typeがメンバ関数のポインタなのはなぜなのでしょうか?

あと、VC++ではoperator unspecified_bool_type()の方が使われましたが
operator bool()でも同じことが出来るようです。
operator unspecified_bool_type()を採用する理由はなんなのでしょうか?

945 名前:デフォルトの名無しさん :2006/09/26(火) 12:22:50
>>944
(1 + sp) がコンパイルできたら困るだろ。

946 名前:デフォルトの名無しさん :2006/09/26(火) 12:43:40
>>945
あ、なる。そういう理由だったんですか。
ありがとうございました。

947 名前:デフォルトの名無しさん :2006/09/26(火) 14:25:04
>>938 有難うございました。
これで自作コンテナクラスもどきも
一人前にイテレータを持つことができます。
立派になったもんです。

948 名前:デフォルトの名無しさん :2006/09/26(火) 20:50:54
class A {
  public:
  A(){};
};
A *a = new A();
A *b = new A;

この違いってありますか?

949 名前:デフォルトの名無しさん :2006/09/26(火) 21:16:56
ない

950 名前:デフォルトの名無しさん :2006/09/26(火) 21:27:47
A()は関数かと思われちゃう事があるね

951 名前:デフォルトの名無しさん :2006/09/26(火) 21:48:43
ねーよw

952 名前:デフォルトの名無しさん :2006/09/26(火) 21:53:04
>>951
A A(); のことだろ。

953 名前:952 :2006/09/26(火) 21:55:07
間違えた。
×:A A();
○:A a();

954 名前:デフォルトの名無しさん :2006/09/26(火) 22:08:11
>>950
たしかコンパイラがそんな感じの間違いをすることがあるっけ。


955 名前:デフォルトの名無しさん :2006/09/26(火) 22:08:24
>>953
それと>>951になにか関係あるのか?
A()と全然形が違うじゃないか

956 名前:デフォルトの名無しさん :2006/09/26(火) 22:43:24
>>879
亀レスだが
例外処理
http://pc8.2ch.net/test/read.cgi/tech/1142667446/

957 名前:デフォルトの名無しさん :2006/09/26(火) 22:45:34
>>948
組込型なんかでは0初期化をするかどうかという違いがあったはず。
コンストラクタで初期化がないクラスのメンバにも同じことが適用された気がする。

958 名前:デフォルトの名無しさん :2006/09/26(火) 22:54:22
なんかパソコン初心者から、C++詳しい人まで色々いるな
でも、この雰囲気好き。
偉そうな文体で、「それくらいしっとけ」みたいな書き込みばっかりで
肝心な質問に対しての答えをかかない、別スレとは大違い。

959 名前:デフォルトの名無しさん :2006/09/26(火) 22:58:30
どこの誤爆だ

960 名前:デフォルトの名無しさん :2006/09/26(火) 23:16:02
>>955
>>948の場合は(クラスなので)違いはないが(クラス以外だと>>957)
A a;  // A型のオブジェクトaの宣言(と定義)
A a(); // Aを返す引数なしの関数aの宣言
のような全く別のものなので、newする時の感覚で常に()をつけていると
(特に他言語から入った人が)たまに間違えたり、
コンパイルエラーが出たりする、ということを言いたいのでしょう。

961 名前:デフォルトの名無しさん :2006/09/26(火) 23:47:23
ぇ?違いあんの?

>>957が言ってるのは
class A
{
int i;
};

A *a = new A(); or A;
でiが0初期化されるとか?

962 名前:957 :2006/09/27(水) 00:28:23
>>961
そのこと。もし勘違いだったらすまんな。

963 名前:デフォルトの名無しさん :2006/09/27(水) 00:29:52
VC++6.0 MFC(ダイアログベース)

下記のソースコードを実行しても
ファイルがカキコミできません。
どなたか、ファイルが書き込みできない理由を
教えてください。

void CXfile_MotionReaderDlg::OnButton1()
{
CFileDialog *dlgFile;

dlgFile = new CFileDialog(
TRUE, // 種類 TRUE : FileOpen
_T("jpg"), // デフォルトの拡張子
_T("*.jpg"),// 初期ファイル名
OFN_FILEMUSTEXIST, // ダイアログの設定フラグ:既存のファイル
_T("Wave(*.jpg)|*.jpg|全て(*.*)|*.*||")// フィルタ
);

if(dlgFile->DoModal() == IDOK)
{
CStdioFile fout( "file.text", CFile::modeCreate | CFile::modeWrite | CFile::typeBinary );
fout.WriteString( dlgFile->GetPathName() );
fout.Close();
}

delete dlgFile;

}

964 名前:デフォルトの名無しさん :2006/09/27(水) 00:42:48
>>963
多分、カレントディレクトリがCFileDialogのダイアログを操作したことで移動してる。
どっかのディレクトリに"file.text"が出来てると思うよ。

965 名前:964 :2006/09/27(水) 00:46:26
つーかスレ違い

■MFC相談室 mfc16d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1146117893/

966 名前:879 :2006/09/27(水) 00:53:48
>>956
専用スレがあったのね。さんくす


967 名前:デフォルトの名無しさん :2006/09/27(水) 01:10:14
質問です。XP、VC++ 2005 です。
std::string の c_str() に関してです。

---------------------
std::string str = "hogehoge";

WNDCLASSEX wcex;
wcex.lpszClassName = str.c_str();
……(中略)

RegisterClassEx(&wcex);


上記のような内容で、RegisterClassEx に失敗しました。
ところが、str の内容を変更するだけで、登録に成功したりしなかったりします。
そこで私は、c_str() で渡されたポインタが RegisterClassEx の段階で有効である保証がなく、
上記のような渡し方は間違っている、とのように考えました。
解決法として、char 型の配列に一旦文字列をコピーしています。

ところが、API に string を渡すときなどは、
HogeHogeAPI(str.c_str());
などのように、c_str() の戻り値を直接渡しているサンプルをよく見かけます。

この場合は、返されるポインタが有効であることは保証されるのでしょうか。
また、最初の例のような場合は、char の配列などにコピーする方法は正しいのでしょうか?

よろしくお願いします。


968 名前:デフォルトの名無しさん :2006/09/27(水) 01:18:15
>>967
string インスタンスが生きてて、変更を加えない限りは有効。
有効なうちに API に渡していれば、 API が内部でポインタを
保存するような仕様でない限り、問題無い。 char 配列へのコピーは不要。
RegisterClassEx() が失敗した原因は GetLastError() で調べるように。

969 名前:デフォルトの名無しさん :2006/09/27(水) 01:22:17
>>967
その辺りは、APIの実装に大きく依存することになるので詳細はAPIスレでどうぞ。
要は、そのAPIが必要としているものは何かが微妙に異なるのだろう。

970 名前:967 :2006/09/27(水) 01:29:13
>>968-969
GetLastError() を行うことを失念していました。
よく分かりました、ありがとうございます。


971 名前:デフォルトの名無しさん :2006/09/27(水) 10:16:42
VisualC++6.0とEasyLinkLibraryでDirectXを使って簡単なプログラムを作っています
しかし、プログラムを実行する方法が
VisualC++の開発画面上でコンパイルする方法しか解りません

Windows上でアイコンをクリックして普通のアプリケーションとして起動させるには
どうすればいいのでしょうか?


972 名前:デフォルトの名無しさん :2006/09/27(水) 10:25:32
>>971
C++ 関係ない。スレ違い。↓こっち逝け。

【初心者歓迎】C/C++室 Ver.30【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1156145593/

その質問内容でそのまま移動しても
「アイコンクリックすればいいんじゃね?」で終了なので、
「やりたいこと」と「やったこと」と「どうなったのか」を全部
正確に書くように。

973 名前:デフォルトの名無しさん :2006/09/27(水) 12:21:46
c++とマスキャドってどっちがすぐれてますか?

974 名前:デフォルトの名無しさん :2006/09/27(水) 12:55:14
パッキャラマドの方が優れてます

975 名前:デフォルトの名無しさん :2006/09/27(水) 13:24:25
もしかして:バッキャマラド

976 名前:デフォルトの名無しさん :2006/09/27(水) 13:39:49
Au pas camarades Au
パが正解な気がする

977 名前:デフォルトの名無しさん :2006/09/27(水) 14:13:32
それ、何語?

978 名前:デフォルトの名無しさん :2006/09/27(水) 14:38:42
フランス語っぽい。

979 名前:デフォルトの名無しさん :2006/09/27(水) 14:42:25
>>978
もしかしなくてもフランス語、
僕の大好きなクラリネット〜♪
って曲の歌詞の一部

980 名前:デフォルトの名無しさん :2006/09/27(水) 14:44:01
ご幼少のミギリから疑問だった
どういう意味?

981 名前:デフォルトの名無しさん :2006/09/27(水) 14:52:00
pas
名詞: 踊り
助動詞: 否定

camarade
名詞: 仲間

982 名前:デフォルトの名無しさん :2006/09/27(水) 14:53:27
全文
ttp://www.frmusique.ru/texts/divers/jaimeloignonfrit.htm

983 名前:デフォルトの名無しさん :2006/09/27(水) 14:54:06
直訳すると、「仲間と足並みを揃えて・・・」位の意味になるのか。

984 名前:デフォルトの名無しさん :2006/09/27(水) 14:57:34
Altavistaによる英訳

I like onion fried with oil
I like onion when it is good.
I like onion fried with oil
I like onion when it is good.
I like onion fried with oil
I like onion when it is good.
I like onion fried with oil
I like onion when it is good.
With the step comrades,
the step comrades,
the step, the step, the step!
With the step comrades,
the step comrades,
the step, the step, the step!
With the step comrades,
the step comrades,
the step, the step, the step!
With the step comrades,
the step comrades,
the step, the step, the step!
One will bore the side to them
One will bore the Rantanplan side to them draws lira Rantanplan
One will bore the side to them Which we will laugh

985 名前:デフォルトの名無しさん :2006/09/27(水) 15:01:42
つーか980過ぎたじゃん。次スレをそろそろ・・・・

986 名前:デフォルトの名無しさん :2006/09/27(水) 15:05:56
>>982>>984
ここに考察あり
ttp://homepage3.nifty.com/kazano/diary9906b.html

987 名前:デフォルトの名無しさん :2006/09/27(水) 15:34:14
タマネギかよ!!!!
タマネギなのかよ!!!!!

あれほど大騒ぎしたその結末が、
タマネギなのか!!!!

もう、絶望した。

988 名前:デフォルトの名無しさん :2006/09/27(水) 15:57:48
次スレ
C++相談室 part53
http://pc8.2ch.net/test/read.cgi/tech/1159340181/

989 名前:デフォルトの名無しさん :2006/09/27(水) 15:59:53
どこかに任意のタイミングでファイルオープンとファイルクローズが出来るデバックツールってないですかね?
CreateFileとかCopyFile等の動作チェック用です。
自分で作ってもいんですが、既に多機能な機能やグラフィカルなツールがあるかもしれないので、探しています。
よろしくおねがいします。

990 名前:デフォルトの名無しさん :2006/09/27(水) 16:00:43
ちょw
まあいいか、お疲れ様です。

991 名前:デフォルトの名無しさん :2006/09/27(水) 16:02:04
埋め

992 名前:デフォルトの名無しさん :2006/09/27(水) 16:02:22
埋め

993 名前:デフォルトの名無しさん :2006/09/27(水) 16:02:37
埋め

994 名前:デフォルトの名無しさん :2006/09/27(水) 16:02:57
埋め

995 名前:デフォルトの名無しさん :2006/09/27(水) 16:03:20
埋め

996 名前:デフォルトの名無しさん :2006/09/27(水) 16:03:40
埋め

997 名前:デフォルトの名無しさん :2006/09/27(水) 16:03:46
斜視

998 名前:デフォルトの名無しさん :2006/09/27(水) 16:03:48
埋め

999 名前:デフォルトの名無しさん :2006/09/27(水) 16:03:57
埋め

1000 名前:デフォルトの名無しさん :2006/09/27(水) 16:04:22
埋め


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.