尝试向我的struct添加静态变量时出现以下错误:
模块中未定义的Symbole s2 :: aa file_name.cpp
s2
是结构的名称,aa
是静态变量。
我使用的编译器是Turbo C ++ 3.0。
如何解决此错误?
答案 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 ++结构确实如此。