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


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

C++相談室 Part3
751 名前:デフォルトの名無しさん :01/12/11 10:34
http://www.cbook24.com/bm_detail.asp?sku=01121057

出る!

752 名前:デフォルトの名無しさん :01/12/11 13:29
>>751
値段になっとくいかねー。なんでこんな安いんだ。まっとけばよかった・・

753 名前:デフォルトの名無しさん :01/12/11 14:46
>>751
うっはぁ! ついさっき、amazon で原書を注文しちゃったよ。
キャンセルしてこよー。

754 名前:デフォルトの名無しさん :01/12/11 15:42
この本ってプロとしてC++で開発する立場なら読んでおくべき?
「お約束」くらい大事な本?

755 名前:デフォルトの名無しさん :01/12/11 16:05
>>754
娯楽用だと思っておく方がいいと思われ(笑) でないと応用に苦しむ。

756 名前:デフォルトの名無しさん :01/12/11 16:29
クラステンプレートの中でテンプレートのフレンド関数を宣言するやり方を
教えてください。たとえば、g++ では、以下のコードをコンパイルできます。

template<class T> class A {
  friend bool operator==<T>( const A& x, const A& y );
};

template<class T> bool operator==( const A<T>& x, const A<T>& y )
{
  return true;
}

int main()
{
  return 0;
}

しかし、VC++ だと、2行目の operator==<T> の 「<T>」を削除しないと
コンパイルできませんでした。ところが、これを削除してしまうと、g++ では、

