Solved

Error when overriding base class constructor in subclass

Posted on 2008-10-05
7
1,081 Views
Last Modified: 2013-12-17
I receive the following error when I try to override a base class's constructor in a subclass.

An object reference is required for the non-static field, method, or property 'Chapter_6_project_3.Bee.weight'

attached is the relevant code, with a comment showing where the error is received.
using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using Chapter_6_project_3;

 

namespace chapter_6_project_3

{

    class Worker : Bee

    {

        public Worker(string[] jobsICanDo) : base(weight) //ERROR HERE!!!! it's for the base's parameter weight

        {

            this.jobsICanDo = jobsICanDo;

        }

 

        public override int ShiftsLeft

        {

            get

            {

                return shiftsToWork - shiftsWorked;

            }

        }

 

        private string currentJob = "";

        private string[] jobsICanDo;

        private int shiftsToWork;

        private int shiftsWorked;

 

        public string CurrentJob

        { 

            get

            {

                return currentJob;

            }

        }

 

        public bool DoThisJob(String potentialJob, int potentialShiftsToWork)

        {

            if (!String.IsNullOrEmpty(CurrentJob))

                return false;

 

            for (int i = 0; i < jobsICanDo.Length; i++)

            {

                if (potentialJob == jobsICanDo[i])

                {

                    currentJob = potentialJob;

                    shiftsToWork = potentialShiftsToWork;

                    return true;

                }

            }

 

            return false;

        }

 

        public bool WorkOneShift()

        {

            if (String.IsNullOrEmpty(currentJob))

                return false;

            shiftsWorked++;

 

            if (shiftsWorked > shiftsToWork)

            {

                shiftsWorked = 0;

                shiftsToWork = 0;

                currentJob = "";

                return true;

            }

            else

                return false;

        }

    }

}

 

 

//following ith base class

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

namespace Chapter_6_project_3

{

    class Bee

    {

        public Bee(double weight)

        {

            this.weight = weight;

        }

 

        public virtual int ShiftsLeft

        {

            get

            {

                return 0;

            }

        }

 

        private double weight;

 

        public virtual double GetHoneyConsumption()

        {

            double consumption;

            if (ShiftsLeft == 0)

                consumption = 7.5;

            else

                consumption = 9 + ShiftsLeft;

 

            if (weight > 150)

                consumption *= 1.35;

 

            return consumption;

        }

    }

}

Open in new window

0
Comment
Question by:jabrthel
  • 4
  • 3
7 Comments
 
LVL 6

Expert Comment

by:RishadanPort
ID: 22647549
yes there is no varible defined "weight"
0
 
LVL 6

Accepted Solution

by:
RishadanPort earned 125 total points
ID: 22647558
You need to declare your Worked constructor differently in order for it to work, like this:

public Worker(string[] jobsICanDo, double weight) : base(weight) <-- this will work
0
 

Author Comment

by:jabrthel
ID: 22647563
Yeah... but it's a parameter passed into the base class.  Isn't the structure as follows...
public class Class1 : base (baseParam1, baseParam2, etc.)

{

}

Open in new window

0
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

 

Author Comment

by:jabrthel
ID: 22647566
Oh... ok, I see
0
 

Author Comment

by:jabrthel
ID: 22647573
Yup, that's it.
0
 

Author Closing Comment

by:jabrthel
ID: 31503314
Well, that was a beginner's mistake.
0
 
LVL 6

Expert Comment

by:RishadanPort
ID: 22647583
using the keyword "base" means that you are dealing with the parent object.

If you do this:

base()   or base(  ... parameters ... )

You are constructing your parent object in a certain way.


You can also do this:

base.someMethod() or base.someVariable    as well
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
When we want to run, execute or repeat a statement multiple times, a loop is necessary. This article covers the two types of loops in Python: the while loop and the for loop.
The viewer will learn how to implement Singleton Design Pattern in Java.
The viewer will learn additional member functions of the vector class. Specifically, the capacity and swap member functions will be introduced.

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

25 Experts available now in Live!

Get 1:1 Help Now