C # странная проблема с конструктором - PullRequest
1 голос
/ 17 ноября 2010

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

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
        }
    }
}

Ответы [ 8 ]

9 голосов
/ 17 ноября 2010

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

3 голосов
/ 17 ноября 2010

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

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

Компилятор позволяет вам опустить спецификатор доступности и по умолчанию имеет значение private. Немного синтаксической сахарной ошибки IMO, с которой я хотел бы покончить.

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

2 голосов
/ 17 ноября 2010

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

Изменение:

HeapSort(int size, int min1, int max1)

Кому:

public HeapSort(int size, int min1, int max1)
1 голос
/ 17 ноября 2010

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

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

1 голос
/ 17 ноября 2010

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

0 голосов
/ 17 ноября 2010

Ваш конструктор частный. Это должно быть публично.

0 голосов
/ 17 ноября 2010

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

0 голосов
/ 17 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...