1

菜鸟问题在这里。我有一个具有循环依赖的类,所以我转发了它。现在,我打算用这个尝试一个模板。

//英寸

class C {
public:
  virtual void getMap();
}

// 在啊

    class C;
    class A {
    public:
       virtual void foo(C *c);

    template <class T>     
       void changeProperty(C *c, string& s) {
          void* obj = c->getMap()->at(s); // does not compile 
          // (did not include the rest for brevity)
       }
    }

这无法在指定的行编译,说明 C 类没有函数“getMap()”。这可以解决吗?如果是这样,怎么做?

4

1 回答 1

3

将 of 的定义changeProperty移出类(所以它不是inline),并在看到 of 的定义之后将其放置在某处class C

所以预处理的结果最终会是这样的:

class C;
class A {
public:
   virtual void foo(C *c);

template <class T>     
   void changeProperty(C *c, string& s);
}

// ...

class C {
public:
  virtual void getMap();
}

// ...

template <class T>     
   void A::changeProperty(C *c, string& s)
   {
      void* obj = c->getMap()->at(s); // compiles
      // (did not include the rest for brevity)
   }
于 2013-05-21T12:38:48.160 回答