- ベストアンサー
C++のクラスとコンストラクタに関する疑問
- C++のクラスでコンストラクタを指定できない理由とは?
- デストラクタの場合は問題なく指定できるのに、なぜコンストラクタは指定できないのか
- コンストラクタの指定に関する疑問を解決しましょう
- みんなの回答 (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で呼べてしまったのは厳密には誤りなのでしょうね。
その他の回答 (2)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
> main.cpp:23:22: error: cannot call constructor 'class2::class2' directly あー、処理系依存なのかしら。 それはそうと、何故にコンストラクタを明示的に呼び出したいんですか?
お礼
ありがとうございました
補足
特に理由はありません。 しいて言えば探究心で、出来るなら方法を、出来ないのなら理由を知りたいからです
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
pointer->class2::class2(); ではいかがです?
お礼
ありがとうございました
補足
回答ありがとうございます。 main.cpp: In constructor 'class1::class1()': main.cpp:23:22: error: cannot call constructor 'class2::class2' directly make: *** [main.exe] Error 1 とエラーが出てコンパイルできませんでした。
お礼
そういうことだったんですか。 ありがとうございました