Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 28.06.2018, 11:46   #1
Мaкс
Форумчанин
 
Аватар для Мaкс
 
Регистрация: 12.06.2018
Адрес: Научная столица России.
Сообщений: 413
Репутация: -5
Вопрос Ошибка в программе.

Вот решил сделать тот тип программы которого нет в учебнике, и выдаёт ошибку, решил попробовать сделать что просил компилятор, выдало другую ошибку, решил эту ошибку и всё зароботало, но можно ли по другому решить проблему? (Надеюсь не убью Вас запутанностью программы?)
Вот метод:
Код:

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 в 11:56. Причина: Поправочка... Надо так: public Class1(){} а не так: public Class1(double w) {width = w;}
Мaкс вне форума   Ответить с цитированием
Старый 28.06.2018, 11:50   #2
Мaкс
Форумчанин
 
Аватар для Мaкс
 
Регистрация: 12.06.2018
Адрес: Научная столица России.
Сообщений: 413
Репутация: -5
По умолчанию

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

Цитата:
Сообщение от Мaкс Посмотреть сообщение
но на фиг мне пустой метод?? Зачем компилятору он нужен???
Потому что ВЫ так захотели:
Код:

public Class2(double d) : base()

Вы видите тут вызов конструктора класса Class1 без параметров? Вот и компилятор видит, вот и хочет, чтобы вы его добавили или добавили параметр для вызова конструктора с параметром.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 28.06.2018, 12:04   #4
Мaкс
Форумчанин
 
Аватар для Мaкс
 
Регистрация: 12.06.2018
Адрес: Научная столица России.
Сообщений: 413
Репутация: -5
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Потому что ВЫ так захотели:
Не я захотел, а компилятор, если бы не написал
Код:

: base()

программа выдала бы эту ошибку: "Отсутствует аргумент, соответствующий требуемому формальному параметру "w" из "Class1.Class1(double)".
Мaкс вне форума   Ответить с цитированием
Старый 28.06.2018, 12:07   #5
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,471
Репутация: 2073
По умолчанию

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

П.С. Если вы не еще не поняли или не прочитали в учебнике, то писать base() не обязательно...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!

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

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

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

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в программе 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 06.01.2009 00:12


16:11.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru