問題タブ [most-vexing-parse]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - C++ 不気味なコンストラクター
このコードを持ってみましょう
次に、結果があります。
ケース3で何が起こっているのか説明できますか?
c++ - C++でのコンストラクターのデフォルト値の設定
重複の可能性:
空の括弧のセットを使用して引数なしでコンストラクターを呼び出すとエラーになるのはなぜですか?
オブジェクトの作成とメンバー関数の呼び出し
最近、コンストラクターについて少し学びましたが、今日はコンストラクターパラメーターのデフォルト値を設定するのに問題があります。
hppファイルのコンストラクター宣言は次のようになります。
cppファイルの定義は次のようになります。
(_faceValue
そして_suit
PlayingCardのプライベートメンバーです)私がこのようにこれをテストするために行くとき:
card1に関連するコードをコメントアウトすると、card2は正常に機能します。そうしないと、エラーが発生します。 クラス以外のタイプの「PlayingCard()」である「card1」のメンバー「getSuit」のリクエスト。
これは、引数なしのコンストラクターの使用を認識しないことを意味する必要がありますか?私は何が間違っているのですか?
c++ - 2つのパラメーターを持つベクトルコンストラクターは、関数宣言として解析されます
この例を考えてみましょう。
コンパイラは、の呼び出し時にエラーをスローしますstd::copy
request for member 'begin' in 'vec', which is of non-class type...
私はこのようなエラーを回避することができます:
または、次のように、各パラメータを括弧で囲みます。
または、C++11の新しい統一初期化でも次のようになります。
コンパイラが例の宣言を関数宣言として解析するのはなぜですか?私はほとんどの厄介な解析について知っていますが、それは空のパラメータリストでのみ発生すると思いました。また、2番目の回避策が機能する理由も疑問に思います。
c++ - C++ コンパイラを理解する
重複の可能性:
最も厄介な解析: A が a(()); でない理由 仕事?
今回は何かを学ぼうとして、CSの学位をもう一度やり直したいという単純なC ++の問題があります。;)
このコードがコンパイルされない理由:
この他のものは単一の警告なしでコンパイルされます
違いを見つけるのはさらに困難です (余分な括弧が追加されました:P)。
c++ - その他の一時オブジェクトT()
このコードを検討してください:
j
の値は1であることがわかりましたが、は値が0int()
に等しい一時的なものであるため、これは0である必要があります。
また、new
演算子の構文はですnew typename
が、ここT()
では型名の代わりに一時オブジェクトになります。
c++ - () を使用してオブジェクトを宣言すると、コンストラクターが呼び出されないのはなぜですか?
構文は何をしますMatrix m1();
か?
と同じだと信じていましたMatrix m1;
。明らかに私は間違っています。
c++ - メソッドスタックのコンパイルからインスタンスを値で返す
これがコンパイルされない理由を説明できますか:
(これはエラーです:
コード:
しかし、これは:
c++ - C++ は、複雑なコンストラクターを呼び出す代わりに関数を宣言します
まず、stackoverflow ( this、this、およびthis one ) に既に同様の質問があることを知っているため、問題の理由を理解しています。残念ながら、それは私がそれを解決するのに役立ちません。
上記の質問はすべてデフォルトのパラメーターなしのコンストラクターに関するものですが、デフォルト値を持つ 2 つのパラメーター コンストラクターを使用しているときに問題が発生しました。オブジェクトの代わりに関数宣言。
これが私のコードの一部です(クラス名は長くて関連性がないため、名前を変更しました):
クラス内のすべての関数は実装されていますが、Concrete
クラス内の関数はどれも実装されていませんVirtual
(コンストラクタとデストラクタを除く)。
だから、今私の問題は、次のようなことをしたいということです:
素敵でキュートでエレガントですが、機能しません (リンクしたすべての質問と同じエラー)。問題を最も厄介な parseと呼んでいるこのフォーラムチュートリアルを見つけましたが、それは解決策です (引数を括弧で囲みます) は問題を解決しません (その場合、エラーメッセージの長い束ですが、編集できますそれが役立つ場合は後で質問します-それらはすべて仮想関数の継承に関連しています)。
デフォルトのすべてのパラメーターでコンストラクターを使用する場合、および最初のパラメーターを個別に構築する場合でも、コードをテストしました。
コードをそのまま使用できますが、現在使用しているものよりもエレガントなソリューションを誰かが提供してくれれば幸いです。
編集:最も厄介な解析を修正したときに表示されるエラーメッセージ
括弧付きのコードを使用する場合:
私のエラーは次のとおりです。
読みやすくするために、パスの名前を変更し、サンプル ファイルとクラス名 (上記と同じ) を挿入しました。備考:line 45
は、問題のコンストラクターの定義です。一方、line 36
ラインclass algoContainer
です。
私もこのコードで試しました:
そして、エラーは完全に異なります:
お役に立てれば。
c++ - この場合、コピー コンストラクターが呼び出されない理由
たとえば、私はクラスAを持っています
今私がやっているとき
正確には何が起こりますか?
c++ - C++: 「非クラス型 Z である Y のメンバー X の要求」の奇妙な発生
g++ 4.6 でコンパイルされた次のプログラムでは、エラーが発生します。
その最後の行で:
コードに含まれる動作中のバリアントからわかるように、A のコンストラクターの引数の周りに括弧を追加すると、問題が解決します。
コンストラクターの呼び出しを関数宣言として解釈することによって引き起こされる関連エラーをいくつか見てきました。たとえば、コンストラクターへの引数を持たずに中括弧を使用してオブジェクトを作成する場合などです。
しかし、私にはそう思われます
関数宣言として解釈できません。
誰かが私に何が起こっているのか説明できますか?