2012-05-06 36 views
0

在arraystorage類聲明,private: string *names;實例化用C私人字符串數組++

ArrayStorage& ArrayStorage::operator=(const ArrayStorage& rhs) 
{   
    // possible error 
    names = new string[numOfElements]; 

    return *this; 
} 

//  copy constructor 
ArrayStorage::ArrayStorage(const ArrayStorage& rhs): 
           names(new string[numOfElements]),              

           numOfElements(rhs.numOfElements) 
{ 
    //names = new string[this->getNumOfElements()]; 

    for (int i = 0; i < this->getNumOfElements(); i++) 
     names[i] = rhs.names[i]; 

} 

ArrayStorage::~ArrayStorage(void) 
{ 
    delete [] names; 
} 

============================ ==== ArrayStorage.cpp ==============================

我的第一個問題,如果我聲明名稱爲私人的,整個事情不起作用。如果我把它公諸於衆,它就會起作用。

其次,如果我想將string *names聲明爲私有,請問您能否提供建議,如何使其正常工作?

+1

你能更具體? 「不起作用」是什麼意思?如果您可以將您的程序縮減爲能夠證明您的問題的最小的完整示例程序,它將非常有用。請參閱http://sscce.org/。 –

+0

通過不工作的東西真的很奇怪發生。基本上,你可能稱它爲超時或無限循環。程序執行暫停,我在控制檯上看到一個閃爍的光標。 由於我的問題涉及到公共/私人問題,所以我放棄了這一點。 – HungryCoder

+0

請注意'ArrayStorage arrayStorage4 = arrayStorage3;'應該調用構造函數,而不是'operator ='。 – chris

回答

1

使用類似於std::vector<std::string>的RAII類,並刪除賦值運算符。此外,您可能需要閱讀三法(如果您有析構函數,複製賦值運算符,複製構造函數;那麼您應該擁有所有這些函數)。

(編輯:修正法律名稱)

+2

我認爲你的意思是[Rule of Three](http://stackoverflow.com/questions/4172722/what-is-the-rule-of-ree)。 [Demeter法](http://en.wikipedia.org/wiki/Law_of_Demeter)是別的。 –

+0

是3的規則。對不起,不能使用std :: vector – HungryCoder

+0

爲什麼你不能使用std :: vector? –