初始化抽象类的构造函数的正确方法是什么?我在cc文件中注释掉了构造函数,它似乎正在工作,我想了解原因。
板。 H Board.h是一个抽象类,因为它没有包含2个纯虚函数。
class Board {
public:
Board(size_t width, size_t height)
: width(width), height(height) {}
virtual ~Board() {}
....
protected:
//this is line 54
size_t height;
size_t width;
};
我的localBoard.h
#include <Board.h>
class LocalBoard : public Board {
public:
LocalBoard(size_t width, size_t height) :Board(width),Board(height) {}
~LocalBoard() {}
...
};
LocalBoard.cc
#include <board/LocalBoard.h>
// commenting this out fixed the error
//LocalBoard(size_t width, size_t height) {}
error: multiple initializations of constructor
在另一个注释中,有人可以帮助我理解以下警告的含义,它对我的程序有什么影响以及如何解决它?我认为它再次与构造函数有关。
./include/board/Board.h: In constructor ‘Board::Board(size_t, size_t)’:
./include/board/Board.h:54:9: warning: ‘Board::width’ will be initialized after [-Wreorder]
size_t width;
答案 0 :(得分:0)
您已在此行中提供了类LocalBoard的ctor的内联实现:
LocalBoard(size_t width, size_t height) :Board(width),Board(height) {}
你不能给同一个ctor两次(一次内联,一次在cc文件中)。
你需要写
class LocalBoard {
LocalBoard(size_t width, size_t height) :Board(width, height) {}
};
或
class LocalBoard {
LocalBoard(size_t width, size_t height);
}
// probably in the cc file:
LocalBoard::LocalBoard(size_t width, size_t height) : Board(width, height)
{
}
请注意,我将两个基类ctor调用Board(width),Board(height)
更改为一个基类ctor调用Board(width, height)
。
注意警告,您可以查看What's the point of g++ -Wreorder?。