我建议您使用 astd::vector
而不是动态分配的数组。 std::vector
s 更容易使用,并且不会泄漏内存。
但是,错误消息所指的缺失构造函数是Square
的构造函数。您需要添加一个Square
不带参数的构造函数。 以下其中一项将执行:
class Square {
Square() { ... }
// Square with dimensions of 0 is empty
Square(int length=0, int width=0) { ... }
...
};
请注意,如果你将这两个都放在文件中,那么你会得到一个错误,因为在没有给出参数的情况下不可能知道调用哪个构造函数。
即使您使用std::vector
. “可能”,因为您可以绕过它,如果您将自己限制为std::vector
带有对象的构造函数,例如:
std::vector<Square> foo(10, Square(0, 0));
// reassign each element accordingly
我已经将此添加为对问题本身的评论。正如 Herb Sutter 所说,std::vector
旨在与数组互换:
为什么向量是连续的如此重要?因为这是保证向量与 C 数组布局兼容所需要的,因此即使我们需要与 C 代码交换数据,我们也没有理由不使用向量作为数组的优越且类型安全的替代方案。因此,vector 是我们通往其他语言和大多数操作系统功能的门户,其通用语是古老的 C 数组。
顺便说一句,语法是(假设v
是一个向量)&v[0]
。也就是说,获取第一个元素的地址(它是一个引用,因此它适用于std::vector
除 之外的所有 s std::vector<bool>
),您将获得一个指针,您可以将其传递给任何需要指针的函数(当然,您可以得到“数组”的长度为v.size()
)。