[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
質問
エラー "Expected '(' for function-style cast or type construction" が発生し、このエラーの意味をネットで調べてみましたが、このエラーの原因に関する文書が見当たりません。
Stack Overflow で見つけた関連する質問はすべて、特定のコードスニペットを修正するもので、より一般的なエラーの原因については説明されていません。
以下のようなものがあります。
- 関数型キャストまたは型構築のために期待される '(') は、コードのいくつかの問題点を浮き彫りにしています。どの問題が実際にエラーを引き起こしているかは不明です。
- c++ Xcode は、関数スタイルのキャストまたは型構築のために '(') を予期していました。 は、main 関数の内部で関数を定義しています。これは明らかな構文上の問題のように思えますが、なぜこの特定のエラーが発生するのかは、私にはまだ不明です。
- '('で関数型キャストまたはコンストラクション型Xcodeエラー . この最後の例では、OPは関数宣言に非常によく似た方法で関数を呼び出し、さらに、同じ名前だが異なるシグネチャを持つ関数を宣言しています。エラーが発生した場所とエラーメッセージから、このエラーは関数宣言に関係するものだと思われます。
関数型キャストと型構築の意味をわかりやすく説明したドキュメントが欲しいのですが?コンパイラはいつ他のエラーではなく、このエラーを投げるようにするのですか?
私自身のエラーに特化した回答は望みませんが、リクエスト通り、以下は私のMCVEです。
#include <boost/integer_traits.hpp>
class Test{
const double MAX_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
const double MIN_DEPTH_VAL = (double) boost::integer_traits<unsigned short>.const_max;
};
私は、この回答によって、この構文が可能であることを確信しました。 https://stackoverflow.com/a/2738576/3303546
解決方法は?
これは シンタックスエラー . さて、プログラマでない人や素人の人は 構文エラー と、一般的なバグと同一視してしまう。しかし、C++(および他の言語)では、より具体的な意味を持ちます。
があります。 言語文法 これは、翻訳の初期段階でコンパイラがソースコードを論理的なグループに分割するためのルールセットである。 これは、これらのグループに意味が付与される前の段階です(この部分は、以下のように呼ばれることもあります)。 セマンティックチェック ).
あなたが見た構文エラーは、コンパイラがソースコードとC++の文法規則を照合できなかったことを意味します。 コンパイラはプログラマが何を意図しているかを知ることは難しいのです。そのため、シンタックスエラーのメッセージは推測であったり、プログラマーの意図とは関係ないことが多いのです。
このエラーが表示されたとき、コンパイラは、おそらく文法規則の1つにマッチするようなコードの変更方法を提案していますが、それが実際に状況に応じて良い修正になるかどうかはわかりません。
ですから、この種のエラーは、エラーの詳細をあまり気にせず、単に"一般的な構文エラー"として扱えばいいのです。修正するには、構文エラーでないことが確実な、より単純な表現に戻り、書きたかったことに向かって積み上げていけばいいのです。
英語で例えると、quot;I the room went of"という文章になるかもしれません。 ある言語翻訳ソフトを想像してください。これは既知の文型と一致しませんが、どのようなエラーメッセージを報告できるでしょうか。 実際の提案では、おそらくこの文章を修正する助けにはならないでしょう。
あなたの具体的な例では、シンタックスエラーがあります。g++のエラーメッセージは異なります。
error: '.'トークンの前に一次式があることが期待されます。
ここで
一次式
はC++文法のエントリです。
.
トークンのことで、メンバアクセス演算子のことだと思われます。 しかし文法では、メンバーアクセス演算子の左側のオペランドは
一次式
(意味上の規則では、この一次式はアクセスしたいメンバーを持つオブジェクトを表すとされています)。
しかし、あなたの実際のコードでは、左側が
(double) boost::integer_traits<unsigned short>
の文法仕様と一致しません。
一次式
. (実際は型名です)。コンパイラはここから先には進めないので、そのまま終了します。
コンパイラはコードをどの文法規則にも一致させることができませんでしたが、あなたが関数型のキャストまたは型構築を書こうとしているのだと推測されます。
関数型キャストとは、以下のようなコードです。
int(5.0)
ということで、おそらく
boost::integer_traits<unsigned short>
を型名とし、それを
boost::integer_traits<unsigned short>(const_max)
つまり、ある変数をキャストして
const_max
をその型に変換します。
コンパイラがここで言う "型構築" が何を意味するのかよくわかりません。
NB. もし、あなたの質問にある実際のコードを修正する方法を知りたいのであれば、コードとエラーメッセージを投稿し、そのコードを修正する方法を尋ねる新しい質問を始めることをお勧めします。
関連
-
[解決済み】Visual Studio 2015で「非標準の構文; '&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] C++11のT&&(ダブルアンパサンド)の意味とは?
-
[解決済み] ポインタの「デリファレンス」とはどういう意味ですか?
-
[解決済み] int argc, char *argv[] とはどういう意味ですか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++エラー。アーキテクチャ x86_64 に対して未定義のシンボル
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] クラスにデフォルトコンストラクタが存在しない。
-
[解決済み】#include<iostream>は存在するのですが、「識別子 "cout "は未定義です」というエラーが出ます。なぜですか?
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較