C++ 类中的Typedef

C++ 类中的Typedef,c++,typedef,C++,Typedef,如何在函数中键入def? 让我们考虑B类有一个int x数据包。当我尝试编译以下代码时,得到的结果是:“.”标记之前应该是初始值设定项 在本例中,一切都很简单,但对于我的代码,我将执行类似test.x.y.z.f的操作。因此,在到达所需的datamember之前,对象中有多个对象,因此typedef会有所帮助 class A { B test; A(B test1) { test = test1; } function f() { typedef t

如何在函数中键入def? 让我们考虑B类有一个int x数据包。当我尝试编译以下代码时,得到的结果是:“.”标记之前应该是初始值设定项

在本例中,一切都很简单,但对于我的代码,我将执行类似test.x.y.z.f的操作。因此,在到达所需的datamember之前,对象中有多个对象,因此typedef会有所帮助

class A
{
  B test;

  A(B test1)
  { 
    test = test1;
  }

  function f()
  {
    typedef test.x x; //how come this doesn't compile?

  }
}
x
是变量而不是类型。在C++11中,可以使用
decltype
来确定
x
的类型:

void f()
{
    decltype(test.x) x;
}
或者,您可以只声明您希望与之合作的成员的本地引用:

void f()
{
    auto& x_ref(test.x); // Or explictly state the type.
}
x
是变量而不是类型。在C++11中,可以使用
decltype
来确定
x
的类型:

void f()
{
    decltype(test.x) x;
}
或者,您可以只声明您希望与之合作的成员的本地引用:

void f()
{
    auto& x_ref(test.x); // Or explictly state the type.
}

如果要使用变量模拟
typedef
,请使用引用<代码>类型x&x=test.x

如果要使用变量模拟
typedef
,请使用引用<代码>类型x&x=test.x

类型定义为类型引入名称。
test.x
是变量,不是类型。
它是一个
int
,但它不是类型
int
本身

如果要为变量引入新名称,请使用引用


typedef为类型引入名称。
test.x
是变量,不是类型。
它是一个
int
,但它不是类型
int
本身

如果要为变量引入新名称,请使用引用

我认为你要求的是一种“速记”一长串名字内容的方法。我过去这样做的方式(如果相关)是使用参考:

struct Blah
{
  int x, y, z;
};

class X
{
   Blah *arr[10];

   X()
   {
      for(int i = 0; i < 10; i++)
      {
         arr[i] = new Blah;
      }
   }
}

class Y
{
   X var;
};


Y y;

for(int i = 0; i < 10; i++)
{
     y.var.arr[i]->x *= 4; 
     y.var.arr[i]->y *= 3; 
     y.var.arr[i]->z *= 5; 
}
struct Blah
{
int x,y,z;
};
X类
{
废话*arr[10];
X()
{
对于(int i=0;i<10;i++)
{
arr[i]=新的废话;
}
}
}
Y类
{
X变量;
};
Y;
对于(int i=0;i<10;i++)
{
y、 var.arr[i]>x*=4;
y、 var.arr[i]>y*=3;
y、 var.arr[i]>z*=5;
}
可以写为:

for(int i = 0; i < 10; i++)
{
     Blah &b = y.var.arr[i];

     b.x *= 4; 
     b.y *= 3; 
     b.z *= 5; 
}
for(int i=0;i<10;i++)
{
Blah&b=y.var.arr[i];
b、 x*=4;
b、 y*=3;
b、 z*=5;
}
现在,这更容易阅读,不是吗?

我想你想要的是一种“速记”一长串名字内容的方法。我过去这样做的方式(如果相关)是使用参考:

struct Blah
{
  int x, y, z;
};

class X
{
   Blah *arr[10];

   X()
   {
      for(int i = 0; i < 10; i++)
      {
         arr[i] = new Blah;
      }
   }
}

class Y
{
   X var;
};


Y y;

for(int i = 0; i < 10; i++)
{
     y.var.arr[i]->x *= 4; 
     y.var.arr[i]->y *= 3; 
     y.var.arr[i]->z *= 5; 
}
struct Blah
{
int x,y,z;
};
X类
{
废话*arr[10];
X()
{
对于(int i=0;i<10;i++)
{
arr[i]=新的废话;
}
}
}
Y类
{
X变量;
};
Y;
对于(int i=0;i<10;i++)
{
y、 var.arr[i]>x*=4;
y、 var.arr[i]>y*=3;
y、 var.arr[i]>z*=5;
}
可以写为:

for(int i = 0; i < 10; i++)
{
     Blah &b = y.var.arr[i];

     b.x *= 4; 
     b.y *= 3; 
     b.z *= 5; 
}
for(int i=0;i<10;i++)
{
Blah&b=y.var.arr[i];
b、 x*=4;
b、 y*=3;
b、 z*=5;
}

现在,这更容易阅读,不是吗?

我不认为您可以键入def对象或仅限于数据成员的类型您想用typedef做什么?看起来您正在尝试访问成员变量,而不是声明类型。我认为您需要仔细阅读typedef的功能。我不认为您可以只键入Def对象或数据成员类型您想用typedef做什么?看起来您正在尝试访问成员变量,而不是声明类型。我想你需要仔细阅读typedef的功能。什么是
B::x
?什么是
B::x