非静的メンバ関数の無効な使用
2022-02-08 20:47:26
ここで、2つのメソッドを持つObjectクラスがあります。
- Recvは、データを受け取り、それをProcessに渡す役割を担っている
- プロセスは、データを処理する責任があります
このクラスは、データを受信した後、その背後にある他のビジネス・ロジックをブロックすることなく、データを処理するスレッドを開始するようにしたい。
class Object {
public:
void Recv() {
int a = 2;
std::thread t(Process, a);
// Do something
t.join();
}
void Process(int val) {
std::cout << "Process, val=" << val << "\n";
}
};
コンパイルエラー
error: invalid use of non-static member function
解決方法
アプローチⅠ.
// std::thread t(Process, a); // before modification
std::thread t(&Object::Process, this, a); // after modification
方法2:Processを静的関数として設定する
void Recv() {
int a = 2;
std::thread t(&Object::Process, a); // modified
// Do something
t.join();
}
static void Process(int val) { // modified
std::cout << "Process, val=" << val << "\n";
}
参考文献
https://thispointer.com/c11-start-thread-by-member-function-with-arguments/
関連
-
vs2015 はソースファイル stdio.h を見つけることができない 解決策
-
エラー: コンストラクタ、デストラクタ、または '.' トークンの前に型変換が必要です。
-
C++: エラー C2228: '.str' の左側にはクラス/構造体/結合が必要
-
C++: エラー C2280: 削除された関数を参照しようとしています。
-
C++11 ランダムライブラリ乱数
-
stoi' の解決策は、Dev-c++ のこのスコープで宣言されていません。
-
EclipseのC++コードでシンボル'std'が解決できない問題の解決
-
文字列がこのスコープで宣言されていない 問題の解決
-
c++ベクトル使用集
-
C++ inet_pton, inet_ntop 関数
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
error: '.' トークンの前に未修飾の ID が必要です。
-
Linux の 'pthread_create' への未定義参照問題を解決しました。
-
C++:ソースファイルを開くことができない問題
-
c++ std::move Principle の実装と使用法のまとめ
-
error: '&' トークンの前にイニシャライザーがあるはずです。
-
gcc/g++ コンパイル時のエラー解析で期待される型指定子の前に
-
const char*' から `char*' への変換が無効な場合の対処法
-
[C++] 不完全な型へのメンバーアクセスエラー
-
C++プロジェクトのコンパイル時に再定義の多重定義問題を解決する
-
"name.bat "は、内部または外部のコマンド、操作可能なプログラムまたはバッチファイルとして認識されません。