問題タブ [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.

0 投票する
3 に答える
237 参照

c++ - パラメーターを指定してクラス コンストラクターを呼び出しています - 非クラス型の 'x' のメンバーの要求

クラス B をコンストラクターのパラメーターとして受け入れるクラス A があります。クラス B は int 値から構築できます。私の元のコードは非常に複雑ですが、非常に基本的なケースに縮小できたことを願っています。

そして、これは私が得ているエラーコードです:

GCC (4.9.2 20150304 (プレリリース))、プラットフォーム: arch Linux を使用しています。

main 関数に対する次の変更は、正常にコンパイルされます。

A a(); を使用していることはよく知っています。オブジェクトではなく、関数を宣言します。しかし、私は A a(B(some_val)) が同じことをするとは思っていませんでした。私の意見では、これがここで起こっていることです。

なぜこれが起こっているのか考えがありますか?


編集:すべての回答に感謝します。最も厄介な解析のアイデアについてさらに調査する必要があるようです。

ところで、clang を使用してコードをコンパイルすると、より有用なエラー メッセージと解決策が得られることがわかりました。

0 投票する
1 に答える
42 参照

c++ - 右辺値をコンストラクターに適切にバインドする方法は?

ここに私のコードがあります:

使用してtest m(dummy());

出力:なし

使用してtest t(std::move(dummy()));

出力:

これは期待されるものです。

私の質問は、

std::moveパラメータが の場合、使用は必須type&&ですか? 右辺値と見なされないdummy()のに、なぜ使用する必要があるのstd::moveですか? 右辺値を右辺値参照にバインドすることについてどういうわけか混乱しており、明確化が必要です。

0 投票する
0 に答える
29 参照

c++ - ctor呼び出しによるC++コピー省略

コードをより適切に整理する方法を見つけようとしているので、問題を表す簡単な例を作成しました。

ClassA と ClassB の場合:

このコードが機能する理由があるかどうか誰かが説明できますか:

出力の生成:

ClassA アクター

テスト3

ClassA デストラクタ

このコードはしませんが:

この場合、ClassB コンストラクターは実行されません (ただし、エラーはスローされません)。

ctor に引数を値で渡すときにコピー ctor を回避する方法はありますか?

0 投票する
1 に答える
434 参照

c++ - これはどのように最も厄介な解析ですか?

私はこの記事を読んでいました

項目 3 に次のような記述があります。

上記の最も厄介な解析はどうですか。私がこのようなことをしたら

ステートメント

正常に動作し、厄介な解析に似ていません。なぜ著者はそれが厄介な解析だと言ったのですか。それはタイプミスですか、それとも何か不足していますか?

0 投票する
1 に答える
76 参照

c++ - 関数オブジェクトをコンストラクターに渡す

私が達成しようとしているのは、さまざまなファンクターを引数として取ることができるファンクターを作成することです。

編集:私の問題の理由、「最も厄介な解析」、および解決策がよく説明されています:この質問と回答、タグ全体、およびウィキペディアのページを参照してください。それでも、質問する前に問題を特定できませんでした。他の人に役立つかもしれないので、この質問は残しておきます。

私がしたこと:

ヘッダー ファイル内functor.hpp:

このヘッダーを使用すると、次のfunctor.cppようなプログラムを作成できます。

コンパイルして実行すると、期待どおりに取得できます。

doer別の演算子 ( ではない) でmy をインスタンス化する方法を見つけるのに苦労していますstd::plus<T>

これは問題なくコンパイルされf2(3, 7)ますが、積 21 を取得するために を呼び出す方法を見つけることができませんでした。たとえば、プログラムに別の行を追加すると:

コンパイルしようとすると、次のようになります。

何が起こっている?どういうf2(3, 7)わけかオーバーロードされたものを呼び出していないようoperator()です...

0 投票する
0 に答える
102 参照

c++ - この場合、どのような理由で「非クラス型の ... のメンバーのリクエスト ...」エラーが発生するのですか?

次のコードでトリッキーな (少なくとも私にとっては :D) 問題を見つけました。

「Alpha alpha(Beta(d));」の変更 次のいずれかを使用すると、コードがコンパイルされます。

  • アルファ alpha(ベータ(5));
  • アルファ alpha(Beta((double)d));
  • アルファアルファ{ベータ{d}}; //c++11 で有効

私が得るコンパイラ エラーは次のとおりです。

次のような場合に、このようなエラーが発生することが予想されます。

しかし、ここでは起こらなかったので、私は混乱しています。