2011-10-22 76 views
0

一個長標題的位,所以我很抱歉。但目前我的代碼確實存在一些問題。它應該是相當普遍的,代碼中有很多事情,所以我不會發布它,但我確實有這個問題。那就是:創建一個新的對象並將該對象存儲在一個新類的向量中,屬性消失

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矢量的錯誤位置。

我的數據在轉換過程中丟失的任何原因?

編輯:我已經實現了一個=運算符重載和複製操作符。但sentencesNonP中的words仍爲空。

EDIT2: Sentence.h(不包括包括的)

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]); 
    } 
} 
+0

是什麼'Sentence'的拷貝構造函數呢?它一定在路上失去了屬性。 – Vlad

+0

這就是我的想法,但沒有重載的'='運算符。我應該實施一個,看看它是否有效嗎?沒有真正認爲它會需要一個,因爲它只是被推到一個向量上。 – Brandon

+0

等一下,它是否是'='重載或其他操作符? – Brandon

回答

0
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; 
+0

'words'實際上是'wordNonP'中每個元素的指針矢量,所以這就是爲什麼我按照我的方式編寫了我的拷貝構造函數。改變你的方式,它仍然不會工作。我非常感謝你的建議,並且我已經改變了一些代碼。編輯:正如我所提到的,它仍然不會複製存儲在矢量中的所有單詞? – Brandon

相關問題