【发布时间】:2018-11-16 17:53:03
【问题描述】:
前阵子有人问这个question,关于熟悉的
error: 'static' can only be specified inside the class definition
错误。
在我当前的用例中,我正在从一个非常 MSVC 的项目中迁移出来,其中几乎所有代码都是使用 MSVC 编译的,并针对 Android 进行交叉编译。
我注意到没有 MSVC 错误,尤其是关于在类内部(外部)定义的静态类方法的警告。我错过了什么吗?为什么至少没有警告?
编辑
为了澄清,我问为什么对于这样的代码没有适当的 MSVC/MSVS 警告(取自上面的链接):
class Foobar {
public:
static void do_something();
};
static void Foobar::do_something() {} // Error!
int main() {
Foobar::do_something();
}
编辑
对不起每一个人!这个样本不起作用!我很抱歉。
class Foobar {
public:
template<class Y>
static int do_something();
};
template<class Y>
static int Foobar::do_something() {return 1;} // Error!
int main() {
return Foobar::do_something<double>();
}
这是MSVC 19.14(成功)和GCC 4.12(失败)的输出。
【问题讨论】:
-
我们需要一个minimal reproducible example,您会在其中收到警告。
-
在类之外有静态函数定义是完全可以(并且正常)的 - 但在这种情况下你不能将它们标记为
static。 -
从外部定义中删除
static关键字?我不清楚你想在这里问什么 -
@tkausl 帖子的超链接中提供了一个这样的例子。
标签: c++ visual-studio visual-c++ static