我试图让一个(对我而言)相当复杂的模板化代码构造起作用。
我有什么: 泛型类的类shaderPropertyclass IShaderProperty {
public:
virtual ~IShaderProperty() {}
};
struct IShaderMatth; //forward declaration
template<typename ShadeType>
struct ShaderMatth;//forward declaration
template <typename T>
class ShaderProperty : public IShaderProperty
{
public:
template <typename SomeType>
inline T getValue(ShaderMatth<SomeType>* shaderMatth){
pair<map<void*, IShaderMatth>::iterator,bool> success = shaderMatth->properties.insert(make_pair((void*)this, ShaderMatth<T>(m_shader)));
assert(success.second);
return m_shader->shade((ShaderMatth<T>*)&(*success.first));
}
};
和类ShaderMatth,它也是泛型类型,并存储一个映射,而用作键的void *指针实际上是一个指向ShaderProperty的指针。 ShaderMatth的代码:
#include "ShaderProperty.h"
struct IShaderMatth {
virtual ~IShaderMatth() {}
map<void*, IShaderMatth> properties;
...
};
template <class ReturnType>
struct ShaderMatth : public IShaderMatth{
ShaderMatth(IShader<ReturnType>* shaderPtr){shader=shaderPtr};
~ShaderMatth(void);
IShader<ReturnType>* shader;
};
现在错误发生在函数内联T getValue()
的第一行我得到了
Error C2027 use of undefined type 'ShaderMatth<ShadeType>'
但我不明白为什么..我有模板化结构ShaderMatth的前向声明,并且在第二组代码中我包含了第一堆代码,所以前向引用应该可以解决,不是吗?
我挂了 - 请帮忙:)。
答案 0 :(得分:3)
转发声明ShaderMatth
不足以使用代码shaderMatth->properties
。
必须在该行之前定义。