2013-05-08 132 views
1

我的类有点问题。我有两个类都使用模板方法,因此我必须把它放在标题中。这是一个例子。我希望它能在没有“前向不完整”问题的情况下正确编译。我明白什么是错,但我不知道如何解决这个问题。感谢你们。C++模板方法前向声明

class.h

class A; 
    class B; 

    class A 
    { 
     B *foo; 

     template <class T> 
     void func() 
     { 
      foo->fanc(); 
     } 
    } 

    class B 
    { 
     A *foo; 

     void fanc(); 

     template <class T> 
     void osef() 
     { 
      foo->func<int>(); 
     } 
    } 

回答

3

你有一个圆形的依赖。你不能声明一个不完整的类的对象。您可以通过声明指针或对不完整类的引用来解决此问题。

class A 
{ 
    B* foo; 

class A 
{ 
    B& foo; 

在你必须初始化构造函数的成员初始化列表的引用后一种情况。


如果您使用的是指针,那么您应该在定义了incomplte类后移动memeber函数的定义。

class A; 
class B; 

class A 
{ 
    B* foo; 
    template <class T> 
    void func(); 
}; 

class B 
{ 
    // ... 
}; 

template <class T> 
inline void A::func() 
^^^^^^     // If you need to include the header in more than one source file. 
{ 
    foo->fanc(); 
} 
+0

我使用指针,我只是忘了把它放在例子中。由于声明不完整,我不能使用这些方法。 – user2362595 2013-05-08 14:09:00

+0

@ user2362595。查看编辑。 – stardust 2013-05-08 14:11:46

+0

非常感谢,我不知道关键字“内联”。祝你今天愉快。 – user2362595 2013-05-08 14:20:37