快捷搜索:   服务器  安全  linux 安全  MYSQL  dedecms

std::vector 实例化不需要类定义

  朋友问一个问题,如下代码,是不是可以通过编译,我看了下,觉得很有意思,故记录下:

  Point3D.h

  #pragma once

  class CPoint3D

  {

  public:

  CPoint3D(void);

  public:

  ~CPoint3D(void);

  };

  Line3D.h

  #pragma once

  #include <vector>

  class CPoint3D;

  class CLine3D

  {

  public:

  CLine3D(void);

  public:

  ~CLine3D(void);

  private:

  std::vector<CPoint3D> m_Points;

  };

  Line3D.cpp

  #include "Line3D.h"

  #include "Point3D.h"

  CLine3D::CLine3D(void)

  {

  }

  CLine3D::~CLine3D(void)

  {

  }

  按照一般经验,Line3D的对象实例化的时候,是需要Point3D的对象定义,以决定Line3D自己的内存布局,但是注意这里,在Line3D.h中,只是有CPoint3D的前置申明,没有详细定义,这个编译运行,却是没有问题的。

  下面是描述以上一般情况的代码

  一般情况

  #pragma once

  class CPoint3D;

  class CLine3D

  {

  public:

  CLine3D(void);

  public:

  ~CLine3D(void);

  private:

顶(0)
踩(0)

您可能还会对下面的文章感兴趣:

最新评论