関数内のすべてのローカル変数にautoを使用しようとしています。C++:関数を使ってクラスを変数として宣言する
次のコードください:コードをコンパイルする
class obj
{
public:
obj() {};
obj(obj&& o) = delete;
};
int main()
{
obj test0;
auto test1 = obj();
return 0;
}
:TEST0を定義することは完全に大丈夫ですが、TEST1の宣言の正確な同じ種類を行うにしようとすると、コンパイラであることを
$ g++ --std=c++1z main.cpp
main.cpp: In function ‘int main()’:
main.cpp:13:20: error: use of deleted function ‘obj::obj(obj&&)’
auto test1 = obj();
お知らせエラー。明らかにコンパイラエラーであるべきですが、この場合、objをautoで定義することはできませんか?私は制御できないQTオブジェクトでこの問題に取り組んでいます。
変数を宣言するためにC++ 98形式を使用していますか、またはautoを使用する別の方法はありますか?
ありがとうございました!それは右辺値であるとして宣言
auto test1 = obj();
で
'auto test1 = obj();'では、 "コピー初期化"を使用しています。しかし、 'obj'は、コピーコンストラクタ(コピーコンストラクタの宣言、コピーコンストラクタの暗黙的生成の防止)、コンストラクタブル(削除可能と宣言されている)のどちらでもありません。 – KABoissonneault
今後このようなトラップを防ぐには、C++の "Rule of 5"を使用することを検討してください – KABoissonneault
ありがとう、私は何が起こっているのか理解できていません。私の質問は、このようなクラスで自動的に使用できますか?もしそうなら。 –