2013-02-11 5 views
0

Я пишу программу, которая читает в текстовом файле и хранит данные в класс объектов, называемых User. Затем я сохраняю объекты User в шаблонном классе динамических массивов MyList с функцией push_back.Нет подходящей функции Вызов в классе шаблона

В настоящее время мой класс MyList выглядит следующим образом

#ifndef MYLIST_H 
#define MYLIST_H 
#include <string> 
#include <vector> 

using namespace std; 

template<class type> 
class MyList 
{ 
public: 
    MyList(); 
    ~MyList(); 
    int size() const; 
    int at(int) const; 
    void remove(int); 
    void push_back(type); 

private: 
    type* List; 
    int _size; 
    int _capacity; 
    const static int CAPACITY = 80; 
}; 

и функция буксировки выглядит так

template<class type> 
void MyList<type>::push_back(type newfriend) 
{ 

    if(_size >= _capacity){ 
     _capacity++; 

    List[_size] = newfriend; 
     size++; 
    } 
} 

Мой класс Пользователь следующим

#ifndef USER_H 
#define USER_H 
#include "mylist.h" 
#include <string> 
#include <vector> 

using namespace std; 

class User 
{ 
public: 
    User(); 
    User(int id, string name, int year, int zip); 
    ~User(); 

private: 
    int id; 
    string name; 
    int age; 
    int zip; 
    MyList <int> friends; 
}; 

#endif 

наконец, в моем Основная функция Я объявляю пользователя MyList следующим образом

MyList<User> object4; 

и мой призыв к push_back следующего

User newuser(int id, string name, int age, int zip); 
    object4.push_back(newuser); 

Всех данных в классе пользователя является действительным,

В настоящее время им получает ошибку «нет подходящей функции для вызова«MyList: : push_back (Пользователь) (&) (интермедиат, станд: строка, Int, Int)»

"кандидатов записные являются: пустота MyList :: push_back (тип) [с типом = Пользователь]"

ответ

1

Вы объявляете функцию

User newuser(int id, string name, int age, int zip); 

и попытаться push_back эту функцию на object4. Но object4 объявляется быть

MyList<User> object4; 

не MyList<User (&) (int, std:string, int, int)> функций, возвращающих User. Это причина появления сообщения об ошибке

нет функции соответствия для вызова "MyList :: push_back (User (&) (интермедиат, станд: строка, Int, Int))"

Если у вас хотите создать User и добавить его в object4, вы могли бы сделать это как

User newuser(id, name, age, zip); 
object4.push_back(newuser); 

при условии, у вас есть конструктор с этими параметрами.

+0

Ну, у меня есть объект User, определенный как объект, содержащий (int, name, int, int), поэтому я не должен использовать этот формат для хранения объекта User в MyList? –

+0

@ DanielHwang См. Обновленный ответ. –

+0

Большое вам спасибо! Я не могу поверить, что я провел час с такой мелкой ошибки. –

Смежные вопросы