Ну, я новичок на C++, и я тренировался с конструкторами. Я создаю плохую версию класса String
, и мне было предложено выполнить следующую задачу:Неоднозначный конструктор
a) Создайте конструктор, где вы можете сделать преобразование от const char*
до String
.
b) Создайте конструктор с «n» первыми буквами из const char*
. Если «n» длиннее этого const char*
, копия этого const char*
будет написана как String
. Если 'n == 0', программа напишет пустой String
.
Думаю, у меня не было проблем с их внедрением; это то, что у меня есть:
Cadena::Cadena(const char* cad){
tam_ = strlen(cad);
s_ = new char[tam_ + 1];
strcpy(s_,cad);
}
Cadena::Cadena(const char* cad, unsigned lon){
tam_ = lon;
s_ = new char[tam_ + 1];
for(unsigned i = 0; i < tam_; i++){
s_[i] = cad[i];
}
s_[tam_] = '\0';
}
Моя проблема возникает, когда я пытаюсь проверить их на мой основной метод, где я получаю эту ошибку: «c1 неоднозначное».
Я попытался сделать это с помощью фиктивного параметра (объявляющего моего параметр unsigned
как int
без имени в моем заголовке), но я хотел бы initizialite этого второго параметра на 0, и я не могу сделать это, используя фиктивный параметр.
Я знаю, что компилятор не знает, какой конструктор должен использовать, но я хотел бы как-то это сделать. Может кто-нибудь мне помочь? Извините за мой плохой английский. не
Показать основной способ пожалуйста. – songyuanyao
Почему цикл for вместо просто strcpy во втором конструкторе? – kfsone
Пожалуйста, отправьте сообщение [mcve]. Похоже, у вас есть аргумент по умолчанию для параметра длины во втором конструкторе. Если это так, конечно, это неоднозначно. Как компилятор должен знать, хотите ли вы вызвать первый конструктор, или второй со вторым аргументом, равным нулю? – Praetorian