?
Solved

Error when overriding base class constructor in subclass

Posted on 2008-10-05
7
Medium Priority
?
1,090 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 500 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
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

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

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

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.
Whether you’re a college noob or a soon-to-be pro, these tips are sure to help you in your journey to becoming a programming ninja and stand out from the crowd.
The viewer will learn how to implement Singleton Design Pattern in Java.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.
Suggested Courses
Course of the Month16 days, 2 hours left to enroll

850 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