Вы только что обнаружили одну из многих бородавок, присутствующих в синтаксисе C ++.Стандарт требует, чтобы если выражение можно было интерпретировать как декларацию и как определение, то оно должно рассматриваться как декларация.Например, ваш код
Catalog<FoodSource> test();
не определяет переменную с именем test
, а вместо этого объявляет, что существует функция с именем test, которая не принимает аргументов и возвращает Catalog<FoodSource>
instance.
Чтобы определить переменную, вам нужно опустить круглые скобки.
Обратите внимание, что в некоторых случаях эту ловушку заметить гораздо сложнее ... например:
double x = 3.14159;
int y(int(x));
как ни удивительно это может показаться в приведенном выше коде y
объявлен как функция !