在另一个类中初始化指针

时间:2013-09-22 12:23:21

标签: c++ pointers

我有一个非常简单的问题。我正在努力学习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 ++的初学者,所以请解释一下我做错了什么。谢谢。

3 个答案:

答案 0 :(得分:2)

  • 你没有初始化类体内的类成员,你在类构造函数中这样做。
  • const成员是特殊成员,必须 Member initialization list 中进行初始化。
  • 尽可能避免使用动态分配的内存,如果必须使用智能指针而不是原始指针。

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

答案 1 :(得分:0)

  • 你必须new一个不在类声明中的函数/方法中的成员指针。

  • 要初始化和构建const成员,您必须使用构造函数。

  • 不要忘记delete已分配的内存。

  • 当您可以使用简单变量时,尽量不要使用指针。

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

~proc()
{
  delete s1;
}

如果你可以避免使用指针,编程就会变得直接:

class proc
{
public:
    const sys s1;
};

答案 2 :(得分:0)

由于班级proc正在使用班级sys,因此包含顺序应相反:

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

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

class proc {
   ...
};