从同一类的专用模板的静态函数访问类模板成员

发布于 2024-12-12 22:13:51 字数 565 浏览 0 评论 0原文

我仍在学习 C++ 模板,并且遇到了有关使用以下内容从专用静态函数调用成员的问题。 GCC 抱怨:“静态成员函数中成员 C::value 的使用无效。”我搜索了这个论坛和其他一些论坛,甚至我的朋友 Google 也无法帮助我。我认为错误一定是我忽略的,因为我制作了该类的非专业版本(具有相同的静态成员函数),但我仍然遇到相同的错误。有什么想法吗?

template <typename T = const char*>
class C { };

//specialization for const char*
template <>
class C <const char*> {
  public:
    C() { }

    static void echo(int x);

  private:
    int value;
};

//error occurs here
void C<const char*>::echo(int x) {
  value = x;
}

非常感谢您提供的任何见解。

I am still learning C++ templates, and have encountered a problem regarding calling members from specialized static functions using the following. GCC complains: "invalid use of member C< const char* >::value in static member function." I have searched this forum and a few others, and even my friend Google cannot aid me. I figure the error has to be something I am overlooking, as I made a non-specialized version of the class (with the same static member function), and I still get the same error. Any ideas?

template <typename T = const char*>
class C { };

//specialization for const char*
template <>
class C <const char*> {
  public:
    C() { }

    static void echo(int x);

  private:
    int value;
};

//error occurs here
void C<const char*>::echo(int x) {
  value = x;
}

Many thanks to any insight you can offer.

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

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

发布评论

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

评论(2

七颜 2024-12-19 22:13:51

它与模板无关。

value 是一个实例成员,只有在提供 C 实例时才能访问。静态函数没有 this 实例,并且您没有使用 .-> 成员访问运算符来显式提供实例。

It has nothing to do with templates.

value is an instance member, and can only be accessed when you provide an instance of C. A static function has no this instance, and you haven't used the . or -> member access operator either to explicitly provide an instance.

冷…雨湿花 2024-12-19 22:13:51

echo() 是静态的,因此无法访问实例级字段value

要么使函数成为非静态,要么使字段成为静态。

The echo() is static an therefore cannot access the instance-level field value.

Either make the function non-static or make the field static.

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