問題タブ [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 投票する
2 に答える
929 参照

c++ - foo x( (bar()) ); のようなコンストラクター呼び出しで二重括弧が必要なのはなぜですか?

重複の可能性:
括弧の空のセットを使用して引数なしでコンストラクターを呼び出すとエラーになるのはなぜですか?

ネストされたコンストラクター呼び出しとブレースに関するC++ FQA エントリを見て、 C ++ パーサーが 2 つを解決する方法と、パーサーがそれを解決できない理由を常に疑問に思っていました。

だから、なぜfoo xxx();あいまいなのかがわかります。foo x(bar());しかし、それは明らかに事前宣言ではないため、何が曖昧になります。(つまり、これをうまく検出できる文法が必要です)。

C++ 文法のその部分の制限とあいまいさを誰か説明できますか?

0 投票する
2 に答える
794 参照

c++ - 「最も厄介な解析」を理解する - なぜあいまいな構文を許可するのですか?

C/C++ での「最も厄介な解析」の問題を理解しようとすると、すぐにこの質問が頭に浮かびます。なぜこの問題を引き起こす構文があるのでしょうか?

例えば、

TimeKeeper time_keeper(Timer())では、タイプ Timer を返す名前のない関数 ptr を受け取る関数宣言を単純に禁止しないのはなぜでしょうか? TimeKeeper time_keeper(Timer (*)())関数宣言子として劣っていますか?

このあいまいさが得られるのは、この構文が原因ではないのでしょうか、それとも何か不足していますか?

編集: 個人的にはTimeKeeper time_keeper(Timer())、関数宣言として使用したことはありません。Timer (*)()より明確にわかるように、関数ポインターを指定するために常に を使用してきました。

0 投票する
4 に答える
78 参照

c++ - コピー操作を省略した後の無効なオブジェクト?

重複の可能性:
括弧の空のセットを使用して引数なしでコンストラクターを呼び出すとエラーになるのはなぜですか?
最も厄介な解析: なぜ A は a(()); を実行しないのですか? 仕事?

これは私を怒らせます。単純すぎるのかもしれません。

GCC 4.6 は私に与えます:

コピー操作を省略した後、有効なコードは次のようになります。

でもなんで電話できないのwork()??

編集:

はい、複製します (以下を参照)。最初に検索したときに元の投稿が見つかりませんでした。これは、この症状の原因が予想外の場所にあるためです。

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

c++ - なぜこれがデフォルトのコンストラクターを呼び出すのですか?

私はこれがどちらかを印刷することを期待していました

  • X(int)、からへX(answer);のキャストとして解釈される可能性があるため、またはintX
  • X(answer);変数の宣言として解釈される可能性があるため、何もありません。

ただし、それは出力されX()、なぜX(answer);デフォルトのコンストラクターを呼び出すのかわかりません。

ボーナスポイント:変数宣言の代わりに一時的な宣言を取得するには、何を変更する必要がありますか?

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

c++ - gcc における class(*)() の意味

このコンパイラ エラーを理解できません。インスタンス化するクラスは「不透明」と呼ばれるため、投稿のタイトルに class(*)() と書きましたが、その名前は有益でも関連性もありません。これは、テンプレート化された循環バッファーといくつかのテストです。不透明なクラスを使用して、完全なクラス/構造体型でデータ構造をテストしています。また、プリミティブ (現時点では int) を使用してテストしていますが、そのテスト関数ではこのコンパイラ エラーは発生しません。これよりも多くのコードがありますが、関連するセクションと思われるものを提供しました。興味がある場合は、完全なコードがここにあります。

gcc エラー:

tests.cpp:

CircBuf.h:

opaque* を宣言し、それを渡して代わりに削除すると:

同様のエラーが表示されます:

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

c++ - 一時オブジェクトを使用してコンストラクターを呼び出す

次の問題がわかりません。

完全なエラー メッセージは (Visual Studio 2010)

修正は簡単です:

これは MSVC 固有の問題Box box(InnerBox());ですか。

0 投票する
5 に答える
7075 参照

c++ - C++ constructor not being called

I'm new to C++ and this is my first time with its classes and I was wondering, how do I call a constructor? I've read some documentation on classes in C++ and that's how I came up with what I have. The constructor calls private methods to setup the server.

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

c++ - `Listx;`と`Listx()`に違いはありますか?

タイトルは、マーシャル・クラインによる有名なサイトC++FAQに由来しています。

著者は、次の2つのコード例には違いがあると主張しています。

Listがクラスの名前であるとします。次に、関数f()はxと呼ばれるローカルListオブジェクトを宣言します。

ただし、関数g()は、リストを返すx()という関数を宣言します。

しかし、2番目のバリアントを使用するのは本当に間違っていますか?

そして、それが本当に宣言である場合、コンパイラは、関数内で関数を宣言できないと文句を言うのではないでしょうか。

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

c++ - オーバーロードされた演算子 << は bool 値を出力します。なぜ?

xml_attribute.h

xml_attribute.cpp

ドライバー.cpp

ドライバーからの出力は「1」ですが、「=」記号にしたいです。
への参照を出力するのはなぜですか?
に変更XML_AttributeT a();するXML_AttributeT a;と、コンパイルさえしません。

私は何を間違えましたか?

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

c++ - 非 const 参照の無効な初期化

わかりました、私はこのエラーを理解しようとしていますが、これまでのところ、まったく運がありません. 私は宿題のためにこれを行っているので、含まれているクラスを使用していません。

関連するコードは次のとおりです。

そして、.h ファイルから...:

これにより、エラーがスローされます:「タイプ 'Vec (*)()' の右辺値からのタイプ 'Vec&' の非定数参照の無効な初期化」