我有两节课。类WorldList
拥有一个指向WordOccurence
对象的动态数组的指针:
class WordOccurrence {
public:
{...member functions...}
private:
string word_;
int num_;
};
class WordList{
public:
WordList(WordList&);
{...member functions...}
private:
WordOccurrence *wordArray_;
int size_;
};
这是我的问题:当我尝试访问WordOccurence
变量时,我的复制构造函数中出现错误。我的副本构造函数如下所示:
WordList::WordList(WordList &rhs){
size_ = rhs.size_;
wordArray_ = new WordOccurrence[rhs.size_];
for(int i = 0; i < rhs.size_; ++i){
wordArray_[i]->word_ = rhs.wordArray_[i]->getWord();
wordArray_[i]->num_ = rhs.wordArray_[i]->getNum();
}
}
我要说的错误:
错误:成员引用类型'WordOccurrence'不是指针;做了 您是要使用“。”?
错误:“ word_”是“ WordOccurrence”的私人成员
,并重复num_ variable
。
有人可以阐明我在这里可能会缺少什么吗?我认为可以通过指向特定对象的指针访问私有成员变量,这不是箭头运算符背后的想法吗?
答案 0 :(得分:0)
您的wordArray_
被定义为指向WordOccurrence
的指针:
WordOccurrence *wordArray_
因此wordArray_[i]
的类型引用了WordOccurrence
对象。要访问对象的成员,应使用.
而不是->
。
仍然存在的问题是,您尝试直接设置新事件的成员:
wordArray_[i].word_ = rhs.wordArray_[i].getWord();
wordArray_[i].num_ = rhs.wordArray_[i].getNum();
现在getWord()
和getNum()
是公开的,但是word_
和num_
对WordOccurence来说是私有的,因此对WordList
不可见。
一种简单的肮脏方法是让Wordlist成为WordOccurence的朋友:
class WordOccurence {
...
friend class WordList;
};
一种更简洁的方法是依靠WordOccurences
的副本构造函数:
WordList::WordList(WordList &rhs){
size_ = rhs.size_;
wordArray_ = new WordOccurrence[rhs.size_];
for(int i = 0; i < rhs.size_; ++i){
wordArray_[i] = rhs.wordArray_[i];
}
}
现在,更好的方法是将wordArray_
定义为vector<WordOccurence>
而不是数组:您将不必再担心它的副本。