0

関数が戻り値とパラメーターとして相互に型定義されたポインターを取る 2 つのクラスがあります。すなわち:

class Segment;

class Location : public Fwk::NamedInterface {
  public:
    // ===== Class Typedefs =====
    typedef Fwk::Ptr<Location const> PtrConst;
    typedef Fwk::Ptr<Location> Ptr;
    // ===== Class Typedefs End =====
    void segmentIs(Segment::Ptr seg);
    /* ... */
}

およびクラスの場所。

class Segment : public Fwk::NamedInterface {
  public:
    // ===== Class Typedefs =====
    typedef Fwk::Ptr<Segment const> PtrConst;
    typedef Fwk::Ptr<Segment> Ptr;
    // ===== Class Typedefs End =====
    void locationIs(Location::Ptr seg);
    /* ... */
 }

これは当然のことながらリンカ エラーを生成しました...それぞれのクラスの前方宣言では修正されません。Ptrこれらの typedef をクラス内部に保持しながら、およびPtrConsttypedefを前方宣言するにはどうすればよいですか(つまりLocation::Ptr、ロケーション ポインター型を参照するように記述します)。

ありがとう!

4

2 に答える 2

0

宣言されていない型にはアクセスできません

class Location : public Fwk::NamedInterface {
  public:
    // ===== Class Typedefs =====
    typedef Fwk::Ptr<Location const> PtrConst;
    typedef Fwk::Ptr<Location> Ptr;
    // ===== Class Typedefs End =====

    // this is illegal
    void segmentIs(Segment::Ptr seg);
};

代わりに、クラスの外で typedef を試してください。

class Segment;
class Location;
typedef Fwk::Ptr<Segment>  SegmentPtr;
typedef Fwk::Ptr<Location> LocationPtr;

class Location : public Fwk::NamedInterface {
  public:
    // ===== Class Typedefs =====
    typedef Fwk::Ptr<Location const> PtrConst;
    // ===== Class Typedefs End =====
    void segmentIs(const SegmentPtr& seg);
};
于 2013-11-06T01:41:21.653 に答える