为什么不能在main()中定义静态成员变量?

时间:2020-04-24 00:59:08

标签: c++ static

df_dict = {f'group_{i}': pd.concat([pd.read_fsf(file, skiprows=4, header=None, engine='python') for file in chunk]) for i, chunk in enumerate(chunks)}

无法使用class test { public: static int i; int func() { return i; } }; int main() { test::i = 20; } 进行编译。

如果我创建静态变量clang: error: linker command failed with exit code 1 (use -v to see invocation),则可以在inline内定义它。或者,如果我不将其内联,则可以在类声明和main之间定义它,如下所示:

main()

为什么这样做有效,而前者却无效? 另外,为什么在class test { public: static int i; int func() { return i; } }; int test::i = 20; int main() { } 中已经声明为int的地方需要int

1 个答案:

答案 0 :(得分:2)

在函数内部,语句

test::i = 20;

是一个表达式(不是定义)。它将值20存储到test::i中。但是,如果从未定义test::i,则无法在其中存储值。

另一方面,在命名空间范围内,当您编写

int test::i = 20;

这是test::i的定义。