一個長標題的位,所以我很抱歉。但目前我的代碼確實存在一些問題。它應該是相當普遍的,代碼中有很多事情,所以我不會發布它,但我確實有這個問題。那就是:創建一個新的對象並將該對象存儲在一個新類的向量中,屬性消失
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]);
}
}
是什麼'Sentence'的拷貝構造函數呢?它一定在路上失去了屬性。 – Vlad
這就是我的想法,但沒有重載的'='運算符。我應該實施一個,看看它是否有效嗎?沒有真正認爲它會需要一個,因爲它只是被推到一個向量上。 – Brandon
等一下,它是否是'='重載或其他操作符? – Brandon