Компилятор отказывается смотреть за пределы неправильной подписи функцииC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Компилятор отказывается смотреть за пределы неправильной подписи функции

Сообщение Anonymous »

Я получаю ошибку: < /p>

Код: Выделить всё

b.cpp:44:50: error: no matching function for call to ‘B::A(int, int)’

build] /cpp/b.h:56:10: note: candidate: ‘virtual void B::A()’
[build]    56 |     void A();
[build]       |          ^~~~~~
[build] /cpp/B.h:56:10: note:   candidate expects 0 arguments, 2 provided
< /code>
Вот упрощенный код: < /p>
struct A {
int a;
int b;
A(int a=0, int b=0): a(a), b(b) {}
}

class SuperB {
A some_var;
SuperB(A a): some_var(a) {}
};

class B: SuperB {
B(): SuperB(A(1,3)) {}
void A() {
do something
}
}
Итак, проблема здесь заключается в том, что вместо создания и передачи временного объекта типа a к конструктору Super Class компилятор пытается вызвать метод A < /code>.
Я пытался изменить: < /p>

Код: Выделить всё

B(): SuperB(A(1,3)) {}

to:

Код: Выделить всё

B(): SuperB(1) {}

Это, по крайней мере, составлено, так как компилятор удалось найти конструктор struct a . Мой вопрос: почему? Почему компилятор не выясняет это? Я получаю этот void a () получает приоритет, но это явно не очень хороший кандидат. Почему он не перемещается вниз по списку?>

Подробнее здесь: https://stackoverflow.com/questions/793 ... e-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»