Как правильно задать пространство имен

210
07 ноября 2021, 09:20

Как на примере этого класса исправить ошибку компиляции?

template <class T>
class A
{
    T b;
    struct C
    {
        T d;
    };
    C* func(T f);
public:
    void func2(T f);
};
template <class T>
A<T>::C* A<T>::func(T f)//ошибка
{
    C* c = new C;
    c->d = f;
    return c;
}
template<class T>
void A<T>::func2(T f)
{
    C* some = func(f);
    b = f;
}

Ошибка (clang 10):

error: missing 'typename' prior to dependent type name 'A::C'

Answer 1

Указать, что это тип - добавив typename:

typename A<T>::C* A<T>::func(T f)
Answer 2

Вы можете использовать trailing return type:

Объявление:

template <class T>
class A
{
    /* code */
    auto func(T f) -> C*;
};

Определение:

template<typename T>
auto A<T>::func(T f) -> C*
{
    /* code */
}

Ознакомиться с деталями можно на следующих ресурсах:

  1. https://en.cppreference.com/w/cpp/language/function
  2. http://eel.is/c++draft/dcl.decl
READ ALSO
способ добавить cleanup-code в легаси код

способ добавить cleanup-code в легаси код

Есть условная легаси функция (2к строк) с кучей точек завершения

117
Цикличное выполнение ajax на click

Цикличное выполнение ajax на click

Есть вот такой вызов ajax, который работает по клику на option

162