Как определить конструктор внутреннего класса при использовании шаблона класса во внешнем классе? - PullRequest
0 голосов
/ 14 апреля 2019

Как определить конструктор вложенного класса, если внешний класс является шаблоном?

Я попытался удалить параметр шаблона, и он работает. Но мне нужно это значение для того, что я делаю. Я пытался с g ++ с и без --std = c ++ 11 (без разницы). Я не хочу помещать свой код в заголовочный файл, поэтому я не пробовал таким образом

#include <cstddef>

template <size_t M_SIZE=20>
class Outer{
    class Inner{
        Inner();
    };
};
//Outer::Inner::Inner() {}

int main(){
    return 0;
}

Это происходит, когда вы раскомментируете эту строку

cl.cpp: 9: 1: ошибка: «Внешний» не является классом, пространством имен или перечислением Внешний :: Внутренний :: Внутренний () {} ^ cl.cpp: 4: 7: примечание: здесь объявлено «Внешнее» class Outer { ^ 1 сгенерированная ошибка.

оболочка вернулась 1

1 Ответ

0 голосов
/ 14 апреля 2019
template<size_t mSize> Outer<mSize>::Inner::Inner() {}

Но, как обычно, если вы планируете определять свои шаблонные объекты в отдельном файле, вам придется явно создавать их экземпляры в заголовке:

template class Outer<42>;
...