• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++のクラスについて)

C++のクラスとコンストラクタに関する疑問

このQ&Aのポイント
  • C++のクラスでコンストラクタを指定できない理由とは?
  • デストラクタの場合は問題なく指定できるのに、なぜコンストラクタは指定できないのか
  • コンストラクタの指定に関する疑問を解決しましょう

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

んー...「(明示的に)メンバ関数のように呼び出すことはできない」と解釈できそうです。 言語規格(N3000:Working Draft, Standard for Programming Language C++) によると 12.1 Constructors Constructors do not have names. A special declarator syntax using an optional sequence of functionspecifiers followed by the constructor’s class name followed by a parameter list is used to declare or define the constructor. (中略) Because constructors do not have names, they are never found during name lookup; とあります。要するにコンストラクタは見てくれこそメンバ関数のようでありながら実は名前を持たない。 従って関数のように呼び出そうてしても(名前がないんだから)そんな関数は見つからない。 ...ってことのようです。 してみると僕とこの環境:Visual C++ 10で呼べてしまったのは厳密には誤りなのでしょうね。

vshdwn
質問者

お礼

そういうことだったんですか。 ありがとうございました

その他の回答 (2)

回答No.2

> main.cpp:23:22: error: cannot call constructor 'class2::class2' directly あー、処理系依存なのかしら。 それはそうと、何故にコンストラクタを明示的に呼び出したいんですか?

vshdwn
質問者

お礼

ありがとうございました

vshdwn
質問者

補足

特に理由はありません。 しいて言えば探究心で、出来るなら方法を、出来ないのなら理由を知りたいからです

回答No.1

pointer->class2::class2(); ではいかがです?

vshdwn
質問者

お礼

ありがとうございました

vshdwn
質問者

補足

回答ありがとうございます。 main.cpp: In constructor 'class1::class1()': main.cpp:23:22: error: cannot call constructor 'class2::class2' directly make: *** [main.exe] Error 1 とエラーが出てコンパイルできませんでした。

関連するQ&A