Форум программистов, компьютерный форум CyberForum.ru

Перегрузка конструктора - C++

Восстановить пароль Регистрация
 
MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
03.04.2014, 15:01     Перегрузка конструктора #1
есть класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template <class Type>
class VRTSmartStr : public SmartArray<Type>{
public:
    VRTSmartStr() :SmartArray(){};
    VRTSmartStr(_In_opt_z_ const Type* Val, size_t Size = 0){
        SetData(Val, (Size ? Size : StringLength(Val))+1);
        }
 
    VRTSmartStr(const char* Val, size_t Size = 0) :SmartArray(){
        Buf = strangeType<Type>::ToBaseType(Val, Size);
        }
    
    VRTSmartStr(const INT64 val, int sys = 10){
        Buf = strangeType<Type>::NumberToStr(val, sys);
        }
   ......
}
 
 
main(...){
//так вот использую
VRTSmartStr<char> G(36);
}
при таком написании все работает нормально, но как только добавляю еще один конструктор
C++
1
2
3
    VRTSmartStr(const double val, int sys = 10){
        Buf = strangeType<Type>::NumberToStr(val, sys);
        }
выдает ошибку
VRTSmartStr<char>::VRTSmartStr: неоднозначный вызов перегруженной функции
может быть "VRTSmartStr<char>::VRTSmartStr(const VRTSmartStr<char> &)"
или "VRTSmartStr<char>::VRTSmartStr(const double,int)"
или "VRTSmartStr<char>::VRTSmartStr(const INT64,int)"
или .....

к стати если класс поменять с double на int, long или даже char все равно остается проблемма, почему второе число сбивает компилятор с толку и как можно это обойти?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
03.04.2014, 15:25     Перегрузка конструктора #2
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
почему второе число сбивает компилятор с толку
При чем тут второе число? Его сбивает столку, что ты конструктору подсунул int и теперь фиг знает, к чему его приводить - к INT64, или к double. Конструктора для инта-то нет.
Если INT64 у тебя это long long, то напиши 36ll, если тебе для целого конструктор нужен.

Не по теме:

А в случае с <char> не знаю, как он тебе на редефинишн для
VRTSmartStr(_In_opt_z_ const Type* Val, size_t Size = 0)
VRTSmartStr(const char* Val, size_t Size = 0)
не заругался.

MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
03.04.2014, 16:00  [ТС]     Перегрузка конструктора #3
а как можно это обойти, чтобы написав константное число он сам преобразовывал его или в INT64 или в double
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
03.04.2014, 16:28     Перегрузка конструктора #4
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
а как можно это обойти, чтобы написав константное число он сам преобразовывал его или в INT64 или в double
Никак. Про то, как явно указать компилятору тип, выше уже написал.
MrAndrey_ka
 Аватар для MrAndrey_ka
77 / 77 / 2
Регистрация: 13.05.2009
Сообщений: 536
Записей в блоге: 1
03.04.2014, 17:11  [ТС]     Перегрузка конструктора #5
обощел написав конструктор еще и дял int
C++
1
2
3
4
5
6
7
8
9
10
    VRTSmartStr(const int val, int sys = 10){
        Buf = strangeType<Type>::NumberToStr((INT64)val, sys);
        }
 
    VRTSmartStr(const INT64 val, int sys = 10){
        Buf = strangeType<Type>::NumberToStr(val, sys);
        }
 
    VRTSmartStr(const double val, int sys = 10){
        Buf = strangeType<Type>::NumberToStr(val, sys);
Ilot
Модератор
Эксперт С++
1767 / 1142 / 223
Регистрация: 16.05.2013
Сообщений: 3,020
Записей в блоге: 5
Завершенные тесты: 1
03.04.2014, 17:33     Перегрузка конструктора #6
А не проще ли конструктор запихнуть в шаблон?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.04.2014, 18:47     Перегрузка конструктора
Еще ссылки по теме:

C++ Вызов конструктора
Ошибка при перегрузка конструктора. Родительский объект инициализирует поле по умолчанию C++
C++ Перегрузка конструктора

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
03.04.2014, 18:47     Перегрузка конструктора #7
Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
обощел написав конструктор еще и дял int

Цитата Сообщение от MrAndrey_ka Посмотреть сообщение
обощел
Ты программу пишешь, или борешься с компилятором?
Yandex
Объявления
03.04.2014, 18:47     Перегрузка конструктора
Ответ Создать тему
Опции темы

Текущее время: 22:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru