当我尝试构建Qt 5.7的源代码时,我收到以下编译错误
qnode_p.h(108):错误C2955: ' Qt3DCore :: QNodePrivate :: DestructionFunction' :使用别名模板 需要模板参数列表
qnode_p.h(105):见声明 ' Qt3DCore :: QNodePrivate :: DestructionFunction' qscene.cpp
qnode_p.h(108):错误C2955:' Qt3DCore :: QNodePrivate :: DestructionFun ction' :使用别名模板需要模板参数列表
qnode_p.h(105):见声明 ' Qt3DCore :: QNodePrivate :: DestructionFunction'生成代码
错误C2955使用别名模板需要模板参数列表。
导致问题的源代码在
之下class QT3DCORE_PRIVATE_EXPORT QNodePrivate : public QObjectPrivate, public QObservableInterface
{
public:
QNodePrivate();
~QNodePrivate();
...
template<typename Caller, typename NodeType>
using DestructionFunction = void (Caller::*)(NodeType *);
template<typename Caller, typename NodeType, typename PropertyType>
void registerDestructionHelper(NodeType *, DestructionFunction<Caller, NodeType>, PropertyType);
template<typename Caller, typename NodeType>
void registerDestructionHelper(NodeType *node, DestructionFunction<Caller, NodeType> func, NodeType *&)
{
// If the node is destoyed, we make sure not to keep a dangling pointer to it
auto f = std::bind(func, static_cast<Caller *>(q_func()), nullptr);
m_destructionConnections.insert(node, QObject::connect(node, &QNode::nodeDestroyed, f));
}
template<typename Caller, typename NodeType>
void registerDestructionHelper(NodeType *node, DestructionFunction<Caller, NodeType> func, QVector<NodeType*> &)
{
// If the node is destoyed, we make sure not to keep a dangling pointer to it
auto f = std::bind(func, static_cast<Caller *>(q_func()), node);
m_destructionConnections.insert(node, QObject::connect(node, &QNode::nodeDestroyed, f));
}
//....
}
第105行正在使用
DestructionFunction = void (Caller::*)(NodeType *);
第108行
void registerDestructionHelper(NodeType *, DestructionFunction<Caller, NodeType>, PropertyType);
从我读到的关于C ++ 11的内容来看,这应该编译好了,但由于某些原因vs 2013会出现上述错误。
答案 0 :(得分:0)
如果有人帮忙的话:
评论第104和105行:
// template<typename Caller, typename NodeType>
// using DestructionFunction = void (Caller::*)(NodeType *);
更改第108行:
void registerDestructionHelper(NodeType *, DestructionFunction, PropertyType);
为:
void registerDestructionHelper(NodeType *, void (Caller::*)(NodeType *), PropertyType);
第111行:
void registerDestructionHelper(NodeType *node, DestructionFunction<Caller, NodeType> func, NodeType *&)
到:
void registerDestructionHelper(NodeType *node, void (Caller::*func)(NodeType *), NodeType *&)
第119行来自:
void registerDestructionHelper(NodeType *node, DestructionFunction<Caller, NodeType> func, QVector<NodeType*> &)
到:
void registerDestructionHelper(NodeType *node, void (Caller::*func)(NodeType *), QVector<NodeType*> &)