我一直试图理解在c ++中初始化静态类成员几个小时了。从概念上讲,它似乎很简单。静态成员属于类,而不是对象,因此需要使用范围运算符进行访问。此外,在类中,静态成员函数只能访问其他静态成员/成员函数。
我尝试了几十种简单代码的排列,以便编译并开始搜索堆栈溢出和其他教程站点。我插入了几十个例子,例如:
class X {
public:
static int x;
static void f(int);
};
void X::f(int z) {x=z;}
int main(){}
没有编译。如果他们都错了。他们都是错误的。我得到一个未定义的引用'X :: x'。这就像我发现的一个例子一样简单。是否存在语法错误,或者是否存在编译器问题?
编译器信息:
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/7.1.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure --prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared --enable-threads=posix --enable-libmpx --with-system-zlib --with-isl --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --disable-libssp --enable-gnu-unique-object --enable-linker-build-id --enable-lto --enable-plugin --enable-install-libiberty --with-linker-hash-style=gnu --enable-gnu-indirect-function --disable-multilib --disable-werror --enable-checking=release
Thread model: posix
gcc version 7.1.1 20170621 (GCC)