2010-10-30 2 views
0

Mon code source (ci-dessous) génère l'erreur CS0563 car les deux paramètres de mon opérateur CombinedJobs + (voir "// Étape 5: ... "dans le code source) sont listés comme Job (par opposition à int, double, etc). Comment puis-je changer ce code pour éliminer cette erreur? Ce code est en réponse à l'assignation ci-dessous.Erreur CS0563 (Un des paramètres d'un opérateur binaire doit être le type conteneur)

Attribution:

« . Concevez une classe d'emploi pour les services d'accueil Harold La classe contient quatre champs d'emploi données description (par exemple, « laver les fenêtres »), temps en heures pour terminer le travail (pour exemple, 3.5), le taux par heure facturé pour le poste (par exemple, 25,00 $) et le total des honoraires pour le poste (taux horaire multiplié par les heures) Inclure les propriétés pour obtenir et définir chaque champ sauf le total des frais de ce champ sera en lecture seule et sa valeur est calculée à chaque fois que est réglé ou que le nombre d'heures est réglé. um de deux Jobs est un nouveau Job contenant les descriptions des Jobs d'origine (joints par "et"), la somme du temps en heures pour les Jobs d'origine, et la moyenne du taux horaire pour les Jobs d'origine. Ecrivez une fonction Main() qui montre que toutes les méthodes fonctionnent correctement. Enregistrez le fichier sous DemoJobs.cs «

De:. Microsoft® Visual C# ® 2008, Introduction à la programmation orientée objet, 3e, Joyce Farrell

Code Source:

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

Le setter de JobTotalFee est ** EVIL **. Et votre code serait beaucoup plus court si vous utilisiez les propriétés automatiques. J'utiliserais 'public double JobTotalFee {get {return this.JobRate * this.JobTotalTime;}};' sans champ de sauvegarde du tout. Mais votre affectation nécessite que vous définissiez le champ de sauvegarde dans les setters de JobRate et JobTotalTime. Aucune idée pourquoi. – CodesInChaos

Répondre

2

Le operator+ méthode doit être à l'intérieur de la classe d'un de ses paramètres. comme dans votre cas, les deux paramètres sont Job, la méthode doit être à l'intérieur de la classe Job. Il ne peut pas être à l'intérieur CombinedJobs.

De plus, vous avez déclaré que l'opérateur renvoyait CombinedJobs, ce qui signifie que vous devez le renvoyer. Cela ne provoque pas l'erreur que vous décrivez, mais cela entraînerait une autre erreur de compilation.

+0

Merci, c'était très utile. J'ai presque eu ce programme en état de marche maintenant. Juste une chose à gauche ... – Nooob

Questions connexes