Ошибка: нет совпадения для звонка в (домашнее хозяйство)

0

Так что в основном у меня ошибка, что для меня нет смысла. Я пробовал все, но ничего не работает, поэтому я решил, что вы, ребята, сможете мне помочь. Кстати, это мой первый пост на этом сайте.

Я работаю над программой, которая включает класс под названием "hous.cc, h" и тестовую программу.

это Hous.h (код, о котором идет речь)

class Household{
public:


    // Default constructor
    Household(std::string nme, std::string adrs, int peeps, int ncome);
    Household();

    Household(std::string& nme, std::string& adrs, int& peeps, int& ncome);

Это мой файл Hous.cc

// constructors

Household::Household(std::string nme, std::string adrs, int peeps, int ncome){
    name = nme;
    address = adrs;
    numpeople = peeps;
    income = ncome;
    }

Household::Household(std::string& nme, std::string& adrs, int& peeps, int& ncome){
    name =nme;
    address = adrs;
    numpeople=peeps;
    income=ncome;
}


Household::Household(){
    name = "";
    address = "";
    numpeople = 0;
    income =0;
}

и соответствующий код класса тестов:

Household temp; 
string n; 
int i; 

cout<< "Please enter the name, press enter, then the income of the house\n";
            getline(cin, n);
            cin >>  i;
            myWard.removeHouse(temp(n, n, i, i));
            break;

сообщение об ошибке

Error: no match for call to '(Household) (std:string&, std::string&, int&, int&)'

Я действительно не понимаю, почему это происходит, потому что у моего домостроителя есть все эти параметры. Возможно, мне не хватает чего-то очевидного, но это не так очевидно для меня. Это первый раз, когда я работал с c++.

edit: removeHouse и myWard не имеют значения в этом вопросе, но я добавил временный код. Проблема заключается в коде

temp(n,n,i,i) 

вот где ошибка.

Заранее спасибо!

  • 0
    Что такое temp ?
  • 0
    А что такое мой? Введите полный код, пожалуйста
Показать ещё 2 комментария
Теги:

3 ответа

1
Лучший ответ

Вы инициализировали конструктором по умолчанию временный объект, а затем вы попытались повторно инициализировать его другим конструктором.. что проблема.

Household temp;  <-- initialized with DEFAULT constructor
string n; 
int i; 

cout<< "Please enter the name, press enter, then the income of the house\n";
            getline(cin, n);
            cin >>  i;
            myWard.removeHouse(temp(n, n, i, i)); <-- RE-initialize?? Bad idea..
            break;

Выполните инициализацию объекта с помощью конструктора, который вы хотите (4 аргумента, я полагаю), а затем используйте объект.

Также: gcc, вероятно, используется, и он предупреждает вас, что с этим набором аргументов разрешение не доступно.

Что-то вроде этого может работать:

string n; 
int i; 

// do initialize n and i to something meaningful here

Household temp(n, n, i, i);

cout<< "Please enter the name, press enter, then the income of the house\n";
            getline(cin, n);
            cin >>  i;
            myWard.removeHouse(temp);
            break;

Однако я ничего не знаю о других функциях и о поведении программы.

1

Выражение temp(n, n, i, i) не "повторно вызывает" конструктор, и это то, что вы пытаетесь сделать. Скорее, это выражение пытается вызвать оператор функции-оператора operator() на temp объекте. Вы не предоставляли такого оператора для своего класса, поэтому компилятор правильно жалуется.

Вы не можете повторно вызвать конструктор объекта. Однако вы можете ждать объявления объекта до тех пор, пока он вам не понадобится, а затем вызовите конструктор:

{
  cout<< "Please enter the name, press enter, then the income of the house\n";
  getline(cin, n);
  cin >>  i;
  Household temp(n, n, i, i);
  myWard.removeHouse(temp);
}
break;

Я добавил фигурные скобки, потому что этот код выглядит как часть оператора switch. Объявление переменных в середине блока switch, так как этот код теперь будет работать с temp, может привести к проблемам; скобки ограничивают область действия новой переменной.

0

Я считаю, что это может быть потому, что у вас есть два конструктора, которые отличаются только тем, что он принимает ссылки.

Компилятор чувствует, что он неоднозначен и не знает, какой конструктор вызывает; следовательно, "нет соответствия".

Ещё вопросы

Сообщество Overcoder
Наверх
Меню