调用错误的操作员

时间:2015-11-17 16:14:05

标签: c++ operator-overloading

这就是问题所在,我试图重载operator + =()并且我认为我成功地这样做了,但是当我调用foo + = bar时,编译器声明我有操作符+的无效操作数()。有谁知道为什么会发生这种情况?代码示例如下:

Array& Array::operator+=(Recipe& recipe){ //Adds a Recipe object to Array object and orders
  int i = 0;

  if (size == MAX_RECIPES)
    return;

  while(i!=size && recipe.getName() > recipes[i]->getName()) //Order
    i++;

  for(int j=size; j>i; j--) //Shift to fit new recipe
    recipes[j] = recipes[j-1];
  recipes[i] = &recipe;
  size++;
  return *this;
}


void UImanager::addRecipes(Array *arr){ //Adds multiple Recipe objects to a temporary Array object
  int i;
  cout << endl << "Enter the number of recipes you wish to add: ";
  cin >> i;
  if(i<0)
    return;

  Array *tempArr = new Array;
  while(i){
    Recipe *tempRecipe = new Recipe;
    getRecipeData(tempRecipe);
    tempArr += tempRecipe;
    i--;
  }

实质上,Array类是Recipe对象的集合类,UImanager类是用户交互发生的地方。

1 个答案:

答案 0 :(得分:2)

您的变量android:src的类型为tempArr但是您应该将Array *应用于operator+()类型的对象而不是指针(对于配方相同):

Array

注意:如果要在指向*tempArr += *tempRecipe; 的指针上使用operator+(),则可以将参数更改为指针而不是引用,但不能对Recipe执行相同操作,因为{此表单中的{1}}必须应用于对象。否则你必须明确地调用它:

Array

在任何一个case参数中都应该是operator+=()tempArr->operator+=( *tempRecipe ); ,因为你不希望修改对象。