【发布时间】:2011-01-25 22:44:49
【问题描述】:
模板 结构 A{ typedef 浮点型; typedef typename tB::btype typeB; }; 模板 结构 B{ typedef 浮动 btype; typedef typename tA::atype typeA; };
struct MyB;
struct MyA: public A<MyB>{};
struct MyB: public B<MyA>{};
int main(int argc, char *argv[])
{
}
无法编译,因为 “main.cpp:6: error: 无效使用不完整类型‘struct MyB’”。
基本上编译器无法解决循环,因为定义 A 的定义取决于 B 的定义,反之亦然。 有没有办法解决这个问题? 谢谢,
【问题讨论】:
-
MyB 的结构在哪里定义?
-
你可以做的是制作
MyA和MyB模板:template<typename> struct MyBT; template<typename T> struct MyAT : public A< MyBT<T> > { }; template<typename T> struct MyBT : B< MyAT<T> > { }; typedef MyAT<void> MyA; typedef MyBT<void> MyB;。但是这个解决方案很丑:) -
可悲的是,看起来我上面提出的代码在当前的 C++ 中格式不正确。但是,open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#287 有一个问题报告似乎使这个格式正确。虽然提议的措辞让我头疼:)
标签: c++ templates instantiation