我正在尝试编译具有 B 类成员的 A 类,其中 B 类没有默认构造函数,它唯一的构造函数需要多个参数。很简单,对吧?显然不是...
A类:
class SessionMediator
{
public:
SessionMediator()
: map_(16,100,100)
{}
Tilemap map_, background_, foreground_;
};
B类:
struct Tile2D;
class Tilemap
{
public:
Tilemap(const unsigned int tile_size, const unsigned int width,
const unsigned int height)
: tiles_(NULL), tile_size_(tile_size)
{
Resize(width, height);
}
inline void Resize(const unsigned int width, const unsigned int height)
{ /* Allocate tiles & assign to width_, height_... */ }
unsigned int tile_size_, width_, height_;
Tile2D* tiles_;
};
我正在像这样实例化 SessionMediator:
int main(int argc, char** argv)
{
SessionMediator session;
return 0;
}
这是我得到的错误。我在 Mac OS 10.5.8 上的 XCode 中编译,编译器是 g++:
session_mediator.h: In constructor 'SessionMediator::SessionMediator()':
session_mediator.h:19: error: no matching function for call to 'Tilemap::Tilemap()'
tilemap.h:31: note: candidates are: Tilemap::Tilemap(unsigned int, unsigned int, unsigned int)
tilemap.h:26: note: Tilemap::Tilemap(const Tilemap&)
session_mediator.h:19: error: no matching function for call to 'Tilemap::Tilemap()'
tilemap.h:31: note: candidates are: Tilemap::Tilemap(unsigned int, unsigned int, unsigned int)
tilemap.h:26: note: Tilemap::Tilemap(const Tilemap&)
(Duplicate of above here)
Build failed (2 errors)
我写了一个简短的可编译示例做基本相同的事情,试图找出我到底做错了什么,它编译得很好,在 g++ 中没有错误:
class A
{
public:
A(int x, int y, int z)
: x_(x), y_(y), z_(z)
{}
int x_, y_, z_;
};
class B
{
public:
B()
: m_a(1,2,3)
{}
A m_a;
};
int main(int argc, char **argv)
{
B test;
return 0;
}
为什么它在第一个示例中失败?Tilemap 的 3 arg 构造函数(在 Ex#1 中)的调用方式与 A 的 3 arg 构造函数的调用方式(在 Ex#2 中)相同。
在这两个示例中,代码似乎与我几乎相同。