einfacher Vererbungssyntax kompiliert nicht
-
Hallo,
Mir ist kein besserer Titel eingefallen - ich lerne gerade C++ und will dynamisches Binden ausprobieren in der
compare(Namespace* a, Namespace* b)Methode. Zugegeben ist es komisch, dass sie an ein Objekt gebunden ist aber ich will nur sehen, wie dynamisches binden bei zwei Objekten unterschiedlicher Vererbungsstufe hier passiert.
Der code kompiliert nicht - einmal:./Str.h:7:19: error: expected class name class Str: public NamespaceTest {und einmal
testing.cpp:14:25: error: cannot initialize a parameter of type 'NamespaceTest *' with an rvalue of type 'Str *' std::cout << p.compare(&a ,&q) << std::endl;#include <iostream> #include <vector> #include "NamespaceTest.h" #include <string> #include "Str.h" int main(){ Str a(1.0,4.0); Str b(2.0,2.0); NamespaceTest q(1,2.0); NamespaceTest p(2,3.0); std::cout << p.compare(&a ,&q) << std::endl; return 0; }#ifndef GUARD_Str_h #define GUARD_Str_h #include <vector> #include "NamespaceTest.h" #include <iostream> class Str: public NamespaceTest { public: Str(double a, double b):a(a), b(b){}; ~Str(){}; double get_member(); double get_member2(); private: double a; double b; }; #endif#ifndef GUARD_namespacetest_h #define GUARD_namespacetest_h #include <iostream> #include "Str.h" class NamespaceTest { public: NamespaceTest():member{1}, member2{1.0} {}; NamespaceTest(int, double); NamespaceTest(const NamespaceTest& ref){ this->member = ref.member; this->member2 = ref.member2; } int get_member(); void set_member(int x); double get_member2() const; bool compare(NamespaceTest* a, NamespaceTest* b); private: int member; double member2; }; #endif
-
Hallo,
"Str" inkludiert "NamespaceTest" und umgekehrt (zirkular). In NamespaceTest solltest du das entfernen.
-
Du hast einen Cross-Include, d.h. "Str.h" und "NamespaceTest.h" binden sich gegenseitig ein.
Deine
compare-Funktion besteht quasi aus 3 Objekten (this,aundb). Soll das so sein oder doch nur zwei Objekte vergleichen? Dann entweder nur einen Parameter oder aber diese Funktion alsstaticdeklarieren.Und du solltest deinen Namensgebung verbessern:
NamespaceTestals Name für eine Klasse?
-
okay mache ich ab jetzt, danke!