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

How to use a class declared in in latter part of the header file from another class in top

本文关键字:另一个 顶部 何使用 文件 后半部 声明      更新时间:2023-10-16

这是一个名为A的类

class A {
    int x;
}

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

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

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

这段代码可能会对你有所帮助。

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

当我构造类 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
{ }

看起来你的问题是你有一个数组。在这种情况下,有简单的解决方案。您应该迭代数组,并为数组中的每个元素执行所需的操作:

//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

使用正向减速。

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;
}