Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Please explain the reason of the error

Please explain the reason of the error

Scheduled Pinned Locked Moved C / C++ / MFC
help
6 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • _ Offline
    _ Offline
    _anil_
    wrote on last edited by
    #1

    Please explain why the error class base { public: void fun1() { } virtual void call() { } }; class derive:public base { public: void call() { fun1(); // ERROR- function does not take 0 arguments } void fun1(int i) { } }

    Regards Anil

    S 1 Reply Last reply
    0
    • _ _anil_

      Please explain why the error class base { public: void fun1() { } virtual void call() { } }; class derive:public base { public: void call() { fun1(); // ERROR- function does not take 0 arguments } void fun1(int i) { } }

      Regards Anil

      S Offline
      S Offline
      Stuart Dootson
      wrote on last edited by
      #2

      Because fun1 in derive hides the definition of fun1 in base. Use base::fun1(), like this:

      class base
      {
      public:
      void fun1()
      {
      }

      virtual void call()
      {
      }
      };

      class derive:public base
      {
      public:
      void call()
      {
      **base::**fun1(); // ERROR- function does not take 0 arguments
      }

      void fun1(int i)
      {

      }
      };

      Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p

      _ 1 Reply Last reply
      0
      • S Stuart Dootson

        Because fun1 in derive hides the definition of fun1 in base. Use base::fun1(), like this:

        class base
        {
        public:
        void fun1()
        {
        }

        virtual void call()
        {
        }
        };

        class derive:public base
        {
        public:
        void call()
        {
        **base::**fun1(); // ERROR- function does not take 0 arguments
        }

        void fun1(int i)
        {

        }
        };

        Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p

        _ Offline
        _ Offline
        _anil_
        wrote on last edited by
        #3

        Why the base::fun1() is needed ? If the fun1(int i) is not there then there is no error. Once the overload function is declare its giving the error.

        Regards Anil

        S C 2 Replies Last reply
        0
        • _ _anil_

          Why the base::fun1() is needed ? If the fun1(int i) is not there then there is no error. Once the overload function is declare its giving the error.

          Regards Anil

          S Offline
          S Offline
          Stuart Dootson
          wrote on last edited by
          #4

          _anil_ wrote:

          Why the base::fun1() is needed ? If the fun1(int i) is not there then there is no error. Once the overload function is declare its giving the error.

          Did you even read my answer? To repeat what I said - the error's because fun1 in derive hides the definition of fun1 in base. It (fun1 in derive) is not an overload, because it's defined in a different scope than fun1 in base.

          Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p

          _ 1 Reply Last reply
          0
          • _ _anil_

            Why the base::fun1() is needed ? If the fun1(int i) is not there then there is no error. Once the overload function is declare its giving the error.

            Regards Anil

            C Offline
            C Offline
            CPallini
            wrote on last edited by
            #5

            With your fun1(int) in derived class you're hiding the base class fun1. See here [^]. :)

            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
            [My articles]

            1 Reply Last reply
            0
            • S Stuart Dootson

              _anil_ wrote:

              Why the base::fun1() is needed ? If the fun1(int i) is not there then there is no error. Once the overload function is declare its giving the error.

              Did you even read my answer? To repeat what I said - the error's because fun1 in derive hides the definition of fun1 in base. It (fun1 in derive) is not an overload, because it's defined in a different scope than fun1 in base.

              Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p

              _ Offline
              _ Offline
              _anil_
              wrote on last edited by
              #6

              Ok Got it. Thanks.

              Regards Anil

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • World
              • Users
              • Groups