C++のコンパイルエラーで修飾子が破棄される [-fpermissive] 。
2022-02-15 08:38:31
エラーは
error: passing 'const sn::InetAddress' as 'this' argument of 'std::string sn:: InetAddress::ip_ntoa()' discards qualifiers [-fpermissive]
該当するエラーコードを抽出する。
//=========================================================
//In the TcpConnection class
void TcpConnection::showip() const
{
cout << "ip: " << _localAddr.ip_ntoa()
<< "port: " << _localAddr.port_ntoh() << endl
}
//==========================================================
//In the InetAddress class
string InetAddress::ip_ntoa()
{
return string(inet_ntoa(_addr.sin_addr));
}
unsigned short InetAddress::port_ntoh()
{
return ntohs(_addr.sin_port);
}
//==========================================================
エラーの理由は簡単です。C++では、オブジェクトへのconst参照はそのオブジェクトのconst関数にしかアクセスできません。他の関数がそのオブジェクトのメンバーを変更する可能性があり、コンパイラはそのようなことを避けるためにconstでない関数を呼ぶことは間違っていると考えているからです。
const で修飾されたメンバ関数内で、const でないメンバ関数を呼び出すことはできない、という意味です。また、error: ...discards qualifiersは、修飾子がないことを意味します。
回避策としては、InetAddress::ip_ntoa()、InetAddress::port_nto() 関数に const 修飾子 this を追加して、オブジェクトのメンバが変更されないことを示すことである。以下のようになります。
string InetAddress::ip_ntoa() const
{
return string(inet_ntoa(_addr.sin_addr));
}
unsigned short InetAddress::port_ntoh() const
{
return ntohs(_addr.sin_port);
}
関連
-
Linux の 'pthread_create' への未定義参照問題を解決しました。
-
C++ JSON ライブラリ jsoncpp 新 API の使用法 (CharReaderBuilder / StreamWriterBuilder)
-
error: label 'xxxxxxx' [-fpermissive] にジャンプします。
-
不完全なクラス型へのポインタが許可されていないのですが、どのようなエラーですか?
-
const char*' から `char*' への変換が無効な場合の対処法
-
[C++] 不完全な型へのメンバーアクセスエラー
-
抽象クラス型 "my class "のオブジェクトは使用できません 解決方法
-
EclipseのC++コードでシンボル'std'が解決できない問題の解決
-
ベクター使用時、ベクター添え字が範囲外、その他類似のエラーが発生する。
-
c++は、ダブルフリーまたは破損(fasttop)が表示されます。
最新
-
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++11での移動セマンティクス(std::move)と完全な前進(std::forward)。
-
C++がpythonを呼び出す
-
エラー: ローカル変数 'res' に関連付けられたスタックメモリのアドレスが返された
-
C++-コラムフィッティングフィットシリンダー
-
ソースファイルをコンパイルするとDev C++のランタイムエラーが発生し、コンパイルできない
-
C++] error: 'const xxx' を 'this' 引数として渡すと修飾子が破棄される [-fpermissive] [C++] error: 'const xxx' を 'this' 引数として渡すと修飾子が破棄される。
-
c++のエラー: エラーC2601: 'main' : ローカル関数定義が不正
-
c++ experience summary(1):linux c compile with warning: assign makes pointer from integer without cast reason.
-
警告: この関数では 'p' が初期化されていない状態で使用されることがあります。
-
munmap_chunk():不正なポインタとSegmentation faultのバグを解決。