如何制作一个CRect对象数组?

时间:2012-09-03 11:18:27

标签: c++ arrays visual-c++ mfc

我想在头文件中定义一个CRect个对象的数组。那将是类似的东西:

  #pragma once
  #include<atltypes.h>

  CRect blockPos[3] = { CRect(0,0,55,43),  CRect(0,0,55,43), CRect(0,0,55,43), };

2 个答案:

答案 0 :(得分:1)

如果数组要保持不变,那么您只需在标题中声明数组const

CRect const blockPos[3] = { CRect(0,0,55,43),  CRect(0,0,55,43), CRect(0,0,55,43), };

这意味着包含标题的每个翻译单元都会生成自己的副本,如果数组非常大,这可能并不理想。

如果它不是常量,或者你想避免多个副本,那么整个程序需要一个单一的定义,而标题中只需要一个声明:

// header
extern CRect blockPos[3];

// some source file
CRect blockPos[3] = { CRect(0,0,55,43),  CRect(0,0,55,43), CRect(0,0,55,43), };

在这种情况下,请注意静态初始化顺序惨败。没有指定何时将相对于其他转换单元中的全局变量初始化,因此如果另一个全局变量的构造函数尝试访问它,则程序可能具有未定义的行为。一般来说,全局变量充满了危险,所以要特别小心使用它们。

答案 1 :(得分:0)

您不应在头文件中定义变量,因为它将在包含头文件的站点上多次定义。您应该使用访问器方法:

标头文件

#pragma once

CRect* GetRectArray();

C ++文件

#include "MyHeader.h"

namespace
{
    CRect blockPos[3] = { CRect(0,0,55,43),  CRect(0,0,55,43), CRect(0,0,55,43), };
}

CRect* GetRectArray()
{
    return blockPos;
}