template_friend.cpp:2: warning: friend declaration `bool operator==(const
A<T>&, const A<T>&)' declares a non-template function

template_friend.cpp:2: warning: (if this is not what you intended, make sure
the function template has already been declared and add <> after the
function name here) -Wno-non-template-friend disables this warning.

というような warning が出ます。前のほうで何かうまいプロトタイプ宣言とかを
すればよいのかな?

757 名前:デフォルトの名無しさん :01/12/11 16:49
>>755
おーこれすげーみたいな?
実際の現場で使えるかどうかは別問題って事かな?

758 名前:デフォルトの名無しさん :01/12/11 18:48
>>756
これでは駄目なの?

template<class T> class A {
friend bool operator==(const A<T>& x, const A<T>& y);
};

template<class T> bool operator==(const A<T>& x, const A<T>& y)
{
return true;
}

int main()
{
return 0;
}

759 名前:デフォルトの名無しさん :01/12/11 19:36
>>757
そのうち、この本の手法使ったclass libraryが増えてくるような気がする…

760 名前:デフォルトの名無しさん :01/12/11 20:47
STLport好きな人、教えてください。
STLportを使った自分のプロジェクトに、VC++6標準のSTLを使ったライブラリ(*.libと*.hが利用可能)を
組み込もうとしたんだけど、上手くいかないんですよう。リリースビルド時に例外起こして逝きます。
デバッガで追いかけてみたらdelete時にメモリ破壊してました(debugビルド時は平気)。
ライブラリのヘッダの
#include <vector>
でSTLportの方のvectorがincludeされてしまい、おそらくそれが原因では無いかと思っておるのですが。

761 名前:デフォルトの名無しさん :01/12/11 20:55
>>760
STLスレ逝け

762 名前:デフォルトの名無しさん :01/12/11 21:13
逝ってきます。

763 名前:742 :01/12/11 22:27
ウェー,アブネェ,アブネェ.
危うく原書チャレンジしちまうところだったよ・・・
これでまた俺の英語力は上がらんな(藁

764 名前:756 :01/12/12 00:23
>>758
引数の型の A のところに <T> を付けるわけですね。これもやりましたが、
やはり g++ では warning が出ます。class A の中での friend 宣言なので、
A が T を引数にとるテンプレートであることは、コンパイラにはわかって
いると思われます。

とりあえず、>>1 で示されているサイトにある標準仕様のドラフトを読んで
みることにします。

765 名前:デフォルトの名無しさん :01/12/12 00:59
>>764
標準仕様に沿わないのがVC++
コレ定説


せめてANSIには準拠して欲しいよなあ・・・

766 名前:Kusakabe Youichi :01/12/12 01:06
In article >>765, デフォルトの名無しさん/sage/765 wrote:

> >>764
> 標準仕様に沿わないのがVC++
> コレ定説
> せめてANSIには準拠して欲しいよなあ・・・

たとえばどの辺ですか?

767 名前:Kusakabe Youichi :01/12/12 01:06
In article >>765, デフォルトの名無しさん/sage/765 wrote:

> >>764
> 標準仕様に沿わないのがVC++
> コレ定説
> せめてANSIには準拠して欲しいよなあ・・・

たとえばどの辺ですか?

768 名前:Kusakabe Youichi :01/12/12 01:07
In article >>765, デフォルトの名無しさん/sage/765 wrote:

> >>764
> 標準仕様に沿わないのがVC++
> コレ定説
> せめてANSIには準拠して欲しいよなあ・・・

たとえばどの辺ですか?

769 名前:デフォルトの名無しさん :01/12/12 01:07
>>767

名称が。
確かANSIの規格書にはVisual C++という名前を付けてはいけなかったはず。

770 名前:  :01/12/12 03:35
eの値を小数点以下100桁まで求めるプログラムと
πの値を小数点以下100桁まで求めるプログラムを教えてください。

771 名前:デフォルトの名無しさん :01/12/12 12:21
>>767

for(int i=0; i<N; ++i);
for(int i=0; i<N; ++i);

とか、

template<class T>
class Hoge
{
template<class U>
T method(const U& u);
};

772 名前:デフォルトの名無しさん :01/12/12 17:45
>>771
あとは
void foo();
void bar()
{
  return foo();
}

これがコンパイルできないとか。(おかげで bind が微妙に使いづらい)

773 名前:デフォルトの名無しさん :01/12/12 18:09
>>772
要するにスコープから出るときにfoo()を実行したいということか?
bindってなに?

774 名前:デフォルトの名無しさん :01/12/12 20:09
質問というか素朴な疑問なのですが、
関数パラメータのデフォルト値に変数が使えない理由を知りたいです。

例えばブール変数をメンバに持ったクラスでトグル用のメンバ関数を定義するとき、
気持ち的には以下のようにしたいのです。

class my_bool {
public:
 bool elem;
 bool toggle(const bool& b=!elem) { // (*1)
  // 引数が指定されればelemを引数の値にセット
  // 引数が指定されなければelemを反転した値にセット
  elem = b;
  return elem;
 }
};

もちろんこれは(*1)のところでエラーがでます。
これが可能ならば上のような操作を簡潔に書けてハッピーなのですが、
デフォルト値に変数が使われると何かまずいことがあるのでしょうか?

775 名前:デフォルトの名無しさん :01/12/12 20:49
>>774

class my_bool {
public:
 bool elem;
 bool toggle(const bool& b) {
  return elem = b;
 }
bool toggle() {
  return elem = !elem;
 }
};

776 名前:デフォルトの名無しさん :01/12/12 20:59
元VB厨房です(藁
あのう、クラス内で文字列を宣言して、それを定数にする方法ってありますか。
っていうか(あればですが)文字列の定数を宣言する方法がわかりません。
どなたか教えていただけますでしょうか。

777 名前:デフォルトの名無しさん :01/12/12 21:05
>>770
eもπも大学の本読まなくちゃだめだぞ
テーラー展開とかそこらへん探せ
あとアークサインとかアークタンジェントとかも
キーワードだ。あれを整数でやるのはきついかな

778 名前:デフォルトの名無しさん :01/12/12 21:18
>>776
class Hoge{
public:
static const char* const str;
};
const char* const Hoge::str = "string-literal";

779 名前:774 :01/12/12 21:28
>>775
>>774に書いたのは簡単な例で、実際はトグルした後に長い処理があります。
ですからオーバーライドはしたくないのです。で、今どうやってるかというと、

class my_bool {
public:
 bool elem;
 bool toggle(const int& i=-1) {
  if (i<0) elem = !elem; else elem = (bool)i;
  return elem;
 }
};

としています。これでもとくに問題はないのですが、
5行面のconst intをboolに変えるところでwarningが出ますし
見た目も良くないなぁと。で>>774に書いた疑問を感じたのです。

780 名前:775 :01/12/12 22:02
>>779
>トグルした後に長い処理
その長い処理を関数にすればいいだけじゃないの? それをオーバーライド
してる関数2つに入れればいい。

>bool toggle(const int& i=-1) {
>   if (i<0) elem = !elem; else elem = (bool)i;
>   return elem;
>  }

「引数が指定されれば」という条件はソース書いてる時点で静的に判定
できる条件のはずなのにそれをわざわざ動的に判断する条件に読み替え
ようとしているようで気持ち悪いのだけど。

781 名前:デフォルトの名無しさん :01/12/12 22:50
普通に考えて関数の実引数は関数を使う場所のスコープだよな。

782 名前:デフォルトの名無しさん :01/12/12 23:46
>>776
もしそれが const なインスタンス変数ならば、コンストラクタの
初期設定リストを使わなければ初期値を設定することはできない。

783 名前:デフォルトの名無しさん :01/12/13 00:05
>>779
くだらん。何を悩んでるのかさっぱり。
class my_bool {
public:
 bool elem;
 bool toggle(const bool& b) {
  return elem = b;
 }
 bool toggle() {
  return toggle(!elem);
 }
};

784 名前:デフォルトの名無しさん :01/12/13 17:39
>>773
いや、そうじゃなくて。

普段 void を返すような関数に対して return foo(); なんて書くことはないんだけど、これがテンプレートを
使ってると良く出てくる。たとえば

class Object
{
public:
  virtual void DoSomething() = 0;
};

std::vector<Object*> v;
std::for_each(v.begin(), v.end(), std::mem_fun(&Object::DoSomething)); // *1

とかね。

std::mem_fun から展開される std::mem_fun_t はたいてい

template <typename TRet, typename TParam>
class mem_fun_t
{
  TRet operator(TParam* p) { return (p->*func)(); }
};

みたいに定義されているから TRet が void の場合 (上の Object::DoSomething() とか)だと
上の (*1) で VC6 だとコンパイルが通らなくなる。ANSI C++ 的にはコンパイルできるハズ。

> bindってなに?
bind は Boost.org にある boost::bind のこと。これを使うと引数を複数取ったり、参照をとる関
数に対しても関数オブジェクトが作れる。std::mem_fun, std::mem_fun_ret, std::bind2nd 捨て捨
てですよ。

class CTaskBall
{
...
  int exec(const IControllerTask& con, DWORD dwTick);
};

class CTaskBalls
{
  typedef std::vector<boost::shared_ptr<CTaskBall> > CBallList;
  CBallList m_ball;

  void exec(IControllerTask& con, DWORD dwTick)
  {
    std::for_each(m_ball.begin(), m_ball.end(), boost::bind(&CTaskBall::exec, _1, boost::ref(con), dwTick);
  }
};

785 名前:773 :01/12/13 17:49
>みたいに定義されているから TRet が void の場合 (上の Object::DoSomething() とか)だと
>上の (*1) で VC6 だとコンパイルが通らなくなる。ANSI C++ 的にはコンパイルできるハズ。

ああ、それか〜俺は仕方ないから無意味にtrue返したりとかしてるけどね(笑 どうせ使われて
ないのでコンパイラが最適化してくれるのではないかと願って。
イテレータとか、コンパイラが最適化対象として認識できないほどに抽象度が
高い物って少々緩くてもいいんじゃないかという気になってしまうな。
VC++7はテンプレートのウザい警告とか消えてるのかな?

786 名前:名無しさん@Vim%Chalice :01/12/13 17:51
bind 初めて知った便利そう age
ちーと調べてみるかいのぅ.
boost ってあんまいぢってなかったけどいぢってみよーかな.

787 名前:774 :01/12/13 18:47
もう話は終わってますが

> 関数パラメータのデフォルト値に変数が使えない理由を知りたいです。

正確には『クラスのメンバ関数のパラメータのデフォルト値にメンバ変数が使えない』
でした。外部変数ならばデフォルト値にできます。またメンバ変数であってもenum型なら
OKです。しかしconstのメンバ変数(デフォルトコンストラクタで初期化)は駄目でした。
何か理由があるのかないのか・・・。

>>783
悩んでいたのは実装方法とか実装方針についてではなくて、
メンバ関数のデフォルト引数にメンバ変数を与えてはいけないのは
どうしてかという点でした。実装については>>780,>>783にあったように
オーバーライドしようと思います。どうもです。

788 名前:781 :01/12/13 20:13
ちゃんとクラス指定してる?
そのメンバ関数を使う場所がクラスの外なら
クラスを指定しないとメンバ変数にアクセスできないよ?

789 名前:デフォルトの名無しさん :01/12/13 20:48
>>787
デフォルト引数として使えるのは、「宣言の時点でスコープに入っていて、
かつ、実体を特定できる変数、定数、関数などからなる式」と考えれば
よいと思う。

メンバ変数が指定できないのは、宣言の時点ではオブジェクトが存在しない、
つまり実体のないものを指定しているから。クラス変数なら、実体が
確定するのでデフォルト引数として使える。

790 名前:デフォルトの名無しさん :01/12/13 21:02
ってゆうかnewに失敗したくらいで例外投げないでくれない?

791 名前:デフォルトの名無しさん :01/12/13 21:06
>>790
はあ?アフォ?

792 名前:警告 :01/12/13 21:35
>>787
君ねぇ オーバーライドとオーバーロード間違えて覚えてるよ。
基礎から勉強しなおしてみて。

793 名前:デフォルトの名無しさん :01/12/13 21:46
>>771
>for(int i=0; i<N; ++i);
>for(int i=0; i<N; ++i);
このコードは、/Za コンパイルオプションをつければコンパイル
できますけよね。(これがコンパイルでき「ない」のが「言語拡張」、
ってのは、どーかと思うけど)

794 名前:774 :01/12/13 22:12
>>781
スコープを指定してもコンパイルが通らないのでやはり駄目なのだと思います。

>>789
なるほど。『宣言の時点で実体を特定できないものは駄目』というのは
感覚的によく判りました。const指定したとしてもコンストラクタが
呼ばれない限り実体はないので、定数だったらよいというわけでもないんですね。
なぜ実体がなければデフォルト値にできないかという話になると
仕様ということになるのでしょうか。

>>792
どうもです。オーバーロードでした。
名前も働きも似ているのでときどき判らなくなります。

795 名前:真・初心者 :01/12/13 22:28
たぶんとても初歩的な問題なんですけど、

「要素数がnであるint型配列xの最小値とその添え字を返却する関数」

 を作りたいんですが、最小値は出せたけど添え字の返却がよくわかりません。
誰か教えてもらえないでしょうか?

796 名前:デフォルトの名無しさん :01/12/13 22:38
>>795
阿呆ですか?
最小値ではなくその要素の添え字を返せば、
同時に最小値も取得できるでしょうに。

それとも、その配列とやらは関数内のローカル変数かよ。
DQNにマジレス、鬱氏

797 名前:デフォルトの名無しさん :01/12/13 22:40
>>794
クラス定義の中でメンバ変数のスコープ指定ってどうやるの?

798 名前:真・初心者 :01/12/13 22:57
阿呆です。
 よくわからんのですが、例えば int X[i]があったとして、
Xは return(X)で返せますよね? iを返したい場合は return(i)じゃ
できないっぽいんですが・・・

799 名前:真・初心者 :01/12/13 23:01
間違えた。
 min=x[i]となっててminは返せるけど iはどうやって出せばいいんですか?

800 名前:デフォルトの名無しさん :01/12/13 23:04
>>798
配列はどう渡した?

801 名前:真・初心者 :01/12/13 23:08
int minof(int x[], int n)
{
int min = x[0];
for (int i = 1; i < n; i++)
if (x[i] < min)
min = x[i];

return (min);
}
よくわからんがこんな感じです。iを出すにはどこをどうすればいいのでしょうか?

802 名前:デフォルトの名無しさん :01/12/13 23:10
>>801
いみわからん
return したいのは x[i]なのか? iなのか?

803 名前:真・初心者 :01/12/13 23:15
なんていうか、両方なんですよ。もう一個関数作らないとダメですか?
しかし、もう一個をどうやって作ればiが返せるかがわかりませぬ。

804 名前:デフォルトの名無しさん :01/12/13 23:16
>>799
#include <iostream>
#include <vector>
#include <algorithm>

template <typename T>
struct MinIter
{
  T* m_index;

  MinIter()
    : m_index(NULL)
  {}
  void operator()(T& n)
  {
    if (m_index == NULL)
      m_index = &n;
    else if (n < *m_index)
      m_index = &n;
  }
};

int
main(void)
{
  int n[6] = { 10, 18, 3, 35, 1, 5 };
  int* p = std::for_each(&n[0], &n[6], MinIter<int>()).m_index;
  std::cout << p - &n[0] << std::endl;

  return 0;
}

805 名前:804 :01/12/13 23:18
言うまでもないと思うが、最小値は *p で拾える。

806 名前:デフォルトの名無しさん :01/12/13 23:26
>>真・初心者
コテハンウザイ、くだらん質問でageるな。

阿呆なオレに教えてくれ。

出ているエラーは何だ?
使っているコンパイラは何だ?

VC++とかいう腐れ環境でなければ、
for(int i=0;;);
とやったら、変数iはforの中でのみ有効だ。
forの前で宣言しろ、阿呆。

807 名前:デフォルトの名無しさん :01/12/13 23:29
それ、C++の質問?>真・初心者。
classか構造体作ればできるけど、とても無意味。

808 名前:デフォルトの名無しさん :01/12/13 23:30
ここをC++相談室と認識して聞いているなら、その質問への答えは、
きっとこうだろう。
問題も、「最小値とその添え字を返却する関数」だし。

template <class T>
std::pair<int, int> minof(T begin, T end )
{
int min=INT_MAX;
T min_it;
for( T i = begin; i != list.end; i++ )
{
if (*i < min)
{
min = *i;
min_it = i;
}
}
return std::pair<int,int>( min, std::distance( begin,min_it ) );
}

809 名前:デフォルトの名無しさん :01/12/13 23:36
>>807
> classか構造体作ればできるけど、とても無意味。
俺は Generic Programming の良い題材だと思うけどね。そこで、つい for でループ回しちゃうのは
C のクセが抜けてないプログラマ。とはいえ 804 を真・初心者が理解できるとは思えんけど(w

真・初心者には、次の文章を読むことを強く薦める。
http://www.geocities.co.jp/SiliconValley/5656/

810 名前:真・初心者 :01/12/13 23:54
C++に間違いないんですけど。まだ関数を学んでる段階でして。
ちなみにVC++のソースファイルを使ってやってます。
なんだかよく理解できないです。すみませんどうもありがとうございました

811 名前:774 :01/12/13 23:58
>>794 クラス定義の中でメンバ変数のスコープ指定ってどうやるの?

できないと思います。自分が駄目元で書いたのは

class my_bool {
 bool elem;
 bool toggle(const booll& b=!my_bool::elem) { return elem=b; }
};

ですが、当然駄目でした。それで>>781さんが言いたかったことは
たぶん別のことなんだと思います。今回は>>789さんのアドバイスで

class my_bool {
public:
 static bool elem;
 bool toggle(const booll& b=!elem) { return elem=b; }
};
bool my_bool::elem=true;

とすれば当初の意図が達成できることが判り、気持ちすっきりしました。
# 実際にはtoggle()を2個用意するか、別にset()を用意しようと思ってます。

812 名前:デフォルトの名無しさん :01/12/13 23:59
>>真・初心者
ゴメン、君面白いんで粘着させて。

> ちなみにVC++のソースファイルを使ってやってます。
私にも下さい、VC++“の”ソース(笑

プログラムの前に、最低限の日本語能力と逸般常識を学んでくれ。
教材としては、809さんが提示されたサイトが良いと思われ。

813 名前:デフォルトの名無しさん :01/12/14 00:17
>>808
まだダメだ
numelic_limit<int>を使え

814 名前:デフォルトの名無しさん :01/12/14 00:18
>>812
逸般常識のほうでいいのか?(藁

815 名前:デフォルトの名無しさん :01/12/14 00:25
>>814
逸般で良いよ、IT業界(w)なんてオレも含めてDQNの集合だ。
多くは期待せん、PG/SE間に通じる意識でよし。
というか、真・初心者が一般常識を持つのは無理と思われ。

粘着終了、場を荒らしてすいませんでした。

816 名前:デフォルトの名無しさん :01/12/14 00:35
>>811
でそのstatic版はコンパイル通るということね?

817 名前:808 :01/12/14 00:43
>813
これでどうよ、つか、numeric_limits‥‥

#include <vector>
#include <algorithm>
#include <limits>

template <class U, class T>
std::pair<U, ptrdiff_t> minof(T begin , T end )
{
 U min = std::numeric_limits<U>::max();
 T min_it = end;
 for( T i = begin; i != end; i++ )
 {
  if (*i < min)
  {
   min = *i;
   min_it = i;
  }
  }
  return std::pair<U, ptrdiff_t>( min, std::distance( begin, min_it ) );
}

818 名前:デフォルトの名無しさん :01/12/14 00:55
>>817

フン、まあ許してやるか。

> for( T i = begin; i != end; i++ )



> for( T i = begin; i != end; ++i )

とすべきだがナ

819 名前:774 :01/12/14 01:02
>>816
通りますです。(VC6++,g++)

820 名前:デフォルトの名無しさん :01/12/14 01:57
C系統はプログラム組むのが面倒なんで
型無し汎用型をC++で実現してソースを載せてください。
文字列に対する演算はベーシックみたいのがいいです。

821 名前:デフォルトの名無しさん :01/12/14 01:58
>>820
MSのvariant_tでも見とけ

822 名前:デフォルトの名無しさん :01/12/14 02:06
>>820
ベーシックを使ってください。

823 名前:デフォルトの名無しさん :01/12/14 02:07
なぜ、よりにもよって、BASICみたいな文字列演算を望むのですか。
どうせ作るなら、正規表現系操作の方がよっぽど便利なのに。

たとえば、std::string str に対して、str.search( RegExp &exp )
みたいな拡張がしたいな、とか。
(RegExp::seach( std::string &str) は思想的にどっか間違ってる気がする。)

824 名前:デフォルトの名無しさん :01/12/14 02:11
>>820
void*
てきとーにキャストして使え。

825 名前:デフォルトの名無しさん :01/12/14 02:44
>>817
わざわざ min を持ってこなくても

T min_it = begin;
for (T i = begin; i != end; ++i)
  if (*i < *min_it)
    min_it = i;

で良い気がするな。一回多く比較するのはご愛嬌、間接参照が増えるのはコンパイラの
最適化にお任せ、ということで。(これで numeric_limits 定義してない型でも使えるし)

あとイテレータの指す値の方が必要なら iterator_traits<T>::value_type を使った方が良さ
そう。これなら T が int* だろうが vector<int>::iterator だろうが使えるし。

826 名前:デフォルトの名無しさん :01/12/14 02:53
メモリを完全破壊するプログラムを見せてください。

827 名前:デフォルトの名無しさん :01/12/14 03:00
>>826
ビルの窓からPCを投げ落とせ。
10階以上を推奨。
ついでにお前も飛び降りろ。

828 名前:デフォルトの名無しさん :01/12/14 03:00
President_Bush.Push(BlackBox)

829 名前:デフォルトの名無しさん :01/12/14 12:26
>>820 板違い。
COBOL板へ逝ってよし!

830 名前:デフォルトの名無しさん :01/12/14 14:47
Cで思い出したけどさ
VC++で拡張子.cだとC++のキーワードでエラーになるね(classとか)
GCCは大丈夫みたいだけど

831 名前:デフォルトの名無しさん :01/12/14 15:12
>>830
gcc もエラーになると思うけど。

拡張子によらず強制的に C++ のソースコードとしてコンパイルしたければ

 gcc の場合 → g++ を使う、もしくはコンパイルオプション -x c++ を使う
 VC6 の場合 → コンパイルオプション /TP を使う

じゃない?

832 名前:デフォルトの名無しさん :01/12/14 23:10
>>793
VC++ のオプションに /Za 付けたらテンプレートで
エラー出まくりますが、そういうもんですか?

833 名前:デフォルトの名無しさん :01/12/14 23:32
>>831
ごめん
MakefileでCC = g++してた(w
VC++でもコンパイルスイッチあるんだね
知らなかった有難う

834 名前:デフォルトの名無しさん :01/12/15 01:36
>>831
便乗質問、逆に強制的にcとしてコンパイルするオプションて、
VC++にありますか?
以前に調べた限りでは見つけられなかったので…
VC++スレ逝けとか言わずに、お願い。

835 名前:デフォルトの名無しさん :01/12/15 04:27
>>834
cl /? で調べると 5 秒で見つかると思われ。

836 名前:デフォルトの名無しさん :01/12/15 10:16
>>832
そういうもんです。あきらめましょう。

837 名前:デフォルトの名無しさん :01/12/15 10:21
/Zaつけると、Windows,h(winnt.h)でもエラー出ますし。

838 名前:デフォルトの名無しさん :01/12/15 10:24
MS の拡張機能を ON にしているときは、

#define for if(0);else for

というマクロを定義しておくと少し幸せになれるかもしれません。

839 名前:デフォルトの名無しさん :01/12/15 13:40
friend 関数でちょっと混乱してるんだけど、friend 関数の宣言をしたクラス
から派生したクラスは、その関数とは friend 関係にはない、という理解でよい?
たとえば、

class B;

class A {
friend void foo( B& );
}

class B : public A {
private:
int x;
};

void foo( B& b )
{
b.x = 1; // B::x にはアクセスできない
}

何だか、「C++ 第3版」の C.13.2 を見ると、上のようなことが出来そうな
気がするんだけど、g++ 3.02 とかで試すかぎり、エラーになる。

840 名前:デフォルトの名無しさん :01/12/15 18:24
list<T> lst;
fnc(&lst);

void fnc(list<T> *lst) {←ここで”構文エラー : 識別子 'list' がシンタックスエラーを起こしました。”
...
...
}

というように、templateのlstを引数にした関数fncを作りたいのですが、
エラーが出てしまいます。
どこがおかしいのかわかりません。C++むずかしいっす。

どなたか助けて…

841 名前:デフォルトの名無しさん :01/12/15 18:27
>>840
template<typename T>
void fnc(list<T> *lst) {
...
...
}

842 名前:Kusakabe Youichi :01/12/15 18:28
In article >>840, デフォルトの名無しさん/840 wrote:
> list<T> lst;
> fnc(&lst);
>
> void fnc(list<T> *lst) {←ここで”構文(I閑・ : 識別子 'list' が(I杓政現閑・ぢを起こしました。”
> ...
> ...
> }
> というように、templateのlstを引数にした関数fncを作りたいのですが、

っていうか、それ以前の文字化けしてますよ。

843 名前:デフォルトの名無しさん :01/12/15 18:32
>>840
using std;
もしくは、std::list<T>
って事とは違うの?

>>842
文字化けしてんのはあんたの脳味噌

844 名前:840 :01/12/15 18:44
>>843
おっしゃるとおりでした。std::つけないとだめなんですね。
どうもありがとうございます。

845 名前:デフォルトの名無しさん :01/12/15 18:54
>>842
「それ以前の文字化け」ってなんですか?

846 名前:840 :01/12/15 18:55
>>842
半角カタカナ使っちゃいました。

847 名前:デフォルトの名無しさん :01/12/15 18:58
>>846
>半角カタカナ使っちゃいました。
甘いな、「半角カタカナ使っちゃいました。」と書かなきゃ。
で、もう一度「それ以前の文字化けしてますよ。」とレスが付く。
コレ

848 名前:デフォルトの名無しさん :01/12/15 19:09
>>843
using namespace std;
か?

849 名前:デフォルトの名無しさん :01/12/15 19:10
>>848
YES!
氏んで来ます…

850 名前:デフォルトの名無しさん :01/12/15 19:31
>>842
>> void fnc(list<T> *lst) {←ここで”構文(I閑・ : 識別子 'list' が(I杓政現閑・ぢを起こしました。”
文字化けしてますYO!

851 名前:デフォルトの名無しさん :01/12/15 19:36
プログラムのプの字も知らない私ですが、
いきなりC++に手を出すのは危険ですか?

852 名前:デフォルトの名無しさん :01/12/15 19:40
>>851
C++を本気で理解するなら、C言語とアセンブリ言語を理解することになります。
危険ですが楽しいですよ、怖がらずにこっちへ来なさい(プ

853 名前:デフォルトの名無しさん :01/12/15 20:25
Modern C++ Desing 買った YO!
ハキーリ逝ってSTLに感動してるレベルの漏れには難しいYO!
もーちょっとガムバルのDA!

854 名前:デフォルトの名無しさん :01/12/15 21:30
参照の仕組みがわからない。
なんとなく使い方は解るんだけど…。

参照をポインターへ変換するプリプロセッサって考えていいんですかね?

855 名前:デフォルトの名無しさん :01/12/15 22:05
プリプロセセッサじゃないだろ。

856 名前:デフォルトの名無しさん :01/12/16 00:15
855サラシage

857 名前:デフォルトの名無しさん :01/12/16 03:32
>>853
言語以外の内容がほとんど全くないにも関わらず
細かい所を見ていくと現在最も難しい本だと思います。
boostとのアプローチの違いを見たりするとなお面白いと思います。
MSのコンパイラが準拠するのはマジで2004年くらいな予感なので
のんびりやりましょう。

858 名前:デフォルトの名無しさん :01/12/16 09:48
main()の正式な書き方を教えてください。
intとvoidどちらをつけるかとか引数とか

859 名前:デフォルトの名無しさん :01/12/16 09:58
>>858
int main( [int argc [, char** argv [, char** envp ] ] ] );
void main( [int argc [, char** argv [, char** envp ] ] ] );
仕様とかマニュアル、本を何故読まないの?

> intとvoidどちらをつけるかとか引数とか
角度とか?

860 名前:デフォルトの名無しさん :01/12/16 10:36
int main()
int main(int argc, char**argv)
int main(int argc, char*argv[])

861 名前:デフォルトの名無しさん :01/12/16 10:45
>>858
返り値にvoidは間違いです。

862 名前:デフォルトの名無しさん :01/12/16 21:46
>>858
なんか、最近この質問妙にあちこちで見るんだけど。
宿題かしらん?

863 名前:デフォルトの名無しさん :01/12/16 22:03
>>857
まだ第2章の途中までしか読んでないけど、すごく面白い本だね。
整数値から型を生成するテンプレートを使って、オーバーロード
された関数を選択する、なんてテクニックにはちょっと感動したよ。

テンプレートの基礎をしっかり押さえておけば、読みこなすのは
そんなに難しくないんじゃないかな、という印象だけど、やはり、
細いところが大変なのかな?

864 名前:853 (857ぢゃねーけど) :01/12/16 22:27
>863
3章はムズいぞー.
継承に再帰を使われると一瞬なんだか分からなくなる(苦笑)
まぁヲレが厨房なだけかもしれんが.
一応 Lisp 使ってたから再帰には慣れてたはずなんだけどねー.

865 名前:853 :01/12/16 22:30
良く見たら Design の綴り間違ってた.鬱氏.

866 名前:863 :01/12/16 22:45
>>864
>継承に再帰を使われると

あ、オレ、そういうの大好き(笑)。楽しみ〜。

867 名前:853=854 :01/12/17 00:04
>866
ヲレも好きは好きなんだよね.だから読んでてオモロイ.
でもムズいなーって(苦笑)

868 名前:デフォルトの名無しさん :01/12/17 00:17
なんだか generic programming のスレがほしくなてきたよ。

869 名前:デフォルトの名無しさん :01/12/17 01:05
お互いのクラスオブジェクトを参照する関数を含んだ2つのクラスを
別々に2つのファイル(ソース+ヘッダ。ヘッダには宣言のみ)に定義
したのですが、ヘッダ内でお互いをインクルードすると互いのどちらかの
関数宣言が先に来てしまう事になって、宣言されてないクラスを参照している
というシンタックスエラーが出ます。解決する方法ありますでしょうか?
やっぱり仮想関数というのを使わないといけないんでしょうか。よく分かりません。
関数はこんなカンジのものです。test1メンバがtest2クラス自体を参照します。

void test1::show(test2& t2){}

870 名前:デフォルトの名無しさん :01/12/17 01:08
>>869
クラスを宣言しなさい。

871 名前:デフォルトの名無しさん :01/12/17 01:12
>>870
どこですればいいでしょうか?
2つのヘッダでは、

・相手ヘッダのインクルード

・クラス宣言{

パブリック:
・相手のクラスオブジェクト自体を参照するメンバ関数プロトタイプ



となっています。

872 名前:デフォルトの名無しさん :01/12/17 01:14
それはクラス定義。

873 名前:デフォルトの名無しさん :01/12/17 01:17
>>869
宣言
class test2;

定義
class test2 {};

874 名前:869 :01/12/17 01:19
>>872
class test1 ;
でいいでしょうか?
すいません。宣言のしかたが全然分かりません・・・

875 名前:869 :01/12/17 01:20
>>873
すいません。ありがとうございます。定義を宣言と思ってました・・・

876 名前:ちょっと。 :01/12/17 01:26
コンストラクタ中での thisポインタの参照って、もしかしてNGですか?

877 名前::01/12/17 01:28
参照というか、thisポインタへのアクセス。

878 名前:デフォルトの名無しさん :01/12/17 01:29
そんなわけない。
ただ、virtual系メソッド呼び出しはNGだったかな

879 名前:876 :01/12/17 01:43
>878
ですよね。あー、ビックリした。

880 名前:デフォルトの名無しさん :01/12/17 02:51
>>868
スレ立て任せたぞ

881 名前:デフォルトの名無しさん :01/12/17 03:24
>>880
868 じゃないが、とりあえず新スレ 1 に並べる書籍は

Modern C++ Design
Andrei Alexandrescu, Addison-Wesley, ISBN:0-201-70431-5

Generic Programmin - STL による汎用プログラミング
Matthew H. Austern, ASII, ISBN:4-7561-3441-6

ぐらいか?

882 名前:デフォルトの名無しさん :01/12/17 04:24
STLスレ行けよ
C++スレ行けよ
genericスレ行けよ
たらい回しでどこにも誰もいなくなると思われ。

883 名前:デフォルトの名無しさん :01/12/17 09:54
g++ 3.0.2 で、

void foo()
{
  throw (int());
}

とかやると、throw のところでコンパイルエラーになるんだけど、
これって例外指定だと思ってパースしちゃってるのかな?
VC++ だと通るみたいなんだけど。

884 名前:デフォルトの名無しさん :01/12/17 14:11
>>883
intのコンストラクタなんか無いだろ

885 名前:デフォルトの名無しさん :01/12/17 14:44
>>884
いや、int などの組み込み型でもコンストラクタは定義されてる。でないと template ライブラリを
書くときに困るぞ。

886 名前:デフォルトの名無しさん :01/12/17 15:06
>>885
じゃ
int n = 5;
n.();
ってやったらn == 0になったりするの?

887 名前:886 :01/12/17 15:07
間違えた。
int n = 5;
n();

888 名前:デフォルトの名無しさん :01/12/17 15:25
>886
operator () と constructorは別種のものだと思うのですが。

889 名前:886 :01/12/17 15:29
>>888
んじゃ、これ?
int n = 5;
n.int();

デストラクタの明示呼出ならやらないことはないと思う
んだけどコンストラクタは...

890 名前:デフォルトの名無しさん :01/12/17 15:34
0x00000123456789ab
とlong型の変数にセットするにはどうしたらよいでしょうか。
どうしても頭がきれてしまいます。

891 名前:いっぱいいっぱい :01/12/17 15:38
mafxcrd.lib : ライブラリが見つかりません
というエラーメッセージが出てしまうのですが、どうすればなおるのか
わかりません、どなたかご教授くださいお願いします。

892 名前:デフォルトの名無しさん :01/12/17 15:50
>883
gcc 2.95やと、
class test{}
void foo(){ throw (test()); }
も通らないね‥‥とか思ったら、
void foo(){ throw int(); }
だと通った。不思議な話。

>890
ええと、あなたのところでは、longは64bitだったりするのでしょうかね?

893 名前:デフォルトの名無しさん :01/12/17 15:50
VC6で
const int &n=int();
通ったよ。

894 名前:デフォルトの名無しさん :01/12/17 16:00
>892
32bitです。

0x00000123456789ab
という値を構造体のメンバで配列をつかわずに
保持する事はできないのでしょうか?

895 名前:デフォルトの名無しさん :01/12/17 16:08
>864
Q:64bitの数を32bit変数1つに入れるにはどうすればいいでしょうか
A:(゚д゚)ハァ? 64bit分の情報を放り込むには、64bit以上の領域が必要だろが。

__int64とか、longlongでもつかっとけ。

896 名前:デフォルトの名無しさん :01/12/17 16:09
>>894
long long とかは使えんの?

897 名前:デフォルトの名無しさん :01/12/17 16:21
__int64でできました。long longは使えませんでした。
調査不足でした。
ありがとうございます。

898 名前:デフォルトの名無しさん :01/12/17 19:53
>>889
コンストラクタは n.(), n(), n.int() では呼び出せないだろ。入門書読んで出直せ。

int n = int();

899 名前:883 :01/12/17 20:36
int() なんて書いたもんだからいらん混乱を招いちまったみたいだね。
すまん。んで、>>892 のように、

> void foo(){ throw int(); }

ならコンパイルできるわけです。つまり、throw (int()); と書くと、

void foo() throw( int …

のような例外指定とカンチガイして解析してしまうので、パースエラー
になるのかな、と。

900 名前:デフォルトの名無しさん :01/12/18 16:11
>>899
おそらく、throw (int());
はint throw(int (*pf)());という関数宣言と見なされている。
関数名に予約語を使っておりエラーである。
(...int()...)がパラメータリストに見えるのだ。
宣言に見えるものは全て宣言になる。

901 名前:デフォルトの名無しさん :01/12/19 00:53
>>900
10分くらい考えて、8割がたは納得しました。ためしに
return (int());
とやったら、これも同じエラーになりました。一方、
throw (int()+1);
はコンパイルが通ります。ということで、(int()) が
パラメータリストに見える、という説は説得力がありますね。

902 名前:デフォルトの名無しさん :01/12/19 06:25
>>901
// 以下は全て同じ意味
int g(double d);
int g(double); // 仮引数名の省略
g(double); // 戻り値型intの省略

//以下は全て同じ意味
int f(int (*pf)()); // 引数は関数ポインタ
int f(int pf()); // 引数はやはり関数ポインタ
int f(int()); // 仮引数名の省略
f(int()); // 戻り値型intの省略

// 宣言と見なせるものは常に宣言
int n(); // 引数なし戻り値型intの関数宣言

では関数名らしきものがキーワードならそれを
宣言と見なすか見なさないかを標準が定めているのか
どうかは知らない

903 名前:901 :01/12/19 19:24
>>902
「8割がた」と書いたのは、戻り値型の省略された宣言は、ISO規格では
許されていなかったと思ったからです。それ以外については了解。

904 名前:デフォルトの名無しさん :01/12/19 20:46
C99 だと、引数の int の省略も許されてなかったような。そうなると解釈が変わるのかな

905 名前:デフォルトの名無しさん :01/12/19 21:08
Cにthrowがあるのですか?

906 名前:デフォルトの名無しさん :01/12/19 21:55
>>901 によると return でもなるという話。

907 名前:デフォルトの名無しさん :01/12/19 22:35
>>903
Effective STLによればこれを回避する方法はこれだ。
return ((int()));
が、うまくいかない上にむなしい。
暗黙のintを許しませんと警告するくせに
パーサーは古いままなのだきっと。

908 名前:デフォルトの名無しさん :01/12/19 22:36
throwにも、returnにも、括弧なんかつけないのが一番、
ということでしょうかね。

909 名前:デフォルトの名無しさん :01/12/20 10:15
こんな関数が定義されているとして
 void sub(const string &);
次のコードは正しい?
 string s;
 sub(s + s);
g++ではOKだけどBorlandのコンパイラではエラーになる。

910 名前:デフォルトの名無しさん :01/12/20 10:17
2001年を締めくくるに、ふさわしい祭りです!

米【TIME】紙が「Person of the 2001」の投票を行っています。
75年の歴史を誇る由緒正しい賞で、過去には「ヒトラー」や「レーニン」
なども選出されています。

TIME 投票ページ
■Masashi Tashiro■ で表記統一しましょう。(■は抜かす)
http://www.time.com/time/poy2001/

投票は削除を避けるために手動で。
締め切りは24日ですです。。。
こちらは軽いですけど結果はみれまえせん(連続投票可能)
TIME 投票ページ
http://www.time.com/time/poy2001/nominee_pop.html
※「Masashi Tashiro」で表記統一しましょう。
名前やメール欄など適当に 例)simura@or.jp
記入して、投票しよう。

新しいページがちゃんと開くまで待つ!!
VOTEの連打はダメ!!

葉書票もあるだろうから、ネット上で1位になっても安心できない。
2位にダブルスコア以上つけるのが望ましい。 。らしい。
本スレ
http://choco.2ch.net/test/read.cgi/news/1008799152/
前スレ
http://choco.2ch.net/test/read.cgi/news/1008799136/

911 名前:デフォルトの名無しさん :01/12/20 10:21
>>909
クラス string の実装にもよると思われ。

912 名前:デフォルトの名無しさん :01/12/20 10:24
型のサブタイプって、含まれるインターフェイスを持つ型か、含む型か
どちらですか?

913 名前:デフォルトの名無しさん :01/12/20 10:26
>>909
ボーランドは
operator +
がconstをかえさないのかな?

914 名前:デフォルトの名無しさん :01/12/20 10:35
>>913
オブションでエラーレベルから警告レベルに変えれたと思ったが・・・
C++は3年くらいご無沙汰してるので忘れた。

915 名前:デフォルトの名無しさん :01/12/20 10:39
>>909
ボーランドのコンパイラで試したが、エラー出ないぞ
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

916 名前:デフォルトの名無しさん :01/12/20 10:58
>>913
非const から const へのキャストは文法上何の問題もないし。

>>909
#include<string>
したけど、
using namespace std;
を忘れてるとか?

917 名前:909 :01/12/20 11:17
>>914
え!エラー出ない!
実際にエラーが出たのは上のコードではないけど
当然同じだと思って確認してなかった。すまんです。
もっかい確認してエラーが出るコード作りま〜す。

918 名前:909 :01/12/20 11:43
元のソースは3項演算子を使ってました。
これでエラーになります。コンパイラはBorland C++ 5.5.1です。
 extern void sub(const std::string &);
 std::string s;
 sub(1 ? s : s + s);
ちなみにstringでなくても同じエラーは起きます。
文法的に間違ってるでしょうか?

919 名前:デフォルトの名無しさん :01/12/20 11:59
>>918
小さい石に躓いてないで工夫したら?
extern void sub(const std::string &);
 std::string s;
 std::string s2=1 ? s : s + s;
 sub(s2);

とやったらエラー出ないと思うよ。

920 名前:デフォルトの名無しさん :01/12/20 12:08
>>918
子どもじゃないだから、エラーメッセージくらい書けよ。

921 名前:909 :01/12/20 12:19
>>919
文法上どうなのかな?って聞きたかっただけです。
>>920
エラーメッセージは以下の通り。subの呼び出し部分でエラー発生。
Q:\>bcc32 test.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.cpp:
エラー E2357 test.cpp 12: 参照は 'string' で初期化されているが 'string' 型の左辺
値が必要(関数 main() )
エラー E2342 test.cpp 12: パラメータ 's' は const string & 型として定義されてい
るので string は渡せない(関数 main() )
*** 2 errors in Compile ***

922 名前:デフォルトの名無しさん :01/12/20 13:37
>>921 ああ3項演算子ね。
bcc5.5 は3項演算子にバグがあるって、別スレに出てたよ。
http://pc.2ch.net/test/read.cgi/tech/997074601/460-466

923 名前:909 :01/12/20 13:46
>>922
あれ、そうだったのね。じゃこの件は終わり。皆さんありがとう。

924 名前:デフォルトの名無しさん :01/12/20 16:31
class A{
private:
A a;
};

がコンパイルできねーYO。
どうしたらいいんすかね?
VC++ & Win2000

javaなら速攻動くのにyo

925 名前:デフォルトの名無しさん :01/12/20 16:40
>>924
Javaの変数はポインタじゃ。C++は違う。

class A{
private:
 A* a;
};

926 名前:デフォルトの名無しさん :01/12/20 16:44
>925
横から御無礼。
924みたいなのってクラス定義、はじめて見たんだけど、
どんなときにこういうクラス定義使うんですか?

927 名前:デフォルトの名無しさん :01/12/20 16:47
>>924 ネタですか?自身を実体メンバとしては持てないよ。

java と同じことをしたいならば、
class A {
A* a;
};
だよ。

928 名前:924 :01/12/20 16:53
ねたじゃないよ。
まじです。
java & perl 厨房だからポインタわからんのです。
そういうことですか。
皆さんありがとう。

>>926
tree構造とか再帰的にデータをもつことができるかなとおもって。
定石かどうかわからないけど、javaだと結構やると思うよ。
おれだけか?

929 名前:デフォルトの名無しさん :01/12/20 16:57
なるほろ

930 名前:デフォルトの名無しさん :01/12/20 20:30
よく考えてみろ。
class A{
private:
A a;
};
C++の場合。
A a;と宣言したときに
a.aも宣言される、またそのときに
a.a.aも宣言される、
a.a.a.a
a.a.a.a.a
a.a.a.a.a.a
a.a.a.a.a.a.a
a.a.a.a.a.a.a.a
以下無限に続く
つまり賢いコンパイラは通らないわけだ。
俺のコンパイラは通るけどスタックオーバーフロー起こすよ。

931 名前:デフォルトの名無しさん :01/12/20 21:39
>>928
> tree構造とか再帰的にデータをもつことができるかなとおもって。
> 定石かどうかわからないけど、javaだと結構やると思うよ。
> おれだけか?

いや、実際よくやるけど、C++ ではすべてポインタになる。Java のクラス型の変数は C++ ではすべてポインタだと考えれば、だいたい問題ない。

Java の
ClassA a = new ClassA();
は C++ では
ClassA* a = new ClassA();
になる。

C++ で普通に
ClassA a;
と書くと、この場合 a は new の必要なく既に存在してることになる。これは int などと同じように、参照ではなく確固たる実体であって、NULL にしたり他のオブジェクトを指したりすることはできない。

932 名前:デフォルトの名無しさん :01/12/20 22:37
C++の場合
class A
{
 A* a;
 void init(){a=new A();}
};
とやるのが普通

933 名前:デフォルトの名無しさん :01/12/20 23:03
こういうのならやったことある。
class A {
 vector<A> child;
};
でも通らないコンパイラもある。
テンプレートの実装によるのかも。

934 名前:デフォルトの名無しさん :01/12/21 01:20
なんとなくC的によくある
typedef struct node {
int nodedata;
struct node* next;
} NODE;
みたいなのはC++ではあんまり見たくないなあ

935 名前:デフォルトの名無しさん :01/12/21 02:38
>>934
C++ では、STL があるから、
基礎データ構造を自前でコーディングする機会がないっすね

936 名前:デフォルトの名無しさん :01/12/21 03:14
>>935
そんなことはない。

バランスしない純粋な二分木とか、言語処理系の中間段階などで良く使う DAG といったデータ
構造は、STL ではサポートされてないもの。確かに C に比べれば、自前でデータ構造を作る機
会は少ないけどね。

937 名前:デフォルトの名無しさん :01/12/21 21:50
class vec{
double x,y,z;
}

class color:public vec{

}
クラスvecを継承しているクラスcolorで、
xを別の名前で使いたいのですができるでしょうか?
よろしくおねがいします。

938 名前:デフォルトの名無しさん :01/12/21 21:55
privateで継承すれば?

939 名前:デフォルトの名無しさん :01/12/21 21:58
なんで別の名前に?

940 名前:デフォルトの名無しさん :01/12/21 22:05
>>938さん
書き間違えましたが、vecのメンバは全てpublicにしています。

>>939さん
colorクラスでもvecクラスで定義しておいたメンバ関数を使いたいのです。
ただ、普通に継承したらcolor(色)のメンバ変数にアクセスする時に
r,g,bを使いたいのにx,y,zでアクセスすることになり不自然だからです。

941 名前:デフォルトの名無しさん :01/12/21 22:07
考えてみたら、やっぱ無理そうですね。あきらめます。

942 名前:デフォルトの名無しさん :01/12/21 22:15
class color:public vec{
double &r,&g,&b;
color() : r(x), g(y), b(z) {}
}
…コンパイル通るかどうか全く自信ない。

>>940
しかし、色空間てことなんだろうけど、それでも
vectorからcolorが派生する設計自体が不自然な気がする。

943 名前:938 :01/12/21 22:17
>>940
あ、読み違えてた… 逆だ。
そういう意味なら、class colorのなかで#define r x とかってやればええんでないの?
俺なら r() return x ; r(double value) x=value ; とかやるだろうけど。

944 名前:デフォルトの名無しさん :01/12/21 22:20
話が変わって申し訳ないです。
VC6のWin32 Console Applicationでカーソルの位置を変えたり、出力文字のフォントを変えたりするにはどうしたら良いのですか?
Cの参考書を読むと「cursesまたはncursesというヘッダファイルをincludeしろ」と書いてあるのですが、ヘッダファイルが見あたりません。
教えて下さい。

945 名前:938 :01/12/21 22:20
>>942
>派生する設計自体が不自然
おれもそう思う。

946 名前:デフォルトの名無しさん :01/12/21 22:22
その設計はやめた方がいいと思う。
穴が2個あるからといって、
マンコと鼻穴を同じベースクラスで表現するようなもの。

947 名前:946 :01/12/21 22:24
まあ、どうしてもその通り設計したいなら union 共用体を使うという手も。

948 名前:デフォルトの名無しさん :01/12/21 22:29
>944
VC++のサンプルにあるぞ。
名前はわすれた。
CDの中さがして

949 名前:948 :01/12/21 22:31
追加
curses使うやつじゃなくてね

950 名前:デフォルトの名無しさん :01/12/21 22:32
>>944
その参考書はUNIX用だと思われるので、Windowsでは使えない部分があることを知りましょう。

951 名前:デフォルトの名無しさん :01/12/21 22:34
毛唐か
ゴルァァァァァァァ!

952 名前:951 :01/12/21 22:35
うっ!
超誤爆・・・・
スマン・・・・

953 名前:デフォルトの名無しさん :01/12/21 22:48
ありがとうございました。
さがしてみます。

954 名前:デフォルトの名無しさん :01/12/21 23:34
VisualStudio.NETで、
VC++.NETのプログラムを書きました。
でも、実行しようとすると、現在のユーザー権限では実行
できないと言われました。どうすればいいのですか?

955 名前:デフォルトの名無しさん :01/12/22 00:00
VisualStudioをダウングレードする

956 名前:デフォルトの名無しさん :01/12/22 00:05
プログラムのデバッグの権限が要るとか?

957 名前:デフォルトの名無しさん :01/12/22 02:48
>>954
どっかレジストリいじればいいんじゃなかったっけ。すれ違いだからほかで探せ

958 名前:  :01/12/23 09:35
C++って多重継承できるけどさ、
よく考えたら
同じ名前の関数をもってるクラスを複数継承したら
どれを呼び出すことになるのよ?
わけわからんぞ。

959 名前:デフォルトの名無しさん :01/12/23 10:02
>>958

#include <iostream>
class Base1{
public:
void foo(){std::cout << "Base1";}
};

class Base2{
public:
void foo(){std::cout << "Base2";}
};

class Hoge : public Base1, public Base2{
public:
void bar(){foo();}
};

int main(){
Hoge hoge;
hoge.bar();
return 0;
}

//-------------------------------------

>cl d.cpp
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

d.cpp(17) : error C2385: 'Hoge::foo' の派生があいまいです。
d.cpp(17) : warning C4385: 可能性 : 'foo' がベース 'Base1' of class 'Hoge' にあります。
d.cpp(17) : warning C4385: または : 'foo' がベース 'Base2' of class 'Hoge' にあります。

960 名前:958  :01/12/23 10:18
サンクス。>>959
でも、それだと、同じ関数持ってるやつは複数継承できないってこと?
それじゃ多重継承って使いづらくない?

それともあいまいじゃない指定方法ってある?

961 名前:_ :01/12/23 10:34
>960
オーバーライドすればよい。
またはクラススコープ演算子を使う

962 名前:デフォルトの名無しさん :01/12/23 10:34
void bar(){Base1::foo();}
でいけるはず

963 名前:デフォルトの名無しさん :01/12/23 10:35
usingでもよいよ

964 名前:デフォルトの名無しさん :01/12/23 10:40
新スレ。良いお年を。
http://pc.2ch.net/test/read.cgi/tech/1009071535/l50

965 名前:_ :01/12/23 11:08
俺にはクリスマスも元旦も
カンケーねえ。
ひたすら勉強だ。
みんなだってそうだろ?

966 名前:デフォルトの名無しさん :01/12/23 11:14
>>965
まあ、そういうことだ。おれはいま、Effective STL、Exceptional C++、
マルチパラダイムデザイン、Modern C++ Design を並行して読んでる。

967 名前:デフォルトの名無しさん :01/12/23 11:25
勉強っていうか、それが生きがいになっちゃた。
新スレ行こうか。

968 名前:デフォルトの名無しさん :01/12/23 11:39
C++は、勉強するのが非常ーに楽しい言語だが、
仕事より勉強の方が長い場合もあって欝
と、暗いまま年末に突入します

More Exceptional C++出たら正月休みに持っていけたのに。

969 名前:デフォルトの名無しさん :01/12/23 20:16
のこり31レスをどうしてくれようか。

970 名前:デフォルトの名無しさん :01/12/23 20:55
じつは、40才になったのを機に C++ をやり始めたのだけど、勉強しがいの
ある言語だよね。仕事のためというより、勉強そのものが楽しいっていうか。
まあ、そのうち恐竜みたいになって滅びるのかも知れないけど。

971 名前::01/12/23 22:38
>>970
同感。
一時期流行に流されてJavaの仕事もしたが、やっぱりC++の方がプログラム組んでて100倍楽しい。。

972 名前:1000 :02/02/03 03:50
まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 1000取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

973 名前:埋め立て屋 :02/02/03 12:44
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/

974 名前:埋め立て屋 :02/02/03 12:44
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/


975 名前:埋め立て屋 :02/02/03 12:44
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/ 

976 名前:埋め立て屋 :02/02/03 12:44
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/ 


977 名前:埋め立て屋 :02/02/03 12:45



978 名前:埋め立て屋 :02/02/03 12:45
 

979 名前:埋め立て屋 :02/02/03 12:45
 


980 名前:埋め立て屋 :02/02/03 15:06
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/

981 名前:埋め立て屋 :02/02/03 15:07
 

982 名前:埋め立て屋 :02/02/03 15:07



983 名前:埋め立て屋 :02/02/03 15:07
 


984 名前:埋め立て屋 :02/02/03 15:07
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/


985 名前:埋め立て屋 :02/02/03 15:07
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/ 

986 名前:埋め立て屋 :02/02/03 15:07
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/ 


987 名前:埋め立て屋 :02/02/04 18:19



988 名前:埋め立て屋 :02/02/04 18:19
 

989 名前:埋め立て屋 :02/02/04 18:19
 


990 名前:埋め立て屋 :02/02/04 18:19
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/

991 名前:埋め立て屋 :02/02/04 18:19
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/


992 名前:埋め立て屋 :02/02/04 18:19
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/ 

993 名前:埋め立て屋 :02/02/04 18:19
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/ 


994 名前:埋め立て屋 :02/02/04 21:21
 

995 名前:埋め立て屋 :02/02/04 21:21



996 名前:埋め立て屋 :02/02/04 21:21
 


997 名前:埋め立て屋 :02/02/04 21:21
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/

998 名前:埋め立て屋 :02/02/04 21:21
C++相談室 Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/


999 名前:埋め立て屋 :02/02/04 21:21
999ゲト


1000 名前:埋め立て屋 ◆Liz4zQaI :02/02/04 21:21
1000です。。。



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