在VS2010 c ++中,一个源文件如何引用另一个源文件中定义的用户定义变量类型?

时间:2014-07-19 17:59:35

标签: visual-c++ typedef declaration vs2010-express

在VS2010 c ++中,一个源文件如何引用另一个源文件中定义的用户定义变量类型?

我的全局部分中有一个包含typedef语句的大型源文件。 以下是该声明:

typedef struct tagDRAWITEMSTRUCT_itemData {
    HICON hIcon[3];
    int ndxPlayer;      // Allowable values are 0:NumPlayers. 
      .
      .
  } DRAWITEMSTRUCT_itemData;  

为方便起见,我最近将源文件分为两个文件 两个文件中都有对此数据类型的引用,但无法弄清楚如何使用 两个文件中引用此变量类型的实例。以下是一个 无法解决的合理解决方案列表:

(1)在一个文件中定义变量类型,并简单地在另一个文件中引用它,即:

 DRAWITEMSTRUCT_itemData *foo   // As a function arg or local variable definition. 

 extern DRAWITEMSTRUCT_itemData *foo   // As a global declaration

(2)在一个文件中定义变量类型,并尝试使用以下任何一个全局语句在另一个文件中声明它:

 extern tagDRAWITEMSTRUCT_itemData;
 extern tagDRAWITEMSTRUCT_itemData DRAWITEMSTRUCT_itemData;
 extern typedef struct tagDRAWITEMSTRUCT_itemData;   
 extern typedef DRAWITEMSTRUCT_itemData;          

(3)将变量类型定义放在使用它的每个函数中,当然,它们根本不能用于函数参数。

在过去,我通过使用类定义来解决这个障碍 - 对于简单结构来说是一种巨大的痛苦。

2 个答案:

答案 0 :(得分:1)

如果这是在您的 source.cpp

//Now in source.h

typedef struct tagDRAWITEMSTRUCT_itemData 
{
    HICON hIcon[3];
    int ndxPlayer;      // Allowable values are 0:NumPlayers. 
      .
      .
  } DRAWITEMSTRUCT_itemData;  

现在应该进入你的 source.h

新的 source2.cpp 还应该包含 source.h 以使用tagDRAWITEMSTRUCT_itemData typedef。

答案 1 :(得分:0)

您应该将所有类型定义(例如typedef,还有class& struct& enum ...)以及函数和变量声明放入公共头文件,您可以从源代码文件中#include