简体   繁体   English

错误:C2664:&#39;QXmlStreamWriter :: writeAttributes&#39;:无法从&#39;QVector转换参数1 <T> &#39;至&#39;const QXmlStreamAttributes&&#39;

[英]error: C2664: 'QXmlStreamWriter::writeAttributes' : cannot convert parameter 1 from 'QVector<T>' to 'const QXmlStreamAttributes &'

I'm used to using the QStringList() << "a" << "b" idiom for quickly constructing a QStringList to pass to a function, but when I tried it with QXmlStreamAttributes , it didn't work. 我习惯于使用QStringList() << "a" << "b"惯用法来快速构造要传递给函数的QStringList,但是当我尝试使用QXmlStreamAttributes ,它没有用。

This code compiles: 此代码编译:

QXmlStreamAttributes attributes;
attributes << QXmlStreamAttribute("a", "b");
writer.writeAttributes(attributes);

But this one fails: 但这失败了:

writer.writeAttributes(QXmlStreamAttributes() << QXmlStreamAttribute("a", "b"));

It fails with error: 它因错误而失败:

C:\Workspace\untitled5\mainwindow.cpp:18: error: C2664: 'QXmlStreamWriter::writeAttributes' : cannot convert parameter 1 from 'QVector<T>' to 'const QXmlStreamAttributes &'
with
[
    T=QXmlStreamAttribute
]
Reason: cannot convert from 'QVector<T>' to 'const QXmlStreamAttributes'
with
[
    T=QXmlStreamAttribute
]
No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called

Another thing I noticed: 我注意到的另一件事:

This code compiles: 此代码编译:

QVector<QXmlStreamAttribute> v1 = (QVector<QXmlStreamAttribute>() << QXmlStreamAttribute("a", "b"));

But this one doesn't, even though QXmlStreamAttributes inherits from QVector<QXmlStreamAttribute> : 但是,即使QXmlStreamAttributes从QVector<QXmlStreamAttribute>继承,也不会这样:

QXmlStreamAttributes v2 = (QXmlStreamAttributes() << QXmlStreamAttribute("a", "b"));

It fails with the same error. 它失败,并显示相同的错误。

Any idea why this happens? 知道为什么会这样吗?

QStringList has QStringList

operator<<(const QString & str)

but QVector has 但是QVector

QVector<T> &    operator<<(const T & value)

so your 所以你

QVector<QXmlStreamAttribute> v1 = (QVector<QXmlStreamAttribute>() << QXmlStreamAttribute("a", "b"));

compiles successfully. 编译成功。

But your mistake is that QXmlStreamAttributes has no copy constructor, but you try use it, so you have 2 solutions: 但是您的错误是QXmlStreamAttributes没有副本构造函数,但是您尝试使用它,因此有两种解决方案:

Use append : 使用append

QXmlStreamAttributes v2;
v2.append(QXmlStreamAttribute("a", "b"));
qDebug()<< v2.first().name();

Or use << in some different way: 或以不同的方式使用<<

QXmlStreamAttributes v2;
v2 << QXmlStreamAttribute("a", "b");
qDebug()<< v2.first().name();

Output is "a" in both cases. 在两种情况下,输出均为"a"

QXmlStreamAttributes QStringList QVector QXmlStreamAttributes QStringList QVector

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误 C2664:“wcscmp”:无法将参数 1 从“CHAR [260]”转换为“const wchar_t *” - error C2664: 'wcscmp' : cannot convert parameter 1 from 'CHAR [260]' to 'const wchar_t *' 错误C2664:&#39;strcpy&#39;:无法将参数2从&#39;const wchar_t [9]&#39;转换为&#39;const char *&#39;。如何解决此错误? - Error C2664: 'strcpy' : cannot convert parameter 2 from 'const wchar_t [9]' to 'const char *'.How to solve this error? 错误C2664:“ CComboBox :: InsertString”:无法将参数2从“ const char [4]”转换为“ LPCTSTR” - error C2664: 'CComboBox::InsertString' : cannot convert parameter 2 from 'const char [4]' to 'LPCTSTR' 错误C2664:&#39;strcmp&#39;:无法将参数2从&#39;char&#39;转换为&#39;const char *&#39; - error C2664: 'strcmp' : cannot convert parameter 2 from 'char' to 'const char *' 错误C2664:&#39;cvSaveImage&#39;:无法将参数2从&#39;cv :: Mat&#39;转换为&#39;const CvArr *&#39; - error C2664: 'cvSaveImage' : cannot convert parameter 2 from 'cv::Mat' to 'const CvArr *' :错误C2664:&#39;MessageBoxW&#39;:无法从&#39;const char [40]&#39;转换参数2 - : error C2664: 'MessageBoxW' : cannot convert parameter 2 from 'const char [40]' 错误C2664:“发送”:无法将参数2从“ ServerGreeting”转换为“ const char *” - error C2664: 'send' : cannot convert parameter 2 from 'ServerGreeting' to 'const char *' 错误C2664:&#39;布尔Strless :: operator()(const TCHAR *&,const TCHAR *&)const&#39;:无法将参数1从&#39;wchar_t * const&#39;转换为&#39;const TCHAR *&&#39; - error C2664: 'bool Strless::operator ()(const TCHAR *&,const TCHAR *&) const' : cannot convert parameter 1 from 'wchar_t *const ' to 'const TCHAR *&' 错误C2664:无法将参数1从&#39;int&#39;转换为&#39;int []&#39; - error C2664: cannot convert parameter 1 from 'int' to 'int []' 错误C2664:无法将参数1从“ X”转换为“ X” - error C2664: cannot convert parameter 1 from 'X' to 'X'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM