当前位置:   article > 正文

C++出现compile error解决方案

compile error

你是否有遇过这样的情况:

  1. class Base {
  2. public:
  3. Base(int a) : A(a) {}
  4. virtual ~Base(){}
  5. // print function in Base class
  6. void printA(){ std::cout << A << endl; }
  7. private:
  8. int A;
  9. };
  10. class Derived : public Base {
  11. public:
  12. Derived(int a, int b) : Base(a), B(b) {}
  13. virtual ~Derived(){}
  14. // print function in Derived class
  15. void printB(){ std::cout << B << endl; }
  16. private:
  17. int B;
  18. };
  19. int main()
  20. {
  21. Base* b0;
  22. int a=0, b=1;
  23. b0 = new Derived(a,b);
  24. b0->printA();
  25. b0->printB();
  26. return 0;
  27. }

在执行到b0->printB();的时候,compiler会出现以下错误:

 

1. static_cast<>

这种时候就改用:

static_cast<Derived*>(b0)->printB();

就可以使用了。

!!!注意!!!
Base class pointer无法存取Derived class member是正常的。任意存取Derived class member其实是非常危险的,Base class pointer不应该知道自己new了什么样的derived class。除非你真的知道你在干嘛,否则就请乖乖写virtual function并用override(c++11)方式实作这些功能。

2.虚函数

在class Base里面加上:

  1. class Base {
  2. public:
  3. Base(int a) : A(a) {}
  4. virtual ~Base(){}
  5. // print function in Base class
  6. void printA(){ std::cout << A << endl; }
  7. virtual printB(){} // virtual function to be override
  8. // virtual printB() = 0; // = 0: pure virtual function, must be override
  9. private:
  10. int A;
  11. };

而在class Derived 里面加上override保险:

  1. class Derived : public Base {
  2. public:
  3. Derived(int a, int b) : Base(a), B(b) {}
  4. virtual ~Derived(){}
  5. // print function in Derived class // override
  6. void printB() override { std::cout << B << endl; }
  7. private:
  8. int B;
  9. };

这样就不会有compile error了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/224386
推荐阅读
相关标签
  

闽ICP备14008679号