错误:命名构造函数,而不是类型。用g ++ 4.6.1编译时

时间:2011-12-05 06:21:23

标签: c++ g++ aix

我正在使用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_; 

感谢。

4 个答案:

答案 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