Класс 'не является шаблонным типом'

Я иду с один, две или три буквы, которые формируют сокращенное представление рассматриваемого объекта.

Persons.Where(p => ...)
AnalysisCode.Where(ac => ...)
16
задан Scott 19 October 2009 в 20:08
поделиться

7 ответов

Я не уверен, что это ваша проблема, но вы не можете создать подкласс QObject с помощью класса шаблона.

Вот дополнительная информация об этом.

8
ответ дан 30 November 2019 в 16:09
поделиться

Ваша проблема в том, что вы определяете посетителя типа Generic без параметра шаблона.

Когда вы вперед объявили класс как Generic, тогда в строке 15 компилятор нашел объявление. Но когда вы изменили объявление с помощью шаблона, класс Generic больше не найдется.

Итак, вы должны сделать что-то вроде:

template <class T>
class Generic;

class Property : public CFG {
    Generic<SomeType> *visitor; // line 15

или

template <class T>
class Generic;

template <class T>
class Property : public CFG {
    Generic<T> *visitor; // line 15

или что-то в этом роде.

3
ответ дан 30 November 2019 в 16:09
поделиться

Взгляните на этот аналогичный вопрос в другом месте на SO. Вы случайно не объявляете Generic заранее, а не как шаблонный класс?

РЕДАКТИРОВАТЬ: В ответ на вашу вторую ошибку ...

@Steve Guidi решил эту проблему в своем комментарии в другом месте на этой странице. Теперь, когда вы постоянно объявляете Generic как шаблонный класс, строка 15 вашего Property.h является незаконной, потому что вы используете Generic в незаметной форме.

Вам необходимо указать специализацию, которую вы используете, в строке 15, например

template <class T>
class Generic;

class Property : public CFG {
    Generic<int> *visitor; // specialised use of Generic
    bool is_valid;
    QScriptValue result;
    Json::Value *expression;
    public:
    Property(const Property &prop);
    Property(Generic *v, Json::Value *section, std::string name, Json::Value *defval);
    ~Property();
    bool Valid();
    int Eval();
    double P2N();
    int P2INT();
    std::string P2S();
    void SetValue(Json::Value val);
    Property operator=(Property prop);
};
22
ответ дан 30 November 2019 в 16:09
поделиться

, возможно, что Generic уже определены где-то еще?

5
ответ дан 30 November 2019 в 16:09
поделиться

Проверьте, есть ли у директивы #include непосредственно перед Generic закрывающие ; в определении класса. Я однажды видел эту ошибку, и это было причиной.

3
ответ дан 30 November 2019 в 16:09
поделиться

Эта ошибка сгенерирована компилятором C ++ или Qt MOC? Возможно, вы не можете применить Qt MOC к шаблонному классу.

1
ответ дан 30 November 2019 в 16:09
поделиться

Помимо проблемы, заключающейся в том, что вы неправильно определяете класс шаблона (следовательно, ваше сообщение об ошибке), вы не можете использовать Q_OBJECT в классе шаблона. Подробнее см. http://doc.trolltech.com/qq/qq15-academic.html .

1
ответ дан 30 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: