函数模板:类型名声明

发布于 2024-11-02 16:59:15 字数 305 浏览 0 评论 0原文

在 GCC 上,以下给出了一个错误: no type named 'x' in 'struct Type'

在 VC++ 上,它抱怨 p 未声明

struct Type
{
   static int const x = 0;
};

template <class T> void Func()
{
   typename T::x * p; // p to be pointer
}

int main()
{
   Func<Type>();
}

On GCC, The following gives me an error: no type named 'x' in 'struct Type'

On VC++, It complains about p being undeclared

struct Type
{
   static int const x = 0;
};

template <class T> void Func()
{
   typename T::x * p; // p to be pointer
}

int main()
{
   Func<Type>();
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

jJeQQOZ5 2024-11-09 16:59:15

T::x 变为 Type::x,它是一个 int,而不是类型。

您已告诉编译器 T::x 使用 typename 命名类型。实例化 Func 时,T::x 不是类型,因此编译器会报告错误。

T::x becomes Type::x, which is an int, not a type.

You've told the compiler that T::x names a type by using typename. When Func<Type> is instantiated, T::x is not a type, so the compiler reports an error.

◇流星雨 2024-11-09 16:59:15

由于 Type::x 不是一个类型,而是一个,因此当您编写 typename 时,您'告诉编译器在 Type 中查找名为 x 的嵌套类型,但它不能。因此,GCC 表示“struct Type”中没有名为“x”的类型,这比 VC++ 生成的消息更有帮助。

Since Type::x is not a type, rather a value, so when you write typename, you're telling the compiler to find a nested type with name x inside Type, but it couldn't. Hence the GCC says no type named 'x' in 'struct Type' which is more helpful than the message generated by VC++.

过气美图社 2024-11-09 16:59:15

在C++11中,using关键字可用于类型别名

struct Type
{
    using x = static int const;
};

In C++11, the using keyword can be used for type alias

struct Type
{
    using x = static int const;
};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文