2016-04-25 28 views
-5
vector<string> hj{ "jack" }; 
vector<double> x{ 8 }; 
NamePairs pair1(hj,x); 

這是代碼運行的唯一方法。有沒有辦法直接值傳遞給pair1對象實例將主要向量<string>傳遞給對象實例的錯誤

+3

請花時間複製和粘貼您的代碼,並在這裏提出一個實際問題。 – rems4e

+0

您的'NamePairs'構造函數等待'vector'參數,但是您提供'char'數組和'float'。我不明白你爲什麼期望構造函數簽名中的向量。 – sashadereh

+1

那麼你的問題是什麼? –

回答

0

您傳遞錯誤的類型到你的構造: "Jack"const char[5]型的,第二個參數28.2類型爲double
你的構造函數,雖然是期待std::vector<string>std::vector<double>。所以問題在於你的構造函數期望有一個「列表」字符串和雙打,你沒有給他什麼。
考慮你的類的名稱正確的解決辦法應該是:

class NamePairs 
{ 
private: 
    double age; 
    std::string name; 
public: 
    NamePairs(const std::string& name, double Age) 
    { 
     this->name = name; 
     this->age = age; 
    } 
}; 

現在你可以實例化它像:

NamePairs pair("Alfred", 43.4); 

也可以考慮使用std::pair


考慮到你想要一個人名單,每個人都有一個名稱和年齡有一些不同的解決方案:
你可以創建一個類Person有兩個屬性:

class Person 
{ 
private: 
    double Age; 
    std::string Name; 
public: 
    Person(double age, const std::string& name) 
    { 
     Age = age; 
     Name = name; 
    } 
}; 

而且使用這樣的:

std::vector<Person> persons; 
persons.push_back(Person(23.4, "Alfons"); 

或者你也可以(更喜歡你試試)創建一個類PersonList這樣的:

class PersonList 
{ 
private: 
    std::vector<double> Ages; 
    std::vector<std::string> names; 
public: 
    void addPerson(double Age, const std::string& Name) 
    { 
     Ages.push_back(Age); 
     Names.push_back(Names); 
    } 
}; 

而且使用這樣的:

PersonList list; 
list.addPerson(23.5, "Andrea"); 

我非常喜歡第一種方法,因爲如果他們不在列表中(例如,由訪問者返回或傳遞給其他函數/對象,或者如果您需要對其進行操作)。它看起來方式更清潔

+0

有沒有辦法通過std :: vector ,構造函數會保存它的名字[0] –

+0

你想要一個與等效年齡列表相關的名字列表嗎?或者你究竟想要達到什麼目標? – sro5h

+0

''傑克「'實際上有'const char [5]'類型。 – molbdnilo