Class,在另一个类中有一个实例,Visual Studio需要默认构造函数

时间:2017-11-17 08:15:49

标签: c++ default-constructor

我的课程中有两节课。称他们为A班和B班。

我为每个类编写了一个构造函数,我不希望有默认的构造函数。

B类有一个A类实例作为B类成员变量之一。

Visual Studio是一个{在B类实现文件中的潦草红线的基础。当您将鼠标放在它上面时,Visual Studio抱怨A类没有默认构造函数。

我是否被迫在这里创建默认构造函数?

编辑: 我在main中创建了对象:

矩阵是一个动态分配的2D数组(它是指向指针的指针,所有指针都已分配)。

Board newBoard(matrix, rows, columns);

这是构造函数:

Board::Board(char ** array, int rows1, int columns1)

//I initialize the elements of the array here.

接下来,我将我创建的对象传递给此构造函数:

Joe::Joe(Board theBoard, int x, int y)

//Note that these x and y positions are basically positions of the player on the 
//board.  They are not the rows and the columns of the array that we previously 
//created.

1 个答案:

答案 0 :(得分:0)

如果您不想为class A提供默认构造函数,但仍希望在class B中拥有该实例,则可以执行以下操作:

1:您可以使用B的初始化列表来构建A

class B
{
public:
  B(/*Some args*/); // constructor
  A a; // instance of A
};

初始化如:

 B::B(/*some args*/)
    : a(/*whatever args a needs*/)
    {
      // other initialisation
    }

2:您可以在class A中将class B的实例设为指针:

class B
{
public:
    B(/*Some args*/); // constructor
    A* a; // instance of A
};

然后在class B的构造函数中初始化它:

B::B(/*some args*/)
{
  a = new A(/*some (other) args*/); // Make sure to also call delete A; when you dont need B anymore
}