2010-11-17 8 views
1

J'ai IMHO problème très étrange avec le constructeur de trois arguments, Lorsque je tente d'exécuter le programme visual studio me montre un seul bogue: "'Sort.HeapSort' ne contient pas un constructeur qui prend 3 arguments 112 35 ".C# étrange problème avec le constructeur

namespace Sort 
{ 
    class HeapSort 
    { 
     private int[] A; 
     private int heapSize; 
     private int min; 
     private int max; 
     Random myRandom = new Random(); 

     HeapSort(int size, int min1, int max1) //this is the three argument constructor. 
     { 
      heapSize = size - 1; 
      min = min1; 
      max = max1; 
      A = new int[size]; 
     }  
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      int size = 30; 
      int min = 0; 
      int max = 100; 

      HeapSort myHeapSort = new HeapSort(size,min,max); //In this line is the bug 
     } 
    } 
} 
+1

Avez-vous essayé de déclarer le constructeur public? –

+0

Pourriez-vous supprimer les lignes inutiles plz :) – ykatchou

+0

peut-être vous devriez décorer vos classes avec les modificateurs d'accès appropriés. Public, privé, protégé, etc. – StingyJack

Répondre

9

Votre constructeur est déclaré privé car vous avez omis un spécificateur d'accès. Ajoutez le mot clé public avant la définition du constructeur.

+0

Cela fonctionne, merci :) – Konrad

+0

Vous devriez vérifier la case sous les boutons de mise à jour/de vote bas pour accepter sa réponse puis au lieu d'éditer le titre pour le marquer résolu. –

3

Vous devez spécifier votre constructeur comme public, ainsi:

public HeapSort(int size, int min1, int max1) 

Le compilateur vous permet d'omettre le prescripteur de l'accessibilité et la valeur par défaut privée. Bit d'un sucre syntaxique gotcha IMO que je souhaite serait fait disparaître. Donc, puisque vous avez un constructeur privé, votre code client ne le "voit" pas et le compilateur essaie d'appeler le constructeur public, ce qui entraîne naturellement l'erreur que vous voyez.

+0

Cela fonctionne merci :) – Konrad

2

Votre constructeur n'est pas public, il est privé (vous n'avez inclus aucun modificateur donc il est privé par défaut) donc le code appelant ne peut pas le "voir".

Change:

HeapSort(int size, int min1, int max1) 

Pour:

public HeapSort(int size, int min1, int max1) 
1

Vous devez ajouter public à votre constructeur, sinon il est considéré comme private, et donc inaccessible à partir de votre Main().

1

Le constructeur avec trois paramètres n'a pas de modificateur d'accessibilité et par défaut private.

Changez la déclaration en public HeapSort(int size, int min1, int max1) et vous serez prêt à partir.

0

Il semble qu'il vous manque un mot clé public avant le constructeur.

0

Rendez votre constructeur public!

0

Votre constructeur est privé. Cela doit être public.