我正在使用gix 4.6.1在aix6.1上编译代码并收到此错误: -
ViaChecks.h:14:3: error: 'BuPolygonEX<AllPass<CornerT<NetAndVal<ZVal3> > > >::IOPS::Base {aka BuPolygonCore<bu_polygon_clean_func, no_derivatives, AllPass<CornerT<NetAndVal<ZVal3> > > >::IOPS}::IOPS' names the constructor, not the type
结构定义为:
struct ViaSquareCheck : BuPolygonEX<AllPass<CornerT<NetAndVal<ZVal3> > > > {
typedef BuPolygonEX<AllPass<CornerT<NetAndVal<ZVal3> > > > Base;
DEFINE_ENGINE_PROPERTIES_INHERIT(Base::IOPS, void update() { Base::update(); i().xregion_1nm_oversize(x0nm); o().xregion_1nm_oversize(x0nm); o().derivatives(x_dom); o().bu_polygonized(yes); }); // via_square_dim property is added inside
membert(int, amount, -1, ViaSquareCheck);
ViaSquareCheck();
ViaSquareCheck* output(DFC* dfc) { return set_output(0,dfc); } // single output returns good vias
ViaSquareCheck* set_output(int k, DFC* dfc);
void option(const string& pname, const string& pval); // some options change engine properties
private:
BadViaMultiplexer<C>* mux;
GIM2a<APC> bad_via_gim;
GIM2a<APC> good_via_gim;
member(bool, linked, false);
member(bool, ok_45, false);
void link();
member(ViaSquareCheckNetProcess*, np,NULL);
};
DEFINE_ENGINE_PROPERTIES_INHERIT的定义: -
#define DEFINE_ENGINE_PROPERTIES_INHERIT(SSSS, extras...) \
struct IOPS : SSSS { \
EnginePropertiesVector& i() { return SSSS::i(); }; \
EnginePropertiesVector& o() { return SSSS::o(); }; \
EngineProperties& i(int n) { return SSSS::i(n); }; \
EngineProperties& o(int n) { return SSSS::o(n); }; \
typedef SSSS Base; \
extras; } ep_;
感谢。
答案 0 :(得分:1)
如果您使用名称
,则会给出此诊断myclass::myclass
此名称不表示类myclass
,而是表示构造函数
答案 1 :(得分:1)
这是一个合格的名称,例如Base::IOPS,
我们需要在此之前拥有typename
。您需要传递一个类型而不是限定名Base::IOPS
,所以我定义了一个类型
typedef Base::IOPS MYIOP
然后传递了那个类型,所以错误“这不是一个类型”就消失了。
答案 2 :(得分:0)
您应该使用
等预处理源代码g++ -C -E yoursource.cc | grep -v '^#' > yoursource.ii
(grep -v
删除行号)
然后使用
编译预处理的表单g++ -Wall -c yoursource.ii
然后查看yoursource.ii
您也可以在gcc-help@gcc.gnu.org
上询问。
但正如其他人指出的那样,你的代码不是很漂亮......
答案 3 :(得分:0)
当你说:
时,我会说DEFINE_ENGINE_PROPERTIES_INHERIT(Base::IOPS, ...
你应该写:
DEFINE_ENGINE_PROPERTIES_INHERIT(Base, ...
即没有::IOPS
。