Auf gelöschte Funktion verweisen?
-
Hallo,
ich habe eine Klasse die ich aber nicht nutzen kann:CPUCalculator.h
#pragma once #include "stdafx.h" class CPUCalculator { public: void CalculateNextFrame(Array3D* DisplayData); void RestoreLastFrame(Array3D* Frame, Array3D* Data, SDL_Renderer* Renderer); void SaveThisFrame(Array3D* Frame, Array3D* Data); private: Array3D BufferFrame; Array3D BufferSettings; Array3D SaveSlot0; Array3D SaveSlot1; Array3D SaveSlot2; Array3D SaveSlot3; Array3D SaveSlot4; Array3D SaveSlot5; Array3D SaveSlot6; Array3D SaveSlot7; Array3D SaveSlot8; Array3D SaveSlot9; };
Wenn ich dann in der main.cpp
CPUCalculator CPUc;
hinzufüge. Kriege ich gleich einen Fehler von VS 2017 an den Kopf geschmissen:
Fehler C2280 "CPUCalculator::CPUCalculator(void)" : Es wurde versucht, auf eine gelöschte Funktion zu verweisen
Ich versteh nicht genau warum. Alle anderen Klassen (die genauso aufgebaut sind) funktionieren ohne Probleme.
LG
-
Kannst du ein Minimalbeispiel machen das den Fehler zeigt?
Dir schein ein Konstruktor zu fehlen.Edit: Besonders der Code von Array3D scheint relevant zu sein.
Edit2:
<a href= schrieb:
Ideone">
class B { public: B(int i); }; B::B(int i) { } class A { B b; }; int main() { A a; return 0; }
prog.cpp: In function ‘int main()’:
prog.cpp:18:4: error: use of deleted function ‘A::A()’
A a;
^
prog.cpp:12:7: note: ‘A::A()’ is implicitly deleted because the default definition would be ill-formed:
class A
^
prog.cpp:12:7: error: no matching function for call to ‘B::B()’
prog.cpp:7:1: note: candidate: B::B(int)
B::B(int i)
^
prog.cpp:7:1: note: candidate expects 1 argument, 0 provided
prog.cpp:1:7: note: candidate: constexpr B::B(const B&)
class B
^
prog.cpp:1:7: note: candidate expects 1 argument, 0 provided
prog.cpp:1:7: note: candidate: constexpr B::B(B&&)
prog.cpp:1:7: note: candidate expects 1 argument, 0 provided
-
Kopiere die komplette Meldung aus dem Outputfenster.
Saveslot als Array drängt sich eigentlich auf.
-
Array3D.h
#pragma once #include "stdafx.h" class Array3D //Klasse von Array3D { size_t m_width, m_height; //Nicht öffentliche Variable std::vector<int> m_data; //Nicht öffentliche Variable public: Array3D(size_t x, size_t y, size_t z, int init = 0) : //Anlegen m_width(x), m_height(y), m_data(x*y*z, init) {} int& operator()(size_t x, size_t y, size_t z) //Zugreifen { return m_data.at(x + y * m_width + z * m_width * m_height); } };
Komplette Meldung:
1>c:\users\tim\documents\visual studio 2017\projects\rendertest\rendertest\main.cpp(210): error C2280: "CPUCalculator::CPUCalculator(void)" : Es wurde versucht, auf eine gelöschte Funktion zu verweisen 1>c:\users\tim\documents\visual studio 2017\projects\rendertest\rendertest\cpucalculator.h(25): note: Compiler hat hier "CPUCalculator::CPUCalculator" generiert 1>c:\users\tim\documents\visual studio 2017\projects\rendertest\rendertest\cpucalculator.h(25): note: "CPUCalculator::CPUCalculator(void)": Die Funktion wurde implizit gelöscht, weil eine Datenmember "CPUCalculator::SaveSlot9" keinen geeigneten Standardkonstruktor aufweist oder die Überladeauflösung mehrdeutig war. 1>c:\users\tim\documents\visual studio 2017\projects\rendertest\rendertest\cpucalculator.h(24): note: Siehe Deklaration von "CPUCalculator::SaveSlot9"
-
Der Compiler sagt es ganz klar: Array3D hat keinen Defaultkonstruktor, daher kann auch CPUCalculator keinen haben.