2017-04-26 58 views
0

我需要一些指針類內聲明的幫助。我正在尋找一種方式來使用c樣式的數組(所以不幸的是沒有向量),雖然我使用C++。我不能設法執行錯誤,如「分段錯誤:11」或「總線錯誤:10」。目的是要有一種方法來包含對班級中的人的10個引用。指針在類和內存分配中訪問私有數組的聲明

這些指針聲明中這樣.h文件:

private: 
string * name; 
string * surname; 
int * index1; 
int * index2; 

,並在.cc文件的構造函數我用不同的方式來分配內存,如:

string * name = new string[10]; 
string * surname = new string[10]; 
int * index1 = new int[10]; 
int * index2 = new int[10]; 

但我得到運行時錯誤,也許是因爲它實際上不訪問私有變量或超過內存(「分段錯誤」)。 如果我不寫上面的代碼,執行時輸出是「總線錯誤」。 我只在執行過程中沒有收到編譯錯誤。 我無法更改.h文件中的私有變量類型,並且它不允許我在類中使用new,因爲它將是C++ 11的擴展。

任何幫助將是非常讚賞

+1

這些都是局部變量,是隱藏在你的對象實例成員。類型('string *'等等)不應該存在於實際的c-tor中(並且無論如何你應該首先使用'std :: vector <>'s)。 – WhozCraig

+0

在您的ctor中,decalration應該像'name = new string [10]'等等.. – sjsam

+0

感謝您的快速回復,但我也試過這種方式,它返回運行時錯誤 – Lorenzo

回答

2

我認爲你應該使用std :: vector的,因爲有很少的原因初學者使用新/刪除。

在你的情況下,私人部分可以改變爲:

private: 
std::vector<string> name; 
std::vector<string> surname; 
std::vector<int> index1; 
std::vector<int> index2; 

,並在構造函數中,能有這樣的:

name.resize(10); 
surname.resize(10); 
index1.resize(10); 
index2.resize(10); 
+0

更好的是,使用成員初始值設定項列表並有一個空的構造函數體 – NathanOliver

+0

OP實際上明確地說「沒有向量」 –

+1

@PserserBy OP似乎是一個新手,對我來說似乎更好他們會得到一個比新的更好的選擇/刪除 –