функция (» «) вызывает неоднозначность «вызова перегруженного QChar (const char[2])

#c #qt

#c #qt

Вопрос:

Можете сказать мне, почему приведенный ниже код вызывает эту ошибку :

 call of overloaded 'QChar(const char[2])' is ambiguous  
  

и код :

 void func(QChar a) {
    qDebug() << a;
}

void main() {
    func(" ");
}
  

Когда String.remove(QChar,Qt::CaseSensitive) работает : a.remove(" ");

Ответ №1:

Вы передаете строковый литерал ( " " ), который имеет тип const char[2] (один элемент, содержащий пробел, и другой для завершения ). Вы хотите передать литерал char, записанный в одинарные кавычки: func(' ') .

QString::remove() Функция перегружена как для строк, так и для отдельных символов. Даже в этом случае вы хотите передать литерал char ' ' , что более эффективно, чем " " (последнее подразумевает вызов strlen() ).).

Ответ №2:

Попробуйте написать

 void main() {
  func(' ');
}
  

Похоже, компилятор думает, что вы передаете const char* не a char из-за двойных кавычек.
И для QChar from const char* нет конструктора.

Комментарии:

1. Нет, нет QChar(const char*) .

2. @mmutz: О, я хотел написать «нет», просто ошибка в написании. Спасибо за исправление.