C++: エラー C2280: 削除された関数を参照しようとしています。
2022-02-10 09:51:20
次のコードはエラーを報告します: error C2280: attempting to reference deleted function
#include <list>
#include <vector>
#include <memory>
#include <mutex>
#include <string>
class ActionQueue {
private:
std::list<std::shared_ptr<std::string>> ctxQueue;
std::mutex m;
public:
bool is_empty();
void emplace_front(string* ctx_ptr);
std::string& pop_back();
};
int main() {
std::vector<ActionQueue> ctxQueueArray;
return 0;
}
その理由は以下の通りです。
std::mutexのコピーコンストラクタは無効化されているため。
mutex( const mutex& ) = delete;
は、コンパイラが ActionQueue のデフォルトのコピー コンストラクタを生成しないようにします。
ActionQueue(const ActionQueue& actionQueue) = delete;
そして std::vector<ActionQueue> は ActionQueue にコピーコンストラクタが必要なので、エラーを報告しています。
std::mutex m; を std::shared_ptr<std::mutex> mPtr; に変更すれば簡単に終わります。
#include <list>
#include <vector>
#include <memory>
#include <mutex>
#include <string>
class ActionQueue {
private:
std::list<std::shared_ptr<std::string>> ctxQueue;
std::shared_ptr<std::mutex> mPtr;
public:
ActionQueue() : mPtr(new std::mutex()) {}
bool is_empty();
void emplace_front(string* ctx_ptr);
std::string& pop_back();
};
std::shared_ptr のコピーコンストラクタが無効になっていないので、コンパイラはデフォルトで ActionQueue(const ActionQue& actionQueue) を生成し、コンパイルはパスします。
参考資料
https://en.cppreference.com/w/cpp/thread/mutex/mutex
https://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr
関連
-
C++11での移動セマンティクス(std::move)と完全な前進(std::forward)。
-
undefinederror: 'dynamic_cast' の前に unqualified-id を指定する必要があります。
-
C++ std::string は NULL で初期化できない、基本的な使い方
-
C++のostreamの詳細な使用方法
-
C++ JSON ライブラリ jsoncpp 新 API の使用法 (CharReaderBuilder / StreamWriterBuilder)
-
致命的なエラー LNK1169: 1つ以上の多重定義されたシンボルが見つかりました 解決策
-
不完全なクラス型へのポインタが許可されていないのですが、どのようなエラーですか?
-
ランタイムエラー: 'std::logic_error' のインスタンスを投げた後に terminate が呼び出されました。
-
C++ inet_pton, inet_ntop 関数
-
デバッグエラー Assertion Failed 問題について
最新
-
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++コンパイルエラー:||error: ld returned 1 exit status|.
-
戦闘機ゲームのC++実装(ソースコード)
-
c++ std::move Principle の実装と使用法のまとめ
-
C++ - 文字列クラス超詳細紹介
-
C++] error: 'const xxx' を 'this' 引数として渡すと修飾子が破棄される [-fpermissive] [C++] error: 'const xxx' を 'this' 引数として渡すと修飾子が破棄される。
-
ISO C++ではポインタと整数の比較は禁止されています[-fpermissive]。
-
C++: エラー C2228: '.str' の左側にはクラス/構造体/結合が必要
-
C++プロジェクトのコンパイル時に再定義の多重定義問題を解決する
-
C++ Error no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::string&)
-
stoi' の解決策は、Dev-c++ のこのスコープで宣言されていません。