有一个对象数组,为了向它添加对象,我尝试以下方法:
Shape ShapeList[30];
void addShape(Shape s)
{
for(int i=0; i<30;i++)
{
if(ShapeList[i] != '\0')
{ i++;}
else
{
ShapeList[i]=s;
numShapes++;
break;
}
}
}
numShapes 是一个整数变量,Shape是类, ShapeList是对象数组。但是编译器以这种方式给出错误,不允许!=
运算符。那么我该如何实现呢?
答案 0 :(得分:4)
我认为您需要更改“容器”声明:
Shape *ShapeList[30];
void addShape(Shape *s)
{
for(int i=0; i<30;i++)
{
if(ShapeList[i])
{ i++;}
else
{
ShapeList[i]=s;
numShapes++;
break;
}
}
}
以这种方式调用addShape:
addShape(new Shape());
答案 1 :(得分:2)
ShapeList[i]
返回Shape
类型的对象。在这种情况下,您可以重载operator != (char)
。
class Shape
{
//your implementation
//
public:
bool operator != (char x) const
{
// comparison logic
}
};
另外,我相信你在这里犯了错误:
if(ShapeList[i] != '\0')
{ i++;}
我假设您要跳过此案例,但您已在i
循环中增加for
。你可能想要:
if(ShapeList[i] != '\0')
{ continue;}
正如其他人所指出的那样,你应该使用std::vector
而不是原始数组。我最初认为ShapeList
是std
容器上的包装器。
答案 2 :(得分:1)
Shape * ShapeList[30];
numShapes=0;
void addShape(Shape* s)
{
if( i>=30)
return;
ShapeList[numShapes++]=s; // provided you need to insert at end
}
你不能使用\0
,因为它是一个数组,而不是一个字符串。
这样存储整个对象是内存的开销。除非局部变量超出范围问题,否则指针是更好的选择。如果STL和Vectors不在您的项目范围之内,您可以尝试使用它。你可以使用pushback()或pushfront()
答案 3 :(得分:0)
除非Shape
类中有转换运算符将其转换为字符,或者将字符作为参数的不等于比较运算符,否则无法将Shape
对象与像你一样char
。
您应该使用std::vector
或std::array
并使用at
成员函数查看条目是否存在。
答案 4 :(得分:0)
您未指定ShapeList
的声明方式。
使用!=运算符将其与字符NUL进行比较, 下面有4行你为它指定一个Shape对象。
我认为你想要实现的目标是:在指向Shape的指针数组中找到一个空槽,并将Shape存储在那里。
但可能更好的方法是使用std :: vector或std :: list,以及push_back你的形状。
你必须要问自己的另一件事:我想存储我的Shape对象或指针的副本吗?