c++のクラスでシグナル関数を使用する
2022-02-08 08:10:55
例は以下の通りです。
using namespace std;
class test
{
public:
void a()
{
while ( 1 )
signal( SIGINT, change );
}
void change( int sag )
{
cout << "here\n";
}
};
int main()
{
test t;
t.a();
}
これは、エラーを報告します
error: invalid use of non-static member function
なぜなら、signalの関数プロトタイプだからです。
void (*signal(int signo , void (*func)(int)))(int);
signo: 処理される信号を示す。
func: は void funciont(int) 型の関数へのポインタである。
戻り値:戻り値は void function(int) 型の関数への関数ポインタである。
また、クラス内のメンバ関数を呼び出すと、暗黙のうちにこのポインタが関数の前に置かれるため、パラメータのミスマッチが発生します。
解決策は
1. change()をスタティック関数として宣言する。静的関数は、このポインタを暗黙のパラメータとして受け取りません。
2. 2. フレンド関数を使用し、クラス自身のメンバーにはアクセスできるが、クラスのメンバーにはアクセスできないようにする。
関連
-
[解決済み】C++ アルゴリズム的に単純な再帰的回文チェッカー
-
[解決済み】c++でプログラム実行時にヒープが破壊されたエラーが発生する。
-
[解決済み] 1回線で複数の入力が可能
-
[解決済み] エラー C2109: 添え字には配列またはポインタ型が必要です。
-
[解決済み] CreateCompatibleBitmapおよびCreateDIBSection(メモリDCの場合)
-
[解決済み] コンテナクラス シーケンス c++
-
[解決済み] 64ビットマシンでC++プログラムを64ビットとしてコンパイルする方法は?
-
[解決済み] char 型のエンティティに const char * 型の値を割り当てることはできない C OOP
-
[解決済み] CString.Replace 複数文字の置き換え
-
C++図書館管理システム
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み] Randomがスコープで宣言されていない
-
[解決済み】Xcode 11.1: iostream' ファイルが見つかりません。
-
[解決済み】QtアプリでQSettingsを使用して設定を読み込む方法
-
[解決済み] 'cl' は内部コマンドまたは外部コマンドとして認識されません。
-
[解決済み] エラー C2100 - 不正な方向性
-
[解決済み] warpPerspectiveとperspectiveTransformの違いは何ですか?
-
[解決済み] C++ Visual Studio 「非標準の構文。メンバへのポインタを作成するには '&' を使用」 [終了しました]
-
[解決済み] C++-enumクラスを値として渡すか、それともconst参照として渡す方が良いですか?
-
[解決済み] コンパイラは "Error: stray 'in program" と文句を言う。