static类型的结构体数组变量的初始化

时间:2021-11-30 21:38:02
在route.h文件中定义了一个结构体Station
struct Station
{
int ID; //车站ID
POINT position; //车站位置
CRect rect; //车站大小
CRect bigrect; //车站放大大小
bool select; //被鼠标选中
CString name; //站名
};

在route.h文件中将结构体Station重命名为MetroStation
typedef struct Station MetroStation;

在类
CRoute
中定义了一个静态的MetroStation类型的指针变量
static  MetroStation* m_pStation
现在我想讲变量指向一个长度为21的MetroStation类型的数组,即效果类似:int a[10]。
这样一来如何对m_pStation数组初始化呢

14 个解决方案

#1


static  MetroStation* m_pStation = new MetroStation[20];
static  MetroStation m_pStation[20];

?

#2


请问楼主想干什么?

#3


引用 1 楼 zgl7903 的回复:
static  MetroStation* m_pStation = new MetroStation[20];
static  MetroStation m_pStation[20];

?

那样不行的,第一个static  MetroStation* m_pStation = new MetroStation[20];的话弹出错误
error C2040: 'public: static struct Station * CRoute::m_pStation' : 'struct Station' differs in levels of indirection from 'struct Station *'

第二个static  MetroStation m_pStation[20]就没初始化啊
static类型的变量都是在cpp文件中函数外边实现其初始化的,怎么弄呢?

#4


引用 2 楼 xiaojunjun1202 的回复:
请问楼主想干什么?

我先在其他类中调用这个类的m_pStation变量

#5


初始化的方法就是在类外直接=NULL 在需要赋具体值时在赋值

#6


sorry,我想在其他类中调用这个类的m_pStation变量

#7


