【发布时间】:2016-12-13 14:27:17
【问题描述】:
我正在尝试将 QtGStreamer 与 MS Visual Studio 2015 的 C++ 编译器一起使用,该编译器默认为 C++11 标准(或多或少)。
头文件 refpointer.h 包含以下内容:
template <class T, class X>
struct RefPointerEqualityCheck<T, X*>
{
static inline bool check(const RefPointer<T> & self, X* const & other)
{
return self.m_class ? self.m_class->m_object == other : !other;
}
};
...稍后在 refpointer.h 中我们有以下内容:
template <class T>
template <class X>
bool RefPointer<T>::operator==(const X & other) const
{
return Private::RefPointerEqualityCheck<T, X>::check(*this, other);
}
template <class T>
template <class X>
bool RefPointer<T>::operator!=(const X & other) const
{
return !Private::RefPointerEqualityCheck<T, X>::check(*this, other);
}
其他人遇到了我收到的错误消息here:
qt5gstreamer\qglib\refpointer.h(280): error C2039: 'check': is not a member of 'QGlib::Private::RefPointerEqualityCheck<T,X>'
with
[
T=QGst::BufferList,
X=int
]
QtGStreamer 的主要贡献者之一回复如下:
嗯,看起来代码需要添加一些内容来支持 C++11 空指针。尝试删除任何启用 C++11 的编译器标志 功能(包括 QTGSTREAMER_FLAGS,如果您使用的是 cmake)和 走着瞧吧。另外,如果您打开错误报告会很好 对这个。
两件事:
(1) 如果可以修复标头(并可能提交补丁),我希望避免放弃 C++11 标准支持;和
(2) 我什至不确定 MSVC++15 是否有一个 选项 可以返回到较早的标准版本(我在谷歌上找不到它)。
与编译器消息所说的相反,在未经训练的人看来,check确实被定义为 QGlib::Private::RefPointerEqualityCheck 的成员,正如您在 QtGStreamer 源代码中看到的 here (该版本的标头与我在系统上使用的版本相同。)
问: 鉴于上述情况,我的代码是否有问题?可以帮助 QtGstreamer 解决问题的东西;还是我只是为 C++ 标准的早期版本编译更好?
【问题讨论】:
标签: c++ qt compiler-errors gstreamer