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 CPalliniC 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

            CPalliniC Online
            CPalliniC Online
            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]

            In testa che avete, signor di Ceprano?

            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