2013-02-11 66 views
0

我正在寫一個程序讀入文本文件並將數據存儲到一個名爲User的對象類中。然後,我將User對象存儲到帶有push_back函數的名爲MyList的動態數組的模板化類中。沒有匹配函數調用模板類

目前我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++; 
    } 
} 

我的User類是如下

#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類是有效的如下

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

所有數據,

目前即時得到一個錯誤「爲號召「MYLIST沒有匹配功能: :的push_back(用戶)(&)(INT,STD:字符串,整數,INT)」

「音符候選是:無效MYLIST ::的push_back(類型)[類型=使用者]」

回答

1

你聲明函數

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

,並嘗試push_back這個功能到object4。但object4被宣佈爲一個

MyList<User> object4; 

不是返回User功能MyList<User (&) (int, std:string, int, int)>。這對錯誤信息的原因

呼叫沒有匹配功能 「MYLIST ::的push_back(用戶(&)(INT,STD:字符串,INT,INT))」

如果您要創建一個User並追加它object4,你會做這樣

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

只要你有這些參數的構造函數。

+0

嗯,我有一個用戶對象被定義爲包含一個(int,名稱,int,int)的對象,所以我不應該能夠使用這種格式來存儲一個用戶對象到MyList? – 2013-02-11 02:03:20

+0

@DanielHwang請看最新的答案。 – 2013-02-11 02:10:30

+0

非常感謝!我不敢相信我在這樣一個小小的錯誤上花了一個小時。 – 2013-02-11 02:12:57