Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2018, 10:46   #1
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
Вопрос Ошибка в программе.

Вот решил сделать тот тип программы которого нет в учебнике, и выдаёт ошибку, решил попробовать сделать что просил компилятор, выдало другую ошибку, решил эту ошибку и всё зароботало, но можно ли по другому решить проблему? (Надеюсь не убью Вас запутанностью программы?)
Вот метод:
Код:
public Class2(double d) 
    {
        diameter = d;
    }
Выдаёт ошибку: "Отсутствует аргумент, соответствующий требуемому формальному параметру "w" из "Class1.Class1(double)"

Решил эту проблему так: добавил к методу: ": base()", другая ошибка: "Отсутствует аргумент, соответствующий требуемому формальному параметру "w" из "Class1.Class1(double)". Добавил метод Class1 в Class1 с кодом:
Код:
    public Class1()
    {
    }
Ошибка исчезла полностью, но на фиг мне пустой метод?? Зачем компилятору он нужен??? Сейчас думаю Вас убью... Код программы:

Код:
using System;
class Class1 {
    double width;
    public Class1(double w)
    {
        width = w;
    }

    public Class1(double w)
    {
        width = w;
    }
}

class Class2 : Class1 {
    double length, diameter;
    public Class2(double l, double w) : base(w)
    {
        length = l;
    }

    public Class2(double d) : base()
    {
        diameter = d;
    }
}

class Class3 : Class2 {
    string type;
    public Class3(string t, double l, double w) : base(l, w)
    {
        type = t;
    }

    public Class3(string t, double d) : base(d)
    {
        type = t;
    }
}

class Class4 : Class3 {
    string color;
    public Class4(string s, string t, double l, double w) : base(t, l, w)
    {
        color = s;
    }

    public Class4(string s, string t, double d) : base(t, d)
    {
        color = s;
    }
}

class Program {
    static void Main()
    {
        Class4 ob1 = new Class4("Красный", "квадрат", 5, 5);
        Class4 ob2 = new Class4("Синий", "прямоугольник", 5, 20);
        Class4 ob3 = new Class4("Жёлтый", "круг", 8);
    }
}
Примечание: я его не полностью сделал, если надо законченный код, то напишите, его доделаю, и пришлю Вам.

Последний раз редактировалось Мaкс; 28.06.2018 в 10:56. Причина: Поправочка... Надо так: public Class1(){} а не так: public Class1(double w) {width = w;}
Мaкс вне форума Ответить с цитированием
Старый 28.06.2018, 10:50   #2
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Скорей всего кто то спросит: зачем такой запутанный код?? Это что бы закрепить тему многоуровневую иерахию классов.
Мaкс вне форума Ответить с цитированием
Старый 28.06.2018, 10:58   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от Мaкс Посмотреть сообщение
но на фиг мне пустой метод?? Зачем компилятору он нужен???
Потому что ВЫ так захотели:
Код:
public Class2(double d) : base()
Вы видите тут вызов конструктора класса Class1 без параметров? Вот и компилятор видит, вот и хочет, чтобы вы его добавили или добавили параметр для вызова конструктора с параметром.
p51x вне форума Ответить с цитированием
Старый 28.06.2018, 11:04   #4
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Потому что ВЫ так захотели:
Не я захотел, а компилятор, если бы не написал
Код:
: base()
программа выдала бы эту ошибку: "Отсутствует аргумент, соответствующий требуемому формальному параметру "w" из "Class1.Class1(double)".
Мaкс вне форума Ответить с цитированием
Старый 28.06.2018, 11:07   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Нет это вы захотели. ВЫ же Class2 унаследовали от Class1 и в Class1 написали конструктор с параметром? ВЫ. Значит читайте предыдущий пост.

П.С. Если вы не еще не поняли или не прочитали в учебнике, то писать base() не обязательно...

Последний раз редактировалось p51x; 28.06.2018 в 11:09.
p51x вне форума Ответить с цитированием
Старый 28.06.2018, 11:14   #6
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
П.С. Если вы не еще не поняли или не прочитали в учебнике, то писать base() не обязательно...
Это я понял! Вот та самая ошибка:
Изображения
Тип файла: png 321.PNG (20.3 Кб, 135 просмотров)
Мaкс вне форума Ответить с цитированием
Старый 28.06.2018, 11:15   #7
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

если не использовать base()
Мaкс вне форума Ответить с цитированием
Старый 28.06.2018, 11:17   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Посмотрите внимательно - ОШИБКА ОДНА И ТА ЖЕ.
Еще раз повторяю: Писать base() не обязательно. Компилятор достаточно умный, чтобы вызывать конструкторы базовых классов самостоятельно. Синтаксис с base придуман для программистов, чтобы они могли передать параметры и выбрать какой из конструкторов вызвать.
p51x вне форума Ответить с цитированием
Старый 28.06.2018, 11:21   #9
Мaкс
Форумчанин
 
Регистрация: 12.06.2018
Сообщений: 831
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Вот и компилятор видит, вот и хочет, чтобы вы его добавили или добавили параметр для вызова конструктора с параметром.
Как у него отбить охоту? Или что нужно дописать или удалить?
Мaкс вне форума Ответить с цитированием
Старый 28.06.2018, 11:23   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Так в процитированном все есть...
1. Добавить конструктор в базовый без параметров
2. Использовать base(что_то) для вызова имеющегося
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в программе Nefroz Работа с сетью в Delphi 4 08.05.2014 18:32
ошибка в программе charger Visual C++ 1 14.06.2011 00:20
Ошибка в программе C Renat21 Общие вопросы C/C++ 6 02.04.2011 18:00
С++ Ошибка в программе EwwwA Общие вопросы C/C++ 5 05.01.2009 23:12