【发布时间】:2011-07-07 13:14:01
【问题描述】:
我有一个模板类,Foo:
template <class A, class B>
class Foo
{
public:
Foo(A &aInstance);
private:
Attr<Foo> _attr;
};
然后我有另一个名为 Attr 的模板类,它是我的 Foo 类的一个属性,它以 Foo 类本身作为模板参数。
template <class C>
class Attr
{
class SomeType
{
SomeType();
~SomeType();
};
Attr(const SomeType* st);
~Attr();
private:
Attr();
}
我想在构造函数中初始化 _attr(Attr 类型),将模板中的第一个参数转换为 SomeType。
Foo 构造函数实现:
template<class A, class B>
Foo<A, B>::Foo(A &aInstance):
_attr(
(Attr<Foo<A, B> >::SomeType *) aInstance)
{
}
这不会编译:
错误:')' 标记之前的预期主表达式
该错误是指 Foo 构造函数实现中的转换线,好像 SomeType 未被识别。
我现在有一个实例,但仍然出现同样的错误。
【问题讨论】:
-
我已经回滚了您上次的编辑,因为这使问题(及其答案)变得荒谬。请不要那样做。至于其他编辑:这些也会干扰现有答案;我没有回滚它们,但请在以后添加进一步说明,不要更改现有代码。
标签: c++ templates typedef typename class-constructors