gpt4 book ai didi

c++ - QObject 作为成员的未解析外部符号(Q_DISABLE_COPY 宏)

转载 作者:搜寻专家 更新时间:2023-10-31 01:05:51 25 4
gpt4 key购买 nike

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: error: LNK2019: unresolved external symbol "public: __cdecl FContainer::FContainer(void)" (??0?$FContainer@VFMaterial@@@@QEAA@XZ) referenced in function "private: __cdecl FSystem::FSystem(void)" (??0FSystem@@AEAA@XZ)

这里是 FContainer 构造函数

template <class T>
FContainer<T>::FContainer()
: QObject()
{

}

还有这里的 FSystem 构造函数:

FSystem::FSystem() { }

最佳答案

几乎可以肯定的是,问题是您在源文件而不是 header 中定义了 FContainer::FContainer();。由于它位于模板类中,因此编译器需要能够在实例化时看到主体,或者进行显式实例化。

关于c++ - QObject 作为成员的未解析外部符号(Q_DISABLE_COPY 宏),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21939180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com