エラー: 非静的メンバ関数の無効な使用
学習のために再掲載します。 https://blog.csdn.net/bill_ming/article/details/6872165
#include <iostream>
名前空間std.を使用する
クラスA
{
<未定義
public :
A (int i)
{
<未定義
a = i とする。
}
int fun(int b)
{
<未定義
a*c+bを返します。
}
int c;
プライベート :
int a;
};
int main()
{
<未定義
A×(18)です。
int A::*pc;
pc = &A::c;
x.*pc = 5;
int (A::*pfun)(int);
pfun = A::fun;
A *p = &x です。
cout << (p->*pfun)(10)<<endl;
は 0 を返します。
}
error: invalid use of non-static member function 'int A::fun(int)'| エラーが発生します。
int (A::*pfun)(int)=A::fun;
に変更する。
int (A::*pfun)(int)=&A::fun;
C++では、クラス名+コロン2つ+メンバ名(学名は "quilified-id" )からなるもの、例えば A::x の場合、x がクラス A の static メンバでなければ A::x は左値を表すことができない。
また、関数型から関数ポインタ型へのデフォルトの変換については、関数型が左値の場合にのみ機能します。すべての非静的メンバ関数については、関数型から関数ポインタ型へのそのようなデフォルトの変換はなく、したがってコンパイラはこの
p = A::f
立ち上がるために必要なこと
(1) 関数のアドレスが決まるかどうかということですが、非静的メンバ関数ポインタはポリモーフィックな振る舞いをすることがあるので、少なくともコンパイル時にはそのアドレスは実際には決まらない。
(2) すべてのコンパイラは、クラスの非静的メンバ関数のコードのコピーを(コンパイル時か実行時かにかかわらず)1つだけ生成することは確かですが、オブジェクトごとに別々のコピーを持つ非静的メンバ変数と違って、非静的メンバ関数のコードのコピーを生成することはできません。-- しかし、これは言語の特徴ではなく、コンパイラの実装の詳細に過ぎないのではないでしょうか。抽象的な言語機能としては、非静的メンバ関数は、非静的メンバ変数と同様に、オブジェクトのインスタンスがないときは、左の値として整形されないということです。
関連
-
cmake :pthread_createへの未定義の参照、CMakeがpthreadライブラリを必要とする問題
-
よくある例外の問題と解決策
-
null のプロパティ 'style' を読み取ることができない 問題
-
ArrayAdapter は、リソース ID が TextView である必要があります。
-
PythonのTypeError: unbound methodの問題を解決する
-
アプリケーションのPagerAdapterがPagerAdapter#notifyDatを呼び出さずにアダプタの内容を変更しました。
-
OSError: [Errno 98] アドレスはすでに使用中です。
-
PY 実行プログラム・プロンプト "TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple'" ソリューション・インサイト
-
ansible error resolution:UNREACHABLE sshでホストへの接続に失敗しました。
-
オブジェクト[1]からnilオブジェクトを挿入しようとしました' Error
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
二重解放または破損(!prev)エラーについて
-
collect2.exe [エラー] ld が 1 の終了ステータスを返しました。
-
ArrayAdapter がリソース ID に TextView を要求する問題を解決する方法
-
Python 3.9 のモジュール 'time' には 'clock' という属性がありません。
-
configparserモジュールがインポートできない、import configparserエラー解決法
-
ImportError: virtualenv を使用して仮想環境を作成する際に、urllib3 という名前のモジュールがないエラーが発生します。
-
raise JSONDecodeError("Expecting value", s, err.value) from None
-
C++で'atoi'がこのスコープで宣言されていない問題を解決するにはどうしたらいいですか?
-
Javaで例外が発生しました。トークンの構文エラー、構成要素の誤配置。
-
lua が nil 値を呼び出そうとする。