[解決済み] this' ポインタを 'const Line' から 'Line &' に変換できない?
質問
この方法です。
bool Point::Intersects(const Line& line) const {
return (line.ContainsPoint(*this, false));
}
このエラーは、'this' ポインタを 'const Line' から 'Line &' に変換できないことを意味します。 この変更は
bool Point::Intersects(const Line& line) const {
return const_cast<Line&>(line).ContainsPoint(*this, false);
}
はエラーを修正しますが、問題を修正する正しい方法とは思えません。なぜ、元の方法がエラーとみなされるのでしょうか?
参考になれば。
ContainsPoint(const Point& point, bool isInfinite)
は非定常であり、それが呼び出すすべてのメソッドも同様に非定常です。
解決方法は?
ある意味、自分で答えを出しているようなものですね。
あなたの
Intersects
メソッドでは、パラメータ
line
が宣言されています。
const
. このため、この変数の使い方が制限されます。具体的には
const
を期待するメソッドにのみ渡すことができます。
const
行オブジェクトです。
しかし、ご指摘の通り
ContainsPoint
が宣言されていない
const
. そのため、上記の要件を満たしていません。
const
メソッドを
const
オブジェクトは許可されません)。これが、元のメソッドがエラーを発生させる理由です。また、2番目のバージョンが動作する理由もここにあります。
const_cast
.
本当の問題は
ContainsPoint
(そしておそらく、このメソッドが呼び出すすべてのメソッドも、非
const
). ここには大きな設計上の欠陥があるように思われます。というのも
ContainsPoint
があるかどうかをチェックすることです。
Point
が
Line
の場合、副作用は予期しないものになります。ですから、それが
const
メソッドを使用します。実際、(あなたの例が示すように)ユーザは
Line
は
期待する
ContainsPoint
になります。
const
メソッドを使用します。したがって、本当の解決策は、デザインを変更することです。
Line
のようなメソッドが
ContainsPoint
が宣言されています。
const
インスタンスの状態を明らかに変化させるメソッドのみを非
const
関連
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】C++コンパイルタイムエラー:数値定数の前に期待される識別子
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み] 式はクラス型を持つ必要があります。
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み] なぜ 'this' はポインターで、参照ではないのですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】文字列関数で'char const*'のインスタンスを投げた後に呼び出されるterminate [閉店].
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】cc1plus:エラー:g++で認識されないコマンドラインオプション"-std=c++11"
-
[解決済み】エラー:strcpyがこのスコープで宣言されていない
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較