我的课程中有两节课。称他们为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.
答案 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
}