Добавление объекта, имеющего строковый член, в вектор - PullRequest
0 голосов
/ 03 января 2012
class A
{
public:
    string  name;

    float   length;

    float   weight;

    bool    isEnabled;
};

Когда я делаю push_back() на векторе этого класса, он работает впервые, но не на последующих push_back() вызовах. Может ли это быть из-за члена строки? Если так, то почему?

Ответы [ 2 ]

1 голос
/ 03 января 2012

Я опробовал твой код.

vector<Aclass>  aClass;
aClass.push_back(Aclass("John Doe ", 6.2 , 220  , true) );
aClass.push_back(Aclass("John Doe2 ", 6.2 , 220  , true) );
aClass.push_back(Aclass("John Doe3 ", 6.2 , 220  , true) );
aClass.push_back(Aclass("John Doe4 ", 6.2 , 220  , true) );

Но не удалось воспроизвести вашу ошибку.

Этот код возвращает четыре раза.

#include <iostream>
#include <vector>
#include <string>
using namespace std;

class Aclass
{
public:
    string  name;
    double   length;
    double   weight;
    bool    isEnabled;

    Aclass(){}
    ~Aclass(){}

    Aclass(string  _name, double   _length, double   _weight, bool    _isEnabled )  //constructor
    {
        name = _name;
        length = _length;
        weight = _weight;
        isEnabled = _isEnabled;

        cout<<" \n";
        cout<<"Name   : "<<name<<" \n";
        cout<<"length : "<<length<<" \n";
        cout<<"weight : "<<weight<<" \n";
        cout<<" \n";
    }



};



int main()
{ 

    vector<Aclass>  aClass;
    aClass.push_back(Aclass("John Doe ", 6.2 , 220  , true) );
    aClass.push_back(Aclass("John Doe2 ", 6.2 , 220  , true) );
    aClass.push_back(Aclass("John Doe3 ", 6.2 , 220  , true) );
    aClass.push_back(Aclass("John Doe4 ", 6.2 , 220  , true) );

    cout<<" \n";


return 0;
}

Вывод:

Name   : John Doe
length : 6.2
weight : 220


Name   : John Doe2
length : 6.2
weight : 220


Name   : John Doe3
length : 6.2
weight : 220


Name   : John Doe4
length : 6.2
weight : 220


Press any key to continue
0 голосов
/ 03 января 2012

Почему string имеет какое-либо отношение к этому?

Вы сделали #include <string>?Вы не упомянули, есть ли у вашего class конструктор копирования.Это выглядит примерно так:

class A {
public:
        A() //default constructor
        A(const A&) //copy constructor
};

По умолчанию c ++ будет копировать все открытые члены, но для использования контейнеров STL и push_back()

необходим конструктор копирования
...