Создание нового объекта и сохранение этого объекта в векторе нового класса, атрибуты исчезают - PullRequest
0 голосов
/ 22 октября 2011

Немного длинного названия, так что мне жаль.Но сейчас у меня есть небольшая проблема с моим кодом.Он должен быть довольно общим, и в коде происходит немало вещей, поэтому я не буду публиковать все это, но у меня есть одна проблема.Вот оно:

Sentence newSentence(currentSentence, this, sentenceCount);
this->sentencesNonP.push_back(newSentence);

Теперь newSentence имеет атрибут с именем words типа std::vector<Word *>, Word также является другим классом в проекте.

Когда я отлаживаю и проверяю атрибуты newSentence, это показывает, что words заполняется с длиной 4, однако, когда я проверяю sentencesNonP, который является std::vector<Sentence>, длина вектора words равна 0.Я проверяю первую точку на sentencesNonP, потому что это первое значение, которое вводится первым, поэтому не то, чтобы я смотрел в неправильном месте вектора sentencesNonP.

Любая причина, почему мойданные теряются в процессе преобразования?

РЕДАКТИРОВАТЬ: я реализовал как перегрузку оператора = и оператор копирования.Тем не менее, words все еще пуст в sentencesNonP.

EDIT2: Sentence.h (исключая include's)

class Word;
class Document;

class Sentence {
public:
    //Take out Document * document
    Sentence();
    Sentence(std::string value, Document * document = NULL, int senNum = 0);
    Sentence(const Sentence& newSent);
    //Sentence(std::string value);
    ~Sentence(void);

    Sentence & operator=(const Sentence newSent);

    Document * getDocument(void);
    void setDocument(Document * document);
    //__declspec(property(get = getDocument, put = setDocument)) Document * document;

    std::string getSentence(void);
    void setSentence(std::string word);
    //__declspec(property(get = getSentence, put = setSentence)) std::string str;

    void setSentenceNumber(unsigned int i);

    Word * operator[] (unsigned int i);
    unsigned int wordCount(void);
    unsigned int charCount(void);
    unsigned int sentenceNumber(void);

    std::vector<Word *> getWordsVector(void);

private:
    std::string sentence;
    std::vector<Word *> words;
    std::vector<Word> wordNonP;
    Document * myd;
    unsigned int senNum;
};

Игнорировать закомментированный declspec

EDIT3: вот мой конструктор копирования:

Sentence::Sentence(const Sentence& newSent) {
    this->sentence = newSent.sentence;
    this->myd = newSent.myd;
    this->senNum = newSent.senNum;
    for (int i = 0; i < newSent.wordNonP.size(); i++) {
        this->wordNonP.push_back(newSent.wordNonP[i]);
        this->words.push_back(newSent.words[i]);
    }
}

1 Ответ

0 голосов
/ 22 октября 2011
for (int i = 0; i < newSent.wordNonP.size(); i++) {
    this->wordNonP.push_back(newSent.wordNonP[i]);
    this->words.push_back(newSent.words[i]);
}

Если wordNonP пусто, вы не будете копировать words вообще.Напишите либо:

for (int i = 0; i < newSent.wordNonP.size(); i++)
    this->wordNonP.push_back(newSent.wordNonP[i]);
for (int i = 0; i < newSent.words.size(); i++)
    this->words.push_back(newSent.words[i]);

, либо еще проще:

this->wordNonP = newSent.wordNonP;
this->words = newSent.words;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...