【发布时间】:2019-10-27 05:18:21
【问题描述】:
编译器在构建过程中不断分配不兼容的类型。
错误信息:
error: assigning to 'int' from incompatible type 'QString'
typeduserproperty.cpp:115:28: note: in instantiation of member function 'core::TypedUserProperty<int>::setValue' requested here
示例代码
/**
* @brief setValue
* set value to property
* @param val
* value to set to property
* @return
* true - successfully set value
* false - invalid value
*/
template<class T>
void TypedUserProperty<T>::setValue(QVariant val)
{
if (std::is_same<T, int>::value == true)
{
this->_value = val.toInt();
}
else if (std::is_same<T, QString>::value == true)
{
this->_value = val.toString();
}
else if (std::is_same<T, double>::value == true)
{
this->_value = val.toDouble();
}
}
this->_value = val.toString(); 是发生错误的行
“_value”是数据类型模板T
在这种情况下,我将 T 模板设置为“int”
有谁知道为什么会发生这种情况或是否有解决方法。
【问题讨论】:
-
'编译器不断分配不兼容的类型'。不会。编译器会不断打印编译错误关于你分配不兼容的类型。
-
编译器不做这样的事情。您编写了该代码,而不是编译器:)。该错误告诉您问题出在在您的代码中,它不是编译器方面的错误声明。有人可能会争辩说该语言应该允许这样的代码,但你必须向标准委员会提出这个问题。我同意您观察到的行为有些愚蠢。但是规则就是规则,如果没有额外的语法,这种行为就不能安全地添加到 C++ 中。这将产生极其意想不到的后果;事实上,这将是非常危险的。
标签: c++ templates if-statement function-templates template-classes