如何在顶部的另一个类的头文件的后半部分中使用声明的类

时间:2015-04-16 02:38:25

标签: c++ class

这是一个名为A

的类
class A {
    int x;
}

和一个类B,它有一个A类数组成员。

class B {
    A a[10];
    int y;
}

在A的构造函数中,我需要使用B.我该怎么做?

4 个答案:

答案 0 :(得分:1)

此代码可能对您有所帮助。

 class A
    {
    public:
        int x;
    };

    class B : public A
    {
    public:
    A a[10];
    int y;
    A::x;

    };

答案 1 :(得分:1)

  

当我构造A类时,我必须在B类中使用变量y并使x = y。

请参阅代码中的注释,了解其相关性:

class B;  // forward declare B - just saying it's a class

class A
{
  public:           // class B; above lets constructor take B&
    A(const B& b);  // declare but don't define constructor
  private:
    int x;
};

class B
{ ...definition as in Qn... };

// now we know exactly what B is, we can define the constructor

A::A(const B& b) // "when I construct... in class B"
  : x(b.y)       // "use the variable y and make x = y
{ }

答案 2 :(得分:0)

这里看起来你的问题是你有一个数组。在这种情况下,有简单的解决方案。你应该迭代你的数组,并为数组中的每个元素做你想做的事情:

//Title of this code
//clang 3.4

#include <iostream>

class A {
    int x;
public:
    A(int x_value = 0)
        : x{x_value}
    {
    }

    int x_value() const {return x;}
    void set_x_value(int x_value) {x = x_value;}

};
class B {
    A a[10];
    int y;

public:
    B(int y_value)
        : y{y_value}
    {
        for(auto& a_instance : a)
            a_instance.set_x_value(y);
    }

    void print_all_a() const
    {
        for(auto a_instance : a)
            std::cout << a_instance.x_value() << "\n";
    }
};

int main()
{
    B b{10};
    b.print_all_a();
}

以下是实例:http://rextester.com/VVEW75722

答案 3 :(得分:0)

使用前进减速。

class B;
class A {
    int x;
    A(B &b); //inside constructor you can use B to init A's values
}
class B {
    A a[10];
    int y;
}