Я иду с один, две или три буквы, которые формируют сокращенное представление рассматриваемого объекта.
Persons.Where(p => ...)
AnalysisCode.Where(ac => ...)
Я не уверен, что это ваша проблема, но вы не можете создать подкласс QObject с помощью класса шаблона.
Ваша проблема в том, что вы определяете посетителя типа 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
или что-то в этом роде.
Взгляните на этот аналогичный вопрос в другом месте на 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);
};
Проверьте, есть ли у директивы #include
непосредственно перед Generic
закрывающие ;
в определении класса. Я однажды видел эту ошибку, и это было причиной.
Эта ошибка сгенерирована компилятором C ++ или Qt MOC? Возможно, вы не можете применить Qt MOC к шаблонному классу.
Помимо проблемы, заключающейся в том, что вы неправильно определяете класс шаблона (следовательно, ваше сообщение об ошибке), вы не можете использовать Q_OBJECT в классе шаблона. Подробнее см. http://doc.trolltech.com/qq/qq15-academic.html .