2015-06-07 39 views
0

以下两个类,我想在A的构造函数中设置b.i。我该怎么做?在施工期间设置成员的私有属性

我不能将值传递给B的构造函数,因为我只在A的构造函数内部获得值。我试图使A::A()成为B的一个朋友函数,但这需要我包含a.hpp ,这导致了圆形包容。 我能想出的唯一解决方案是将b的类型更改为B*。有更好的方法吗?

A.hpp:

#include "B.hpp" 
class A { 
private: 
    B b; 
public: 
    A(); 
} 

B.hpp:

class B { 
private: 
    int i; 
public: 
    B() 
} 

溶液我发现

逻辑解决方案是使A B的朋友,所以它可以访问我。

我以前试过这个,但后来没有奏效。显然这是由于其他问题,或者我错误地做了,因为现在它工作。

+0

关于标记为重复,我理解所有在那个链接,甚至曾经使用它,但我不明白这是如何帮助我解决这个问题。 – Oebele

+0

这是关于'A类'的前向声明的必要条件,它需要在'B'中使它成为'朋友'。 –

+0

我试着在'B'中向前声明'A',但是当我将行朋友'A :: A()'添加到'B'时,编译器仍然给出错误。这对我来说很有意义,因为编译器需要知道'A :: A()'存在,所以前向声明是不够的。 – Oebele

回答

0

您可以使用构造函数初始化列表来实现此目的。

class B { 
private: 
    int i; 
public: 
    B(int i){this->i = i;} 
}; 

class A { 
private: 
    B b; 
public: 
    A(int i):b(i){} 
}; 
+0

由于API调用,i的值仅在A的构造函数中可用,所以我无法从外部传递它。 – Oebele