Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596

Почему не работает конструктор?

24.08.2017, 13:49. Показов 3498. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
- Смысл моего вопроса становится ясен из минимального примера приведенного ниже:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//------------------------------------------------------------------------------
// .........
template<typename  T>
class  DArr
{
public:
  // конструктор.
  DArr( const int  _beg, const int  _end )
  {}
 
};
//------------------------------------------------------------------------------
 
 
// глобальный экземпляр.
DArr<int>  darr_1( 1, 10 );  //( РАБОТАЕТ. )
 
 
// некая структура.
struct  Bbbbb
{
  // .........
  DArr<int>  darr_1();             //( РАБОТАЕТ. )
  // экз. в структуре.
  DArr<int>  darr_11( 1, 10 );  //( НЕ РАБОТАЕТ !!!. )
};
// экз. некоей структуры.
Bbbbb  bbbbb;
 
 
//##### ..... #####
__fastcall  TForm1::TForm1(TComponent*  Owner)
  : TForm(Owner)
{
  // экз. в конструкторе основной формы.
  DArr<int>  darr_1( 1, 10 );  //( РАБОТАЕТ. )
}
Т.е. внутри глобальной структуры экземпляр с конструктором по умолчанию - создается,
а экземпляр с мной определенным конструктором с 2-мя параметрами - НЕ создается.
( Компилятор устанавливает курсор на начало первого параметра (единицы) и дает сообщение
"E2293 ) expected". Т.е. снова пытается применить конструктор по умолчанию!)

Я пытался запретить конструктор по умолчанию:
C++
1
2
private:
   DArr();
но это ничего не дало.

- Подскажите пожалуйста, как заставить работать мой конструктор с параметрами в структуре.
Заранее благодарен.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.08.2017, 13:49
Ответы с готовыми решениями:

Почему не работает конструктор?
подскажите почему не инициализируется а4? Почему не происходит неявного вызова конструктора с одним аргументом, а после обычный конструктор...

Почему конструктор не работает?
Нужна помощь, коллеги, так как сам ничего не понял. Создал класс. Хотелось бы, чтобы при создании объекта явный конструктор класса...

Почему не работает конструктор копирования?
Подскажите, пожалуйста, где ошибка в коде? Вылетает прога с ошибкой.. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

10
807 / 534 / 158
Регистрация: 27.01.2015
Сообщений: 3,017
Записей в блоге: 1
24.08.2017, 13:53
зачем ты пишешь __fastcall ?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
24.08.2017, 13:54
Цитата Сообщение от Staut Посмотреть сообщение
C++
1
DArr<int> *darr_11( 1, 10 ); *//( НЕ РАБОТАЕТ !!!. )
Для C++11:
C++
1
DArr<int>  darr_11 = DArr<int>( 1, 10 );
Для C++03 пишите конструктор в Bbbbb,
в списке инициализации которого и
инициализируйте этот член класса.
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
24.08.2017, 13:58
Цитата Сообщение от Ferrari F1 Посмотреть сообщение
зачем ты пишешь __fastcall ?
Это не он пишет, это среда (С++ Builder) так делает для классов форм.
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
24.08.2017, 14:11  [ТС]
- Croessmah, если я меняю структуру так:
C++
1
2
3
4
struct  Bbbbb
{
  DArr<int>  darr_11 = DArr<int>( 1, 10 );
};
то, естественно, получаю ошибку:
E2233 Cannot initialize a class member here. Да, и у меня RAD Studio XE3.

Добавлено через 2 минуты
- А, кажется понял. Сейчас попробую ...
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
24.08.2017, 14:12
Цитата Сообщение от Staut Посмотреть сообщение
E2233 Cannot initialize a class member here. Да, и у меня RAD Studio XE3.
Значит так:
C++
1
2
3
4
5
6
7
struct  Bbbbb
{
  Bbbbb(): darr_11(1, 10) 
  {
  }
  DArr<int>  darr_11;
};
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
24.08.2017, 14:16
Цитата Сообщение от Staut Посмотреть сообщение
DArr<int> *darr_1(); * * * * * * //( РАБОТАЕТ. )
это не объявление экземпляра класса с дефолтным конструктором))
это - объявление прототипа функции,
которая называется darr_1,
и возвращает DArr<int> по значению
1
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
24.08.2017, 14:18  [ТС]
- Т.е. надо делать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// некая структура.
struct  Bbbbb
{
  // конструктор некоей структуры.
  Bbbbb()
  : darr_11( DArr<int>( 1, 10 ) )
  {}
 
  // экз. по умолчанию.
  DArr<int>  darr_1();    //( РАБОТАЕТ. )
  // экз. с параметрами.
  DArr<int>  darr_11;  //(ТЕПЕРЬ РАБОТАЕТ.)
};
// .........
Bbbbb  bbbbb;
- Спасибо огромное Croessmah. Теперь все работает.
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
24.08.2017, 14:20
Цитата Сообщение от Staut Посмотреть сообщение
Т.е. надо делать так
Выше hoggy написал про другой косяк.
Уберите скобки оттуда, иначе это получается
объявление функции-члена класса.
Я даже внимания не обратил,
потому что написано "Работает".
0
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 596
12.10.2017, 09:37  [ТС]
- Виноват, прошу прощения hoggy, Croessmah. Сам не заметил, какую ерунду написал!
0
Велосипедист...
 Аватар для Mournful Max
353 / 220 / 73
Регистрация: 15.12.2015
Сообщений: 785
12.10.2017, 10:18
Цитата Сообщение от Staut Посмотреть сообщение
C++
1
darr_11( DArr<int>( 1, 10 ) )
Так работает, но тогда вызывается не DArr( const int _beg, const int _end ), а DArr( const DArr& ) ( конструктор копирования ).
Croessmah уже написал как правильно:
Цитата Сообщение от Croessmah Посмотреть сообщение
C++
1
: darr_11(1, 10)
Добавлено через 3 минуты
----
Цитата Сообщение от Staut Посмотреть сообщение
C++
1
DArr<int> *darr_1();
Цитата Сообщение от Croessmah Посмотреть сообщение
Уберите скобки оттуда, иначе это получается
объявление функции-члена класса.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2017, 10:18
Помогаю со студенческими работами здесь

Не работает конструктор копирования почему-то...
#include &quot;stdlib.h&quot; #include &quot;stdio.h&quot; #include &lt;iostream&gt; #include &lt;cstddef&gt; using namespace std; class Top { public: ...

Неправильно работает конструктор копирования list, почему?
#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;list&gt; #include &lt;iterator&gt; #include &lt;iostream&gt; using namespace std; list...

Почему не работает следующий код из книги Страуструпа (конструктор значений по умолчанию)
#include&lt;iostream&gt; using namespace std; class Date { int a, b; static Date default_date; public: Date(int x = 0, int...

Почему не вызывается конструктор копирования?
...У меня в книге описаны случаи при которых вызывается конструктор копирования. Один из этих случаев: : &quot;Когда аргумент имеет...

Почему не вызывается конструктор копии?
Почему не вызывается конструктор копии? class CPoint { friend std::istream &amp;operator&gt;&gt;(std::istream &amp;in, CPoint &amp;obj); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru