Это, вероятно, не то, что вы делаете в своем коде. Сообщение об ошибке выглядит так, как будто вы делаете это
Apple<K>::Banana freshBanana = someVar.returnsABanana();
Компилятор должен знать перед синтаксическим анализом кода, называет ли имя тип или нет. В этом случае, когда он анализирует, он не может знать, потому что тип K
еще не известен (у вас может быть специализация для Apple<int>
, у которой нет этого вложенного класса). Таким образом, предполагается, что Apple<K>::Banana
не является типом. Но тогда это выражение и после него нужен оператор или точка с запятой.
Вы можете исправить это, вставив typename
:
typename Apple<K>::Banana freshBanana = someVar.returnsABanana();
Это подтверждает, что имя является типом, и затем компилятор знает, что нужно проанализировать это как объявление.