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.


Anmelden zum Antworten