2013-09-22 206 views
0

我有一個非常簡單的問題。我正在嘗試學習C++,並遇到一些小問題。下面的代碼初始化另一個類的指針

system.h中

#include <iostream> 
#include "processor.h" 
using namespace std; 

class sys 
{ 
    public: 
     int id; 
     sys() 
     { 
      id=0; 
     } 
}; 

processor.h

#include <iostream> 
using namespace std; 
class proc 
{ 
    public: 
    const sys* s1; 
    s1=new sys(); 
}; 

錯誤說

"error C2512: 'sys' : no appropriate default constructor available" 

有一個默認的構造函數。

我是C++初學者,請解釋我做錯了什麼。謝謝。

+1

你真的不希望有一個全球性的'使用namespace'在頭指令文件。 – StoryTeller

回答

2
  • 你不初始化類體類成員,你這樣做是類的構造函數。
  • const成員是特殊成員,他們必須被初始化在Member initialization list
  • 儘量避免使用動態分配的內存,並且如果您必須使用智能指針而不是原始指針。

proc() : s1(new sys()) 
{ 
} 
0

 

  • 你必須new函數/方法不能在類聲明中成員指針。

  • 要初始化和構造const成員,您必須使用構造函數。

  • 不要忘記delete分配的內存。

  • 當您可以使用簡單變量時,儘量不要使用指針。

 

proc() : s1(new sys()) 
{ 
} 

~proc() 
{ 
    delete s1; 
} 

如果你能避免使用指針,編程變得直:

class proc 
{ 
public: 
    const sys s1; 
}; 
0

由於類proc是使用sys類包括順序應該是相反的:

// sys.h 
class sys { 
    ... 
}; 

// process.h 
#include "sys.h" 

class proc { 
    ... 
};