Ошибка CS0563 (один из параметров двоичного оператора должен быть содержащего типа) - PullRequest
0 голосов
/ 30 октября 2010

Мой исходный код (ниже) генерирует ошибку CS0563, потому что оба параметра в моем операторе CombinedJobs + (см. "// Шаг 5: ..." в исходном коде) указаны как задания (в отличие от int, double, так далее). Как я могу изменить этот код, чтобы устранить эту ошибку? Этот код является ответом на присвоение, указанное ниже.

Назначение:

"Разработка класса Job для Harold's Home Services. Класс содержит четыре поля данных - Job описание (например, «мытье окон»), время в часах для завершения работы (для например, 3,5), почасовая ставка, взимаемая за работу (например, 25,00 долл. США), и общая плата за Работа (почасовая ставка, часы). Включите свойства, чтобы получить и установить каждое поле, кроме общая плата - это поле будет доступно только для чтения, и его значение рассчитывается каждый раз, когда почасовая оплата или количество часов установлено. Перегрузите оператор +, чтобы два задания можно добавить Сумма двух заданий - это новое задание, содержащее описания обоих исходные задания (объединенные «и»), сумма времени в часах для исходных заданий и среднее значение почасовой ставки для оригинальных рабочих мест. Напишите функцию Main (), которая демонстрирует, что все методы работают правильно. Сохраните файл как DemoJobs.cs. "

От: Microsoft® Visual C # ® 2008, Введение в объектно-ориентированное программирование, 3e, Джойс Фаррелл

Исходный код:

using System;

//Step 1: Creating the Job class and designating its fields

   public class Job

   {

      private string jobDescription;

      private int jobTotalTime;

      private double jobRate;

      private double jobTotalFee;


//Step 2: Using the 'this' object will allow me to designate values for 

//"this" instantiation of an object later in the program

      public string JobDescription
      {
         get
         {
            return this.jobDescription;
         }
         set
         {
            this.jobDescription = value;
         }
      }  

      public int JobTotalTime
      {
         get
         {
            return this.jobTotalTime;
         }
         set
         {
            this.jobTotalTime = value;
         }
      }  

     public double JobRate
      {
         get
         {
            return this.jobRate;
         }
         set
         {
            this.jobRate = value;
         }
      }       

    public double JobTotalFee
      {
         get
         {
            return this.jobTotalFee;
         }
         set
         {
            this.jobTotalFee = this.JobRate * this.JobTotalTime;
         }
      }  

//Step 3: Creating a method will allow me to display the different jobs 

//with their descriptions and other variable fields later in the program

   public void JobMessage()

   {

      Console.WriteLine("Job description: {0} /nTotal time needed to complete the job: {1} hours /nHourly fee: ${2} /nTotal fee for the job is: ${3}", this.JobDescription, this.JobTotalTime, this.JobRate, this.JobTotalFee);

   }


}

//Step 4: Creating two instantiations of the Job Class

public class CreateTwoJobs

{

   public static void Main()

   {

   Job jobA = new Job();

   Job jobB = new Job();


   jobA.JobDescription = "washing windows";

   jobA.JobTotalTime = 5;

   jobA.JobRate = 25.00;


   jobB.JobDescription = "walking dogs";

   jobB.JobTotalTime = 10;

   jobB.JobRate = 11.00;


   jobA.JobMessage();

   jobB.JobMessage();

   }

}


//Step 5: Creating a third instantiation of the Job Class that is a combination 

//of the first two instantiations using the overloaded + operator


public class CombinedJobs

{

   public CombinedJobs(string jobDescription, int jobTotalTime, double jobRate, double jobTotalFee)

   {

   JobDescription = jobDescription;

   JobTotalTime = jobTotalTime;

   JobRate = jobRate;

   JobTotalFee = jobTotalFee;

   }


   public static CombinedJobs operator+(Job jobA, Job jobB)

   {

   string newDescription = jobA.JobDescription + " and " + jobB.JobDescription;

   int newTotalTime = jobA.JobTotalTime + jobB.JobTotalTime;

   double newJobRate = (jobA.JobRate + jobB.JobRate) / 2;

   double newTotalFee = newJobRate * newTotalTime

   }


   public void CombinedJobMessage()

   {

      Console.WriteLine("Job description: {0} /nTotal time needed to complete the job: {1} hours /nHourly fee: ${2} /nTotal fee for the job is: ${3}", newDescription, newTotalTime, newJobRate, newTotalTime);

   }   


   public static void Main()

   {

      CombinedJobMessage();

   }

}      

1 Ответ

3 голосов
/ 30 октября 2010

Метод operator+ должен находиться внутри класса одного из его параметров.Поскольку в вашем случае оба параметра Job, метод должен быть внутри класса Job.Он не может быть внутри CombinedJobs.

Кроме того, вы объявили оператор как возвращающий CombinedJobs, так что это означает, что вы действительно должны его вернуть.Это не вызывает описываемую вами ошибку, но может привести к другой ошибке компиляции.

...