引用 5 楼 heksn 的回复:
初始化的方法就是在类外直接=NULL 在需要赋具体值时在赋值
不行的,弹出错误对话框[img=http://hi.csdn.net/space-3611106-do-album-picid-884999-goto-down.html][/img]

#8



typedef struct _Station
{
  int ID;                //车站ID
  POINT position;        //车站位置
  CRect rect;            //车站大小
  CRect bigrect;        //车站放大大小
  bool select;        //被鼠标选中
  CString name;        //站名

  //默认的初始化
  _Station()
  {
    ID = -1;
    position.x = position.y = 0;
    rect.SetRectEmpty();
    bigrect.SetRectEmpty();
    select = false;
    name.Empty();
  }

  //带参数的初始化
  _Station(int nID, POINT Pos, LPRECT pRect, LPRECT pBigRect, bool bSel, LPCTSTR szName)
  {
    ID = nID;
    position = Pos;
    rect = pRect;
    bigrect = pBigRect;
    select = bSel;
    name = szName;
  }
}Station;

static Station mStation[10]=
{
  Station(1, CPoint(10,20), CRect(0,0,10,10), CRect(0,0,100,100), false, _T("1")),  
  //后续的按默认的初始化
};

#9


做什么?

#10


MetroStation*  CRoute::m_pStation = new MetroStation[20];

CRoute::m_pStation 自己解释.

如果不是,那是什么?

#11


引用 9 楼 visualeleven 的回复:
做什么?
CRoute对话框类用来绘制一个平面火车站点图。在View视图中想通过扑捉用户的站点选择,来加载响应站点的信息。达到如果我在平面图上选择了北京站,则在view视图类中则对北京站做一些处理

#12


引用 8 楼 zgl7903 的回复:
C/C++ code

typedef struct _Station
{
  int ID;                //车站ID
  POINT position;        //车站位置
  CRect rect;            //车站大小
  CRect bigrect;        //车站放大大小
  bool select;        //被鼠标选中
 ……

报错了,提示no overloaded function takes 6 parameters

#13


引用 12 楼 jokeyjohn 的回复:
引用 8 楼 zgl7903 的回复:

C/C++ code

typedef struct _Station
{
int ID; //车站ID
POINT position; //车站位置
CRect rect; //车站大小
CRect bigrect; //车站放大大小
bool select; //被鼠标选中
……

报错了,提示no overloaded fu……

贴代码

#14


引用 13 楼 zgl7903 的回复:
引用 12 楼 jokeyjohn 的回复:
引用 8 楼 zgl7903 的回复:

C/C++ code

typedef struct _Station
{
int ID; //车站ID
POINT position; //车站位置
CRect rect; //车站大小
CRect bigrect; //车站放大大小
bool select; //被鼠标选中
……
……
非常感谢,已经完成了,是我我看错了

#1


static  MetroStation* m_pStation = new MetroStation[20];
static  MetroStation m_pStation[20];

?

#2


请问楼主想干什么?

#3


引用 1 楼 zgl7903 的回复:
static  MetroStation* m_pStation = new MetroStation[20];
static  MetroStation m_pStation[20];

?

那样不行的,第一个static  MetroStation* m_pStation = new MetroStation[20];的话弹出错误
error C2040: 'public: static struct Station * CRoute::m_pStation' : 'struct Station' differs in levels of indirection from 'struct Station *'

第二个static  MetroStation m_pStation[20]就没初始化啊
static类型的变量都是在cpp文件中函数外边实现其初始化的,怎么弄呢?

#4


引用 2 楼 xiaojunjun1202 的回复:
请问楼主想干什么?

我先在其他类中调用这个类的m_pStation变量

#5


初始化的方法就是在类外直接=NULL 在需要赋具体值时在赋值

#6


sorry,我想在其他类中调用这个类的m_pStation变量

#7


引用 5 楼 heksn 的回复:
初始化的方法就是在类外直接=NULL 在需要赋具体值时在赋值
不行的,弹出错误对话框[img=http://hi.csdn.net/space-3611106-do-album-picid-884999-goto-down.html][/img]

#8



typedef struct _Station
{
  int ID;                //车站ID
  POINT position;        //车站位置
  CRect rect;            //车站大小
  CRect bigrect;        //车站放大大小
  bool select;        //被鼠标选中
  CString name;        //站名

  //默认的初始化
  _Station()
  {
    ID = -1;
    position.x = position.y = 0;
    rect.SetRectEmpty();
    bigrect.SetRectEmpty();
    select = false;
    name.Empty();
  }

  //带参数的初始化
  _Station(int nID, POINT Pos, LPRECT pRect, LPRECT pBigRect, bool bSel, LPCTSTR szName)
  {
    ID = nID;
    position = Pos;
    rect = pRect;
    bigrect = pBigRect;
    select = bSel;
    name = szName;
  }
}Station;

static Station mStation[10]=
{
  Station(1, CPoint(10,20), CRect(0,0,10,10), CRect(0,0,100,100), false, _T("1")),  
  //后续的按默认的初始化
};

#9


做什么?

#10


MetroStation*  CRoute::m_pStation = new MetroStation[20];

CRoute::m_pStation 自己解释.

如果不是,那是什么?

#11


引用 9 楼 visualeleven 的回复:
做什么?
CRoute对话框类用来绘制一个平面火车站点图。在View视图中想通过扑捉用户的站点选择,来加载响应站点的信息。达到如果我在平面图上选择了北京站,则在view视图类中则对北京站做一些处理

#12


引用 8 楼 zgl7903 的回复:
C/C++ code

typedef struct _Station
{
  int ID;                //车站ID
  POINT position;        //车站位置
  CRect rect;            //车站大小
  CRect bigrect;        //车站放大大小
  bool select;        //被鼠标选中
 ……

报错了,提示no overloaded function takes 6 parameters

#13


引用 12 楼 jokeyjohn 的回复:
引用 8 楼 zgl7903 的回复:

C/C++ code

typedef struct _Station
{
int ID; //车站ID
POINT position; //车站位置
CRect rect; //车站大小
CRect bigrect; //车站放大大小
bool select; //被鼠标选中
……

报错了,提示no overloaded fu……

贴代码

#14


引用 13 楼 zgl7903 的回复:
引用 12 楼 jokeyjohn 的回复:
引用 8 楼 zgl7903 的回复:

C/C++ code

typedef struct _Station
{
int ID; //车站ID
POINT position; //车站位置
CRect rect; //车站大小
CRect bigrect; //车站放大大小
bool select; //被鼠标选中
……
……
非常感谢,已经完成了,是我我看错了