Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегруженный конструктор / 7 сообщений из 7, страница 1 из 1
09.03.2007, 19:41
    #34381435
dimadv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегруженный конструктор
Проблема следующая, класс содержит член - ссылку, есть два конструктора, различаются одним параметром, а так все одинаково, при попытки использовать во втором конструкторе, первый, выдается следующее сообщение
no appropriate default constructor available
что не верно, очень не хочется переписывать одно и тоже два раза, или даже больше.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
class A
{
private: 
     ClassB& m_cMember;
public:
     A(ClassB& _B);
     A(ClassB& _B, int _iCount)
}

A::A(ClassB& _B):m_cMember(&_B)
{ .... }
A::A(ClassB& _B, int _iCount)
{
    A(_B);
    ......
}
...
Рейтинг: 0 / 0
09.03.2007, 19:51
    #34381454
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегруженный конструктор
dimadvПроблема следующая, класс содержит член - ссылку, есть два конструктора, различаются одним параметром, а так все одинаково, при попытки использовать во втором конструкторе, первый, выдается следующее сообщение
no appropriate default constructor available
что не верно, очень не хочется переписывать одно и тоже два раза, или даже больше.
Код: plaintext
1.
2.
3.
4.
A::A(ClassB& _B, int _iCount)
{
  
    ......
}

Надо так
Код: plaintext
1.
2.
3.
4.
A::A(ClassB& _B, int _iCount) :m_cMember(&_B)
{
//    A(_B); -- Так нельзя!!!
    ......
}
...
Рейтинг: 0 / 0
09.03.2007, 19:53
    #34381458
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегруженный конструктор
[src с++]
A::A(ClassB& _B, int _iCount) :m_cMember(_B) // амперсанд перед _B лишний
{
[/src]----
Если молния в лоб угодит,
Значит просто подставлен лоб
...
Рейтинг: 0 / 0
10.03.2007, 12:27
    #34381873
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегруженный конструктор
dimadv пишет:
> Автор: "dimadv"
> Проблема следующая, класс содержит *член - ссылку,* есть два
> конструктора, различаются одним параметром, а так все одинаково, при
> попытки использовать во втором конструкторе, первый, выдается следующее
> сообщение
> no appropriate default constructor available
> что не верно, очень не хочется переписывать одно и тоже два раза, или
> даже больше.
>
> class A
> {
> private:
> ClassB& m_cMember;
> public:
> A(ClassB& _B);
> A(ClassB& _B, int _iCount)
> }
>
> A::A(ClassB& _B):m_cMember(&_B)
> { .... }
> A::A(ClassB& _B, int _iCount)
> {
> A(_B);
> ......
> }

Это - создание временной переменной , а не вызов конструктора.
Если очень надо, то делается это так:

new (this) A(_B);

Но в вашем случае я думаю лучше продублировать либо весь код
конструктора в другом конструкторе, либо продублировать
только инициализацию мемберов, а какой-то сложный
общий код инициализации вынести в отдельную функцию,
которую и вызывать из двух конструкторов.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
10.03.2007, 13:31
    #34381930
blinded
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегруженный конструктор
MasterZiv
dimadv пишет:
> Автор: "dimadv"
> Проблема следующая, класс содержит *член - ссылку,* есть два
> конструктора, различаются одним параметром, а так все одинаково, при
> попытки использовать во втором конструкторе, первый, выдается следующее
> сообщение
> no appropriate default constructor available
> что не верно, очень не хочется переписывать одно и тоже два раза, или
> даже больше.
>
> class A
> {
> private:
> ClassB& m_cMember;
> public:
> A(ClassB& _B);
> A(ClassB& _B, int _iCount)
> }
>
> A::A(ClassB& _B):m_cMember(&_B)
> { .... }
> A::A(ClassB& _B, int _iCount)
> {
> A(_B);
> ......
> }

Это - создание временной переменной , а не вызов конструктора.
Если очень надо, то делается это так:

new (this) A(_B);

Но в вашем случае я думаю лучше продублировать либо весь код
конструктора в другом конструкторе, либо продублировать
только инициализацию мемберов, а какой-то сложный
общий код инициализации вынести в отдельную функцию,
которую и вызывать из двух конструкторов.
Posted via ActualForum NNTP Server 1.4
MasterZiv ты чему детей учишь? Не дай бог класс будет наследником кого-то и по второму разу пойдет инициализация папы, он ведь потом и не сообразит где ресурсы текут!!!
...
Рейтинг: 0 / 0
10.03.2007, 22:49
    #34382308
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегруженный конструктор
blinded пишет:
> MasterZiv ты чему детей учишь? Не дай бог класс будет наследником

С трудом представляю детей, программирующих на С++.
Так что уж пусть сами думают о последствиях.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
12.03.2007, 10:55
    #34383544
Перегруженный конструктор
MasterZiv ты чему детей учишь? Не дай бог класс будет наследником кого-то и по второму разу пойдет инициализация папы, он ведь потом и не сообразит где ресурсы текут!!!

да мало того, не дай бог неперехваченное исключение внутри вызываемого конструктора..
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Перегруженный конструктор / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]