2016-09-16 15 views
-1

さて、ここでは、クラスの配列を作成しようとしています。私のクラスTEAMLEADERは抽象クラスEmployeeから派生しています。しかし、MainにTEAMLEADERのインスタンスを作成しようとすると、TEAMLEADERが見つからないというエラーメッセージが表示されます。クラスのインスタンスを作成できません。#

namespace Lab3 
{ 
    public abstract class Employee 
    { 
     protected string EmployeeName; 
     protected int EmployeeNumber; 
     protected double WeeklySalary; 

     public Employee (string EmployeeName, int EmployeeNumber, double WeeklySalary) 
     { 
      this.EmployeeName = EmployeeName; 
      this.EmployeeNumber = EmployeeNumber; 
      this.WeeklySalary = WeeklySalary; 
     } 

     public Employee(string EmployeeName) 
     { 
      assignID(EmployeeNumber); 
     } 

     public override string ToString() 
     { 
      return EmployeeName + " " + EmployeeNumber + " " + WeeklySalary; 
     } 

     protected virtual double CalcSalary() 
     { 
      return CalcSalary(); 
     }//"Virtual" is a keyword that says, "This can be overriden in the derived class." 

     private static int assignID(int EmployeeNumber) 
     { 
      EmployeeNumber.ToString(); 
      EmployeeNumber++; 
      return EmployeeNumber; 
     } 

    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Employee[] workerarray = new Employee[4]; 
      workerarray[0] = new TeamLeader("Rachel", 18, 1000000.00, 52000000.00, true); 
     } 
    } 
} 

別のクラス/タブには、TEAMLEADERクラスがあります。

public class TeamLeader:Employee 
{ 

    protected double AnnualSalary; 
    protected bool WeeklyGoal; 

    public override void CalcSalary() 
    { 
     if (WeeklyGoal == true) 
     { CalcSalary = (AnnualSalary/52) * 1.10; } 

     else (CalcSalary = AnnualSalary/52); 
    } 

    public TeamLeader(string EmployeeName, int EmployeeNumber, double WeeklySalary, double AnnualSalary, bool WeeklyGoal):base(EmployeeName, EmployeeNumber, WeeklySalary) 
    { 
     this.WeeklyGoal = WeeklyGoal; 
     this.AnnualSalary = AnnualSalary; 
    } 
} 

問題は私の主な方法です。 TeamLeaderのインスタンスを作成できない理由を理解できません。それは抽象クラスではないので、メインがそれを認識してインスタンスを作成できないようにすべきですか?

using Lab3; 

を自分のメインクラスファイルの先頭に:

+0

同じ名前空間にありますか?あなたはコードのその部分を欠いているようです。 –

+0

これは同じ名前空間にあります(または同じ名前空間にあるはずです)が、別のタブにあります。 –

+0

あなたはteamleaderファイル全体を投稿できますか? Visual Studioを使用している場合は、TeamLeaderのrの直後(メイン)にカーソルを置いて、コントロールを押します。 –

答えて

0

は、追加しようとしたことがありますか?

+0

はい。私も "名前空間Lab3 {}"を試しました –

+0

あなたが言ったことを間違って読みました。 –

+0

はい、それをMAINクラスの先頭に追加しても機能しませんでした。 –

0

この

をお試しくださいあなたはTeamLeaderクラスが配置されているファイルの先頭にnamespace Lab3を追加したことを確認してください。次に、このコード行をメインファイルの先頭に追加します。using Lab3;

これがうまくいかない場合は、これを試してください。

あなたはTeamLeaderクラスを別のアセンブリに追加しました これを解決するにはメインは、あなたのアセンブリをプロジェクト>ソリューション上で参考

クリックを追加し、追加の

クリックして配置されているアセンブリ内の参照に

クリック

は、それが働いていたかいない場合は私に知らせてください

0

クラスにパブリックデフォルトコンストラクタがありますか?

public Employ() 
{ 
} 

コマンド

Employee[] workerarray = new Employee[4]; 

が実行されると、それはタイプEmployの4つの新しいオブジェクトを作成する必要がありますが、パラメータなしのコンストラクタがないため、それらを作成することはできません。

+0

それは真実ではありません私はそれを試しました –

+0

配列を作成しない場合 メモリの領域を予約するクラスの新しいインスタンスを作成 –