【发布时间】:2009-11-14 18:16:51
【问题描述】:
我有以下几行代码:
p_diffuse = ShaderProperty<Vector4>(Vector4(1,1,1,1));
addProperty(&p_diffuse, "diffuse");
p_shininess = ShaderProperty<float>(10.0f);
addProperty(&p_shininess, "shininess");
addProperty函数实现如下:
template <class A_Type>
void IShader<A_Type>::addProperty( ShaderProperty<A_Type>* shaderProperty,
std::string propertyName )
{
m_shaderProperties[propertyName] = shaderProperty;
}
现在我在第一块代码的最后一行得到一个奇怪的编译器错误。 addProperty 在第一种情况下工作正常,但在第二种情况下(尝试添加 p_shininess)我得到:
error C2664: 'IShader<A_Type>::addProperty': cannot convert parameter 1 from 'ShaderProperty<A_Type> *' to 'ShaderProperty<A_Type> *'
咦!? 问题的提示可能如下:如果我转到项目设置并在 C++ 常规选项卡中将“检查 64 位兼容性问题”从“否”设置为“是(/Wp64)”,则错误读数略显不同:
error C2664: 'IShader<A_Type>::addProperty': cannot convert parameter 1 from 'ShaderProperty<A_Type> *__w64 ' to 'ShaderProperty<A_Type> *'
怎么了?? __w64 是什么??
编辑:ISShader 的类定义:
template <class A_Type> class IShader {
public:
virtual ~IShader(void) {};
virtual A_Type shade(IntersectionData* iData, Scene* scene) = 0;
protected:
ShaderProperty<A_Type>* getProperty(std::string propertyName);
void addProperty(ShaderProperty<A_Type>* shaderProperty, std::string propertyName);
private:
std::map<std::string, ShaderProperty<A_Type>*> m_shaderProperties;
};
【问题讨论】:
标签: c++ generics floating-point compiler-errors