@4ainik
начинал с бейсика на 286 в 1994

Это одно и тоже с точки зрения стандарта?

Здравствуйте.
Наткнулся сегодня на странное поведение компилятора.
Есть класс для простоты:
class A{
public:
  A(int a = -1){}
  void f(){}
};
тут все просто и очевидно.
Делаем инстанцирование:
A a();
a.f();


И получаем странную ошибку при компиляции:

ssd1306_128x32_i2c_test.ino:50:3: error: request for member 'f' in 'a', which is of non-class type 'A()'


А вот так
A a;
a.f();

все нормально.

Казалось бы, в обоих случаях у нас вызов конструктора, причем оба варианта подразумевают передачу первого аргумента со значением по умолчанию, но нет же, почему то в первом варианте происходит странная вещь, компилятор как-то не совсем корректно это воспринимает.
Допускаю что компилятор не совсем адекватный и немного устарел :)
  • Вопрос задан
  • 343 просмотра
Пригласить эксперта
Ответы на вопрос 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Казалось бы, в обоих случаях у нас вызов конструктора,

А вот и нет. A a(); -- это объявление функции a, без параметров, возвращающей значение типа A.


И получаем странную ошибку при компиляции:
ssd1306_128x32_i2c_test.ino:50:3: error: request for member 'f' in 'a', which is of non-class type 'A()'

В сообщении об ошибке об этом явно написано.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы