将一个类声明为静态的?

3

背景:

我正在学习edX | 中级C++课程。虽然这门课是由微软主导的,但它并没有说明你需要使用他们的IDE Visual Studios才能成功完成。我只有一台Mac电脑,所以我使用Xcode完成了入门课程,完全没有问题。

问题:

在中级课程的第一个模块中,它说明您可以将类声明为静态,如下所示:

// Math.h
// Header file for the Math class

#pragma once

// Math class definition
static class Math
{
    public:

    // given base and exponent, calculate value
    static int Math::pow(int base, int exp);

};

Xcode标记的错误内容如下:

'static'不允许在类型声明中使用

根据之前在SO上问过的一个问题(链接为here),这是不可能实现的,但我不确定自那个问题在2008年回答以来是否有所改变,或者这是特定于编译器/VS功能的,由微软添加以混淆人们。


1
如果您只想在类中使用公共静态成员函数,那么可以使用命名空间。关于您的问题,在C++中将链接说明符(如static)添加到类或结构中从未是有效的做法。 - Some programmer dude
谢谢你们两位。我刚刚做了一点谷歌搜索,明白了你们的意思。主要问题是我猜这在C++中不可能实现?如果是这样,那么为什么微软还要教这个呢? - Kitson88
关于微软的评论...这是 Visual Studio 的一个功能吗? - Kitson88
4
这可能是C++/CLI的一个特性?C++/CLI是C++的扩展变体,带有.NET和许多非可移植和非标准功能。 - Some programmer dude
1
请注意,在Math::pow声明中的Math::限定符也是不必要的,这也应该导致编译错误。 - Fatih BAKIR
显示剩余9条评论
2个回答

3
在这种情况下,static是无效的。一种替代方法是使用全局静态成员,但类本身是无效的。
一个类似的语法用法是:
static class Math
{

    public:

    // given base and exponent, calculate value
    static int Math::pow(int base, int exp);

} math;  // <---- note object

在这种情况下,对象math静态的,而不是类本身。

谢谢你。我认为去掉 static 关键字并将我需要的方法设为静态会更有意义(也更易读)。 - Kitson88

1

只需在类之前删除static关键字。练习中的所有内容仍然以完全相同的方式运作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接