Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.12.2016, 03:29   #1
olie
Новичок
Джуниор
 
Регистрация: 27.12.2016
Сообщений: 2
По умолчанию классы, вектор (с++)

Пытаюсь заполнить поле через метод класса void add():

Код:
void add(const Products &ad) {
        goods.push_back(ad);
};
но вываливается ошибка:
Код:
error: no matching function for call to 'std::vector<theGood>::push_back(const Products&)'|
Подскажите пожалуйста в чём дело.

Полное задание и весь код ниже.

products.h:
Код:
struct theGood {
    int numOfStockroom; /// номер склада
    int code;           /// код товара
    string name;        /// наименование товара
    string date;        /// дата поступления товара на склад
    int bestBefore;     /// срок хранения (в днях)
    int numOfGoods;     /// количество единиц товара
    double price;       /// цена товара

    friend istream &operator >> (istream &in, theGood &st);
    friend ostream &operator << (ostream &out, const theGood &st);
};

class Products {
private:
    vector<theGood> goods;
public:
    Products();                     /// конструктор по умолчанию
    Products(vector<theGood> gds);  /// копирующий конструктор

    void add(const Products &ad);

    void Display() const;

    Products SearchN(const int);     /// поиск по номеру склада
    Products BinSearchC(const int);  /// поиск по коду товара
    Products SearchD(const string*); /// поиск по дате поступления на склад
    Products SearchBB(const int);    /// поиск по сроку хранения

    friend istream &operator >> (istream &in, Products &cl);
    friend ostream &operator << (ostream &out, const Products &cl);
};
products.cpp
Код:
istream &operator >> (istream &in, theGood &st) {
    in >> st.numOfStockroom >> st.code >> st.name >> st.date >> st.bestBefore >> st.numOfGoods >> st.price;
    return in;
}

istream &operator >> (istream &in, Products &cl) {
    theGood temp;
    while(in >> temp) { cl.goods.push_back(temp); }
    return in;
}

ostream &operator << (ostream &out, theGood &st) {
    out << st.numOfStockroom << st.code << st.name << st.date << st.bestBefore << st.numOfGoods << st.price << endl;
    return out;
}

ostream &operator << (ostream &out, const Products &cl) {
    for (const auto &tmp : cl.goods) { out << tmp << endl; }
    return out;
}

Products::Products() { vector<theGood> *goods = new vector<theGood>; }

Products::Products(vector<theGood> gds) { vector<theGood> goods = gds; }

void add(const Products &ad) { goods.push_back(ad); }

void Products::Display() const {
    for (const auto &ad : goods) { cout << ad << endl; }
}
main.cpp
Код:
int main() {
    Products prods;
    Products tmp;
    size_t n = 0;

    cout << "Enter the number of goods: ";
    cin >> n;

    for (size_t i = 0; i < n; i++) { prods.add(tmp); }
    prods.Display();

    return 0;
}
olie вне форума Ответить с цитированием
Старый 28.12.2016, 07:37   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

У вас вектор чего объявлен? А что вы в него пытаетесь впихнуть?
p51x вне форума Ответить с цитированием
Старый 28.12.2016, 10:38   #3
olie
Новичок
Джуниор
 
Регистрация: 27.12.2016
Сообщений: 2
По умолчанию

аа, надо было так?

Код:
void add(const theGood &ad)
olie вне форума Ответить с цитированием
Старый 28.12.2016, 10:54   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Ну это вам виднее... Вдруг вы собирались из одного класса в другой копировать.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
процедуры и функции : Дан вектор A(n). Построить вектор B(n), i-ый элемент которого равен среднему арифметическому (Паскаль) vladicvladic123 Помощь студентам 2 04.12.2013 14:56
Дан вектор А(n). Получить новый вектор путем умножения элементов стоящих за максимальным элементом на минимальный элемент вектора pavel215 Паскаль, Turbo Pascal, PascalABC.NET 1 02.04.2013 14:30
Вектор С++ Наталья-1989 Помощь студентам 4 05.12.2011 09:37
Вектор. DimaSoldier Помощь студентам 1 23.12.2010 11:04