вот мой код класса
class A {
public:
A(int* a){}
};
int main()
{
int*pptr=nullptr;
A(pptr); // compile error : there is no matched constructor for type A
// but..... the pptr is certainly int*!!!
A((int*)(pptr));// if I write like this will be fine,compiler never tells me the error
A a(pptr);// fine too
A a=A(pptr);// fine too
}
Я хотел бы знать, в чем причина этой ситуации, будь то MSVC или g++, сообщается об одной и той же ошибке.
пожалуйста, не полагайтесь на комментарии только по вашему вопросу. Также не следует перефразировать сообщения об ошибках компилятора, а лучше включать их в вопрос дословно. Тем более, что вопрос в объяснении этого сообщения
Честно говоря, мне интересно, откуда взялось «нет соответствующего конструктора для типа A». Другой код? Недоразумение, которое хочется прояснить? Это не ошибка вашего кода (по крайней мере, не с теми компиляторами, которые я пробовал)
См. этот ответ , в котором объясняется: «istream_iterator<int>(cin)
точно то же самое, что istream_iterator<int> cin
». Запутывающая деталь о самом неприятном разборе
Подумайте о включении предупреждений компилятора, когда код вас сбивает с толку.
A(pptr);
объявляет переменную с именем pptr
типа A
. Это то же самое, что написать A pptr;
. Поскольку вы уже объявили переменную с именем pptr
в той же области видимости, компиляция не удалась.
Вместо этого вы можете использовать фигурные скобки:
int main() {
int* pptr = nullptr;
A{pptr};
}
хотелось бы знать, в чем причина такой ситуации..." Какая ситуация. Первый с
A(pptr)
?