在C ++中访问静态私有变量时出错?

时间:2015-04-30 20:00:22

标签: c++ class

我希望访问类中声明的静态变量。根据{{​​3}}建议,我定义了两个文件,

在test.h中

Import-Csv 'C:\input.csv' | Export-Csv 'C:\output.csv' -NoType -Delimiter '|'

在test.cpp中:

class foo
{
    private:
        static int i;
};

但是,当我执行#include "test.h" int main(int argc, char* argv[]){ int foo::i = 0; } 时,编译器仍会生成此错误。我正在使用mac:

make test

我该如何解决?

3 个答案:

答案 0 :(得分:4)

  1. int foo::i = 0;属于全球范围,而不属于main

  2. 由于它是privatemain将无法访问它。您必须使访问说明符限制较少(即public)或为其创建访问者函数。

答案 1 :(得分:3)

  

... static数据成员的定义应出现在命名空间中   封闭成员类定义的范围。 ...

(C ++ 14 standard,[class.static.data] / 1)。

您无法像在尝试的那样在块范围内定义静态成员。

如果您希望main有权访问私有成员,请编写公共访问者函数。或者让main成为朋友(可能是个坏主意)。

答案 2 :(得分:0)

在此添加其他答案:

如果常量静态成员是整数或枚举类型,则可以在类定义中初始化它们:

struct X {
const static int n = 1;
const static int m{2}; // since C++11
};