【发布时间】:2015-05-08 11:56:09
【问题描述】:
我有以下课程
template<class TDataType>
void SetProperties(IndexType PropertiesId,
const Variable<TDataType>& rVariable,
const TDataType& Value)
{
mpModeler->SetProperties(PropertiesId, rVariable, Value);
}
template<typename TDataType, std::size_t N>
void SetProperties(IndexType PropertiesId,
const Variable<TDataType>& rVariable,
const TDataType(&Value)[N])
{
mpModeler->SetProperties(PropertiesId, rVariable, Value);
}
函数mpModeler::SetProperties定义如下
template<class TDataType>
void SetProperties(IndexType PropertiesId,
const Variable<TDataType>& rVariable,
const TDataType& Value)
{
if (mpModel->GetProperties(PropertiesId).get() == 0)
{
mpModel->AddProperties(PropertiesId, Properties::Pointer(new Properties(*mpModel)));
}
PropertyFunction<TDataType>::Pointer constant_property(new ConstantProperty<TDataType>(Value));
mpModel->GetProperties(PropertiesId)->SetProperty(rVariable, constant_property);
}
可以这样调用:
pKernel->SetProperties(i, *double_variable, regionmapi[0]);
其中 regionmapi 被定义为
double *regionmapi;
或者像这样:
pKernel->SetProperties(i, *double_variable, tmp3);
tmp3 定义为
double tmp3[3];
但现在显示以下错误:
Error 7 error C2782: 'void Kratos::Modeler::SetProperties(Kratos::Modeler::IndexType,const Kratos::Variable<TDataType> &,const TDataType &)' : template parameter 'TDataType' is ambiguous
谁能帮我看看?
谢谢,
唐老鸭
【问题讨论】:
-
首先,为什么不先将
regionmapi设为std::vector?其次,您确定要将value的类型强制为double*而不是TDataType? -
至于你的问题,要不要对
value数组中的所有元素调用原来的SetProperties? -
感谢您的回复。是的,但是我不知道如何将值数组传递给TDataType值,你能给我一些提示吗?
-
输入数据是'double *value',但是不知道怎么转换成TDataType值,谢谢
-
什么是
TDataType?会永远一样吗?它是否与values数组的基本类型相同(即您的示例中的double)?它会与double兼容吗?您是否尝试过在没有任何“转换”的情况下使用它?一个简单的static_cast怎么样?