【发布时间】:2016-06-22 17:06:13
【问题描述】:
我有一个类,其中包含一个在编译时大小未知的数组。数组在构造函数中初始化。然后,我有另一个函数来检查一个元素是否在数组中:
class myClass
{
int tab[];
public:
myClass(int array[], int length)
{
std::copy(array, array + length, tab)
}
void myFunction()
{
int x = 8;
int *ptr = std::find(std::begin(tab), std::end(tab), tdc_x);
if (ptr) /* here goes my code */
}
};
我收到以下错误:
错误:没有匹配的函数调用'begin(int [0])'
上面的代码有什么问题?我知道我不能将 std::find 与指针一起使用,但我的数组是一个数组,而不是一个衰减的指针。
我遵循this 的例子。我还包括了 algorithm 标头。我做错了什么?
我用 C++11 编译我的代码。
编辑:我现在明白了。但是我怎样才能以优雅的方式做我想做的事呢?
- 如果我使用指针而不是空数组,我将无法使用 std::find。
- 如果我给我的数组一个任意大小,我将无法复制一个更大的数组。 我该怎么办?
【问题讨论】:
-
int tab[];你不能有空数组。 -
@πάντα ῥεῖ,我的数组不是空的,它还没有被初始化。编译器不会抱怨这一点。你能建议我想要实现的替代解决方案吗?
-
你在哪里初始化的?
-
std::copy()不会神奇地为你分配内存。 -
int tab[];定义了一个空数组(0 个元素的数组)。 C++ 标准不允许这样的数组。
标签: c++ arrays c++11 std c++-standard-library