是否可以向C ++结构添加静态变量?

时间:2009-07-13 16:56:24

标签: c++

尝试向我的struct添加静态变量时出现以下错误:

  

模块中未定义的Symbole s2 :: aa   file_name.cpp

s2是结构的名称,aa是静态变量。 我使用的编译器是Turbo C ++ 3.0。

如何解决此错误?

6 个答案:

答案 0 :(得分:13)

我认为您可能忘记为静态变量定义存储空间:

int C::v = 0;

答案 1 :(得分:6)

C 中的结构中不允许使用静态变量,因为C要求将整个结构元素放在一起。要从结构中获取元素值,请按元素与结构起始地址的偏移量进行计数。

但据我所知,你可以在C ++结构中拥有一个静态成员。您是否收到特定错误(哪个编译器?)

答案 2 :(得分:5)

为什么这么说?在g ++ 4.1.2下,这编译:

#include <iostream>

struct Test
{
   static int test; // declare (usually in header file)
};

int Test::test = 8; // define (usually in source file)

int
main()
{
   std::cout << Test::test << std::endl;
   return 0;
}

答案 3 :(得分:4)

C ++结构中允许使用静态变量 (正如您所说,它们只是具有不同默认访问说明符的类)。

然而,在C结构中,静态变量不允许

答案 4 :(得分:3)

这有效......

typedef struct _X
{
    static int x; // declare (usually in header file)
} X;

int X::x = 1; // define (usually in source file)

void _tmain(int argc, _TCHAR* argv[])
{
    printf("%d", X::x);
}

答案 5 :(得分:0)

在C ++结构中,您可以使用与类相同的静态变量。

但是你不能在C结构中使用静态变量。 因为在c中,我们不能使用结构名称访问静态变量。在c ++中,我们可以使用类名访问静态成员变量,如下所示。

类名:: staticVariableName

'C'结构不提供这样的设施,但c ++结构确实如此。