当我们有一个更短的方法时,为什么我们在结构中使用typedef

时间:2018-04-30 09:45:43

标签: c++ struct

当我定义一些随机结构时,例如在Visual Studio的cpp文件中

1)    struct CAddition {
    int x, y;

    CAddition(int a, int b) { x = a; y = b; }
    int result() { return x + y; }
};

现在如果我定义一些结构对象

CAddition foo;

它没有任何错误 但如果我在最后使用任何别名

2) struct CAddition {

    int x, y;

CAddition(int a, int b) { x = a; y = b; }
int result() { return x + y; }
}CAddition;

在定义

之前,我不能简单地定义任何对象而不使用struct
 struct CAddition foo;

或另一种方法是添加

typedef struct CAddition { 

在方法2中为了避免每次都重写struct,我的问题是这两个定义之间的区别是什么,方法1不使用更少的关键字,更容易使用在什么条件下我们应该使用结构的第二个定义

2 个答案:

答案 0 :(得分:5)

使用struct CAddition { ... } CAddition;,您正在做两件事:

  1. 您将结构CAddition定义为类型名称。这就是struct CAddition所做的事情。
  2. 您定义 变量 CAddition。变量是之后的结构。
  3. 因为您定义了变量CAddition,所以不能将该名称用于该类型,因为编译器会认为您的意思是变量而不是结构。要解决这个问题,您需要使用struct CAddition明确告诉编译器您的结构类型名称。

    在不相关的注释中:struct就像class一样,不同之处在于public默认情况下所有成员struct。因此,您不需要public中的struct规范。

答案 1 :(得分:0)

  

它没有任何错误,但如果我在最后使用任何别名

在2)你没有使用“别名”,但你创建了一个你刚刚定义的类的实例(结构和类在c ++ btw中是相同的)。然后,您有一个名称隐藏类名的实例,因此您需要struct CAddtion告诉编译器CAddition引用的类不是您创建的实例。