2016-04-25 13 views
-5
zu Instanz-Objekt übergeben
vector<string> hj{ "jack" }; 
vector<double> x{ 8 }; 
NamePairs pair1(hj,x); 

Dies ist der einzige Weg, der Code ausgeführt wird. Gibt es eine Möglichkeit, die Werte zu übergeben direkt ObjektinstanzFehler beim Vektor in Haupt

+3

Bitte nehmen Sie bitte die Zeit, um Ihren Code zu kopieren und einzufügen, und stellen Sie eine tatsächliche Frage hier. – rems4e

+0

Ihr 'NamePairs'-Konstruktor wartet auf' Vektor'-Argumente, aber Sie stellen 'char' Array und' float' bereit. Ich verstehe nicht, warum Sie Vektoren in Ihrer Konstruktorsignatur erwarten. – sashadereh

+1

Was ist Ihre Frage? –

Antwort

0

Sie passieren die falschen Typen zu Ihrem Konstruktor pair1: "Jack" vom Typ const char[5] und das zweite Argument 28.2 ist vom Typ double
Ihr Konstruktor obwohl wird erwartet eine std::vector<string> und eine std::vector<double>. Das Problem ist also, dass Ihr Konstruktor eine "Liste" von Strings und Doubles erwartet, was Sie ihm nicht geben.
den Namen Ihrer Klasse Unter Berücksichtigung der richtigen Lösung sollte sein:

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

Jetzt können Sie es so instanziiert:

NamePairs pair("Alfred", 43.4); 

Sehen Sie sich auch ein std::pair


Betrachtet man mit Willst du eine Liste von Personen, die jeweils einen Namen und ein Alter haben, gibt es ein paar verschiedene Lösungen:
Sie könnten eine Klasse erstellen Person, die zwei Attribute:

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

Und es so verwenden:

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

Oder Sie könnten auch (mehr wie Ihr Versuch) eine Klasse Person wie folgt erstellen:

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); 
    } 
}; 

Und es so verwenden:

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

Ich würde den ersten Ansatz sehr bevorzugen, weil es viel einfacher ist, die Personen zu behandeln, wenn sie nicht in der Liste sind (z. B. von einem Accessor zurückgegeben oder an andere Funktionen/Objekte weitergegeben oder wenn Sie auf ihnen arbeiten müssen). Und es sieht Weg sauberer zu mir

+0

gibt es eine Möglichkeit, ein Std :: vector übergeben und der Konstruktor wird es speichern Name [0] –

+0

Möchten Sie eine Liste der Namen im Zusammenhang mit einer Liste der entsprechenden Altersgruppen? Oder was willst du genau erreichen? – sro5h

+0

'" Jack "' hat eigentlich den Typ 'const char [5]'. – molbdnilo

Verwandte Themen