假设我有一个像这样声明的对象数组:
Object Array[100];
int count = 0;
bool exit;
do
{
if (Array[count] == "")
{
//code that stores data
exit = true;
}
else
{
count++;
}
}
while (exit != true);
我一直有来自编译器的错误说:
error: no match for ‘operator==’ in ‘Array[count] == ""'
我知道我可以使用for循环函数来正确存储它们甚至使用向量,但是现在,我必须使用此方法来检查数组是否为空/ null。知道怎么做吗?我在这里看到了很多例子,但几乎所有的例子都是string / int / float等等数组。
答案 0 :(得分:1)
使用以下代码创建数组:Object Array[100];
已创建 100个内存插槽供Object
使用,并为每个插槽调用默认构造函数。
从物理上讲,数组中有100个元素位于引用行之后。
从逻辑上讲,您可以根据自己的意愿决定,最好将该号码保存到count
。
如果Object
的默认c'tor在初始化方面不够,那么你有几个选项来检查天气是否已初始化内容:
bool isInitialized()
)operator==
为参数的const char *
,并将其与""
进行比较。operator==
作为参数,并将其与Object
进行比较,假设""
来自Object
。 答案 1 :(得分:1)
数组本身不能为“空”。
Object Array[100];
是一个声明,它创建一个包含100 Object
个数组的数组。它们已经构建并存在(如果是默认的可构造的)。
如果类型Object
有一些“空”状态的概念,您可以检查一下(例如,std::vector
会员.empty()
检查是否为空。)或者您可以使用容器来保存数据(这也使它成为堆的一部分而不是堆栈内存并启用动态调整大小)。
std::vector<Object> vec;
int count = 0;
// do stuff...
do
{
if (count >= vec.size())
{
//code that stores data
exit = true;
}
else
{
count++;
}
}
while (exit != true);
你也可以说std::size_t count = vec.size();
。
答案 2 :(得分:0)
Object Array[100];
不能为空。另一方面,指向动态分配的数组的指针可以初始化为nullptr并检查:
Object *Array = nullptr;
if(!Array) // or Array == nullptr
cout << "Array is empty (unallocated)" << endl;
Array = new Array[100];
if(Array) // or Array != nullptr
cout << "Array is NOT empty" << endl;
Array[count]
没有意义。您正在访问索引count
处的元素(这是索引的错误名称)并将其与const char*
进行比较。 std::vector
是要走的路。上面的代码(除了使用std::vector
之外的所有内容) - 丑陋和不好的做法。