Ich habe eine Klasse, und ich weiß, warum es zu kompilieren, schlägt fehl:Klasse Mitglied hat sein eigenes ständiges Mitglied, daher Konstruktor wird implizit gelöscht
// My class .hpp
class MyClass
{
public:
MyClass();
MyClass(/*yet another constructor*/);
private:
FOO::Dependancy dep_1;
};
// Dependancy.hpp
namespace FOO {
class Dependancy : public Parent
{
public:
Dependancy(const Bar& _bar);
~Dependancy();
virtual int method_1(/*bla*/);
virtual int method_1(/*bla bla*/);
private:
const Bar _bar;
};
}
Wie Sie die Abhängigkeits Klasse const Mitglied sehen hat. Also, wenn kompiliert, (im Gegensatz zu g ++) Klirren ++ sagt mir genau, was mit dem Code falsch ist:
1. error: object of type 'MyClass' cannot be assigned because its copy assignment operator is implicitly deleted
2. copy assignment operator of 'MyClass' is implicitly deleted because field 'dep_1' has a deleted copy assignment operator
3. copy assignment operator of 'Dependancy' is implicitly deleted because field '_bar' has no copy assignment operator
Meine Frage ist, wie das Problem zu lösen, wohl wissend, dass FOO::Dependancy
und seine eigene Mitglieder (dh Bar
) und so sind statische Bibliotheken, auf die ich keinen Zugriff auf ihren Quellcode habe. Mit anderen Worten, ich kann nichts gegen dieses konstante Mitglied tun, und ich muss das Problem in meiner eigenen Klasse lösen.
Der von Ihnen angezeigte Code weist nicht das von Ihnen behauptete Problem auf. –
Bevorzugen Sie die Initialisierung über die Zuweisung jedes Mal. Finde heraus, wie die Initialisierung von Klassenmitgliedern funktioniert. –
@KerrekSB, ich habe meine Variablen buchstäblich umbenannt und meine Compiler-Ausgabe hier gepostet. Dies ist, was ich bekomme, um den Konstruktor meiner Klasse aufzurufen durch 'class_instance = MyClass (/ * noch ein Konstruktor * /);'. Warum schlägst du vor, dass mein Code kein Problem hat? – Pouya