template <class T>
class FContainer : public QObject
{
public:
FContainer();
inline void append(const T &t);
inline void clear();
inline void remove(const T &t);
inline const T& at(int index) const { return m_list[index]; }
inline const T& first() const { return m_list.first(); }
inline const T& last() const { return m_list.last(); }
inline int indexOf(const T &t){ return m_list.indexOf(t); }
inline int size() { return m_list.size(); }
signals:
void appended(const T &t);
void cleared();
void removed(const T &t);
void updated();
private:
QList<T> m_list;
};
class FSystem
{
public:
inline const FContainer<FMaterial>& materials() const { return m_materials; }
inline const FContainer<FObject>& objects() const { return m_objects; }
inline FContainer<FMaterial>& materials() { return m_materials; }
inline FContainer<FObject>& objects() { return m_objects; }
static FSystem* Instance() { return m_instance; }
private:
FSystem();
FContainer<FMaterial> m_materials;
FContainer<FObject> m_objects;
static FSystem *m_instance;
};
У меня есть проблема с использованием классов QObject в качестве члена класса. Компилятор говорит:
FSystem.obj:-1: ошибка: LNK2019: неразрешенный внешний символ "public: __cdecl FContainer::FContainer(void)" (??0?$FContainer@VFMaterial@@@@QEAA@XZ), на который ссылается функция "private: __cdecl FSystem::FSystem(void)" (??0FSystem@@AEAA@XZ)
Конструктор FContainer здесь
template <class T>
FContainer<T>::FContainer()
: QObject()
{
}
И конструктор FSystem здесь:
FSystem::FSystem() { }
Q_DISABLE_COPY
. Больше похоже на то, что компилятор не способен использовать ctor по умолчаниюQObject
(тот, у которого один параметр с аргументом по умолчанию) в ctor по умолчаниюA
. Но, не видя всего задействованного кода, трудно сказать наверняка. - person Angew is no longer proud of SO   schedule 21.02.2014FContainer
ctor. - person Angew is no longer proud of SO   schedule 21.02.2014