2011-12-05 20 views
2

我彙編關於AIX6.1使用g ++ 4.6.1代碼和收到這個錯誤編譯: -錯誤:命名構造函數,而不是類型。同時用克++ 4.6.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

¤我覺得,但給出了早些時候遇到的800和900行C函數,我不確定,這肯定是我見過的最醜陋的代碼。哎喲。無論如何,寫'T :: T'而不是'T'是獲得這個錯誤的一種方法。也許這發生在邪惡的宏觀中。我所做的只是*谷歌的錯誤消息*。乾杯&hth。, –

+0

什麼是DEFINE_ENGINE_PROPERTIES_INHERIT()宏?粘貼它的身體。 – iammilind

+1

@傻瓜或巨魔投票結束爲「不是真正的問題」和「不可能回答」:當你意識到你不明白它時,**正確的**反應是要求,或者至少讓其他人更多的消息靈通的人有一個去。你的反應可能只是一個反社會的自我主義的反應。或者很可能這是一個愚蠢的,這就是我所假設的。 –

回答

1

,如果你使用的名稱

myclass::myclass 

這個名字並不表示該類myclass但其構造此給出診斷(S)

+0

它會給我們正在使用的其他變量「未在範圍內聲明」錯誤。 –

0

你應該進行預處理的東西你的源代碼一樣

g++ -C -E yoursource.cc | grep -v '^#' > yoursource.ii 

(該grep -v刪除行號)

然後編譯預處理形式

g++ -Wall -c yoursource.ii 

再看看位置的錯誤信息yoursource.ii

您可能還會問[email protected]

但正如有人指出,你的代碼是不是很漂亮?

0

我想說的是,當你說:

DEFINE_ENGINE_PROPERTIES_INHERIT(Base::IOPS, ... 

你應該寫:

DEFINE_ENGINE_PROPERTIES_INHERIT(Base, ... 

也就是說,沒有::IOPS

1

它是一個合格的名稱,如Base::IOPS,我們需要在此之前有一個typename。你需要傳遞一個類型,而不是限定名Base::IOPS,所以我定義的類型

typedef Base::IOPS MYIOP 

,然後通過該類型,所以錯誤「這是不是一個類型」走了。

相關問題