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

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

Сообщение 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 к конструктору супер класса компилятор пытается вызвать метод a.
Я попытался изменить
b (): superb (a (1,3)) {}
to
b (): superb (1) {} < /p>
Это, по крайней мере, составлено, так как компилятор удалось найти конструктор struct. Мой вопрос в том, почему. Почему компилятор не выясняет это. Я получаю void a получает приоритет. Но это явно не хороший кандидат. Почему он не движется вниз по списку?>

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

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

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

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

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

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