2010-11-17 4 views
1

У меня ИМХО очень странная проблема с конструктором с тремя аргументами. Когда я пытаюсь запустить программу, визуальная студия показывает мне только одну ошибку: «Sort.HeapSort» не содержит конструктор, который принимает 3 аргумента 112 35 ".C# странная проблема с конструктором

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

Вы пробовали объявить публичный конструктор? –

+0

Не могли бы вы удалить бесполезные строки plz :) – ykatchou

+0

возможно, вы должны украсить свои классы соответствующими модификаторами доступа. Public, Private, protected и т. Д. – StingyJack

ответ

9

Ваш конструктор объявлен приватным, так как вы опустили спецификатор доступа. Добавьте ключевое слово public до определения конструктора.

+0

Это работает, спасибо :) – Konrad

+0

Вы должны проверить ящик под кнопками «Обновить/Уменьшить голос», чтобы принять его ответ, вместо того, чтобы редактировать заголовок, чтобы пометить его. –

3

Вы должны указать свой конструктор, как общественности, таким образом:

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

Компилятор позволяет опустить доступность спецификатор и по умолчанию частными. Бит синтаксического сахара получил ИМО, которого я хотел бы покончить с этим.

Итак, поскольку у вас есть частный конструктор, ваш клиентский код не «видит» его, а компилятор пытается вызвать публичный конструктор, что, естественно, приводит к ошибке, которую вы видите.

+0

Это работает спасибо :) – Konrad

2

Ваш конструктор не является общедоступным, он личный (вы не включили никаких модификаторов, поэтому по умолчанию он является закрытым), поэтому вызывающий код не может «видеть» его.

Изменение:

HeapSort(int size, int min1, int max1) 

To:

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

Вам нужно добавить public в конструкторе, в противном случае он считается private, и, следовательно, недоступны из вашего Main().

1

Конструктор с тремя параметрами на нем не имеет модификатора доступности, поэтому по умолчанию используется значение private.

Измените объявление на public HeapSort(int size, int min1, int max1), и вы будете в порядке.

0

Похоже, что перед конструктором отсутствует ключевое слово «public».

0

Сделайте свой конструктор общедоступным!

0

Ваш конструктор является закрытым. Он должен быть общедоступным.