C++ 如何在typedef中使用模板化类的数据成员 模板 结构A{ B型; } 样板 结构A { typedef双字型; }; 样板 B func() { A::键入my_type; my_型tmp; }

C++ 如何在typedef中使用模板化类的数据成员 模板 结构A{ B型; } 样板 结构A { typedef双字型; }; 样板 B func() { A::键入my_type; my_型tmp; },c++,C++,此代码不使用g++编译器编译。错误消息是: 错误:模板参数列表太少 谁能解释一下吗 谢谢和问候, Van sal首先,我为所讨论的错误感到抱歉。正确的问题应该是: template <class T> struct A { typedef B type; } template<> struct A<double> { typedef double type; }; template<typename T, typename

此代码不使用g++编译器编译。错误消息是:

错误:模板参数列表太少

谁能解释一下吗

谢谢和问候,
Van sal

首先,我为所讨论的错误感到抱歉。正确的问题应该是:

template <class T>
struct A {  
    typedef B type;
}


template<>
struct A<double> 
{
    typedef double type;
};


template<typename T, typename U>
B<U> func()
{
   A<U>::type my_type;
   my_type tmp;
}
模板
结构A{
B型;
}
样板
结构A
{
typedef双字型;
};
样板
void func()
{
typedef A::键入my_type;
my_型tmp;
}
这里主要的问题是编译器对语句感到困惑

template <class T>
struct A {  
   typedef B type;
 }


template<>
struct A<double> 
{
   typedef double type;
};


template<typename T, typename U>
void func()
{
  typedef A<U>::type my_type;
   my_type tmp;
}
typedef A::type my_type;
它是类的数据成员还是其类型。所以我们必须明确地说它是一种类型。 所以用下面的语句替换上面的语句

typedef A<U>::type my_type;
typededef typename A::type my_type;

可能按照您调用
func
的方式,请添加代码的这一部分。什么是
B
,到处都在使用?我们是否只需猜测
B
在所有这些中是什么?发布实际的代码,包括相关的模板/类如何?您使用
B
一次带模板参数,一次不带模板参数。另外,在
A::键入my_type
您正在声明一个名为
my_type
的变量,然后继续使用它,就好像它是一个类型名一样。
typdedef typename A<U>::type my_type;