精华内容
下载资源
问答
  • C++:未定义引用静态类成员?

    千次阅读 2019-08-24 14:33:54
    错误:对‘Foo::MEMBER’未定义引用. 原因: 因为类的声明并不会进行内存空间的分配。 所以类的静态成员无法在类声明中定义。 因此,类的静态成员需要类内声明,类外定义。并且注意定义尽量不要出现在...

    先来看代码:

    #include <iostream>
    #include <vector>
    using namespace std;
    class Foo {
    public:
        static const int MEMBER = 1;
    };
    
    
    int main()
    {
    
    
        vector<int> v;
        v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'
        v.push_back( (int) Foo::MEMBER ); // OK
        return 0;
    }
    
    
    

    错误:对‘Foo::MEMBER’未定义的引用.

    原因:

    因为类的声明并不会进行内存空间的分配。

    所以类的静态成员无法在类声明中定义。

    因此,类的静态成员需要类内声明,类外定义。并且注意定义尽量不要出现在头文件中,以免造成重复定义。

    #include <iostream>
    #include <vector>
    using namespace std;
    class Foo {
    public:
        static const int MEMBER = 1;
    };
    
    const int Foo::MEMBER;
    
    int main()
    {
    
    
        vector<int> v;
        v.push_back( Foo::MEMBER );       // undefined reference to `Foo::MEMBER'
        v.push_back( (int) Foo::MEMBER ); // OK
        return 0;
    }
    
    
    

    这样就正确了.

    参考:

    1.http://rongzhixueyuan.blog.sohu.com/282264026.html

    展开全文
  • .bss段存放的是未初始化的全局变量和局部静态变量。其实更准确地说法是.bss为它们预留了空间。本来.bss的大小应该是8 bytes 然而察看.bss段的大小却是4 bytes.这是说原因呢,gcc编译器不把global_uninit_var放在...

    由《程序员的自我修养》给出的例子:

     

    在linux的elf格式中,

    .bss段存放的是未初始化的全局变量和局部静态变量。其实更准确地说法是.bss为它们预留了空间。本来.bss的大小应该是8 bytes

    然而察看.bss段的大小却是4 bytes.这是说原因呢,gcc编译器不把global_uninit_var放在任何段,只是个为定义的"common符号".(这跟编译器实现有关)

    在符号表中可以看见,这里只是预留一个未定义的全局变量符号,等到最终连接成可执行文件的时候再在.bss段分配空间。

    而编译单元内部可见的静态变量总是存放在.bss段的。

     

    在windows生成的目标文件coff格式:

    vc编译器也是这么实现的。

    gloal_uninit_var也没放在任何段,在符号表中标志为:UNDEF(未定义)

     

     

    参考文献:《linkers and loaders》 john R. Levine著

                   《程序员的自我修养》       俞甲子,石凡

     

    展开全文
  • 今天在工程中写了一个类,其中包含公有静态变量,但是通过类名调用时,总是报静态变量未定义的错误。 C++内部规定:静态成员变量在类内进行声明,在类外进行定义和初始化,在类外进行定义和初始化的时候不要出现...

    今天在工程中写了一个类,其中包含公有静态变量,但是通过类名调用时,总是报静态变量未定义的错误。
    在这里插入图片描述

    C++内部规定:静态成员变量在类内进行声明,在类外进行定义和初始化,在类外进行定义和初始化的时候不要出现static关键字和privateprotectedpublic访问规则。

    调试很久,才想起来类的静态变量 m_epollfd与m_user_count并未进行定义。

    因为类的声明并不会进行内存空间的分配。所以类的静态成员无法在类声明中定义。因此,类的静态成员需要类内声明,类外定义。并且注意定义尽量不要出现在头文件中,以免造成重复定义。

    在.cpp中添加静态变量 m_epollfd与m_user_count 的定义。编译通过。

    展开全文
  • 全局变量和静态变量

    2017-08-28 21:45:55
    定义全局静态变量:在全局变量前加个关键字static,该全局变量变为全局静态变量。全局静态变量有以下特点: (1) 在全局数据区内分配内存 (2) 如果没有初始化,其默认值为0 (3) 该变量在本文件内从...

    如果定义一个全局变量,未被初始化,则变量被默认初始化,但局部变量未被初始化,则该值未定义。(内置类型和数组一样)


    定义全局静态变量:在全局变量前加个关键字static,该全局变量变为全局静态变量。全局静态变量有以下特点:

    (1) 在全局数据区内分配内存

    (2) 如果没有初始化,其默认值为0

    (3) 该变量在本文件内从定义开始到文件结束可见

    定义局部静态变量:在局部静态变量前面加上关键字static,该局部变量便成了静态局部变量。静态局部变量有以下特点:

    (1) 该变量在全局数据区分配内存

    (2) 如果不显示初始化,那么将被隐式初始化为0

    (3) 它始终驻留在全局数据区,直到程序运行结束

    (4) 其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

    定义静态函数:在函数的返回类型加上static关键字,函数即被定义成静态函数。静态函数有以下特点:

    (1) 静态函数只能在本源文件中使用

    (2) 在文件作用域中声明的inline函数默认为static

    说明:静态函数只是一个普通的全局函数,只不过受static限制,他只能在文件坐在的编译单位内使用,不能呢个在其他编译单位内使用。

    在C++语言中新增了两种作用:定义静态数据成员或静态函数成员

    一, 定义静态数据成员。静态数据成员有如下特点:

    (1) 内存分配:在程序的全局数据区分配

    (2) 初始化和定义:静态数据成员定义时要分配空间,所以不能在类声明中初始化。

    二, 静态成员函数。静态成员函数与类相联系,不与类的对象相联系。静态成员函数不能访问非静态数据成员。原因很简单,非静态数据成员属于特定的类实例,静态成员函数主要用于对静态数据成员的操作。

    (1) 静态成员函数没有this指针。

    展开全文
  • C++静态变量

    千次阅读 2019-09-11 11:41:36
    静态变量的静态指在整个程序生命周期的地址静止不变。也就是说在整个程序里面只保存有一份拷贝。static关键字允许它在不同的函数调用间保持它的值。如果一个静态变量被访问后值改变,它就会保持新的值。 在C++中,...
  • 2、C++全局静态变量的析构销毁顺序是未定义的,特别是在多线程环境,多dll环境下,特别复杂,但是在某个编译器下,析构顺序是一定,按着构造的反顺序析构,其他都是随机,不确定的。 3、堆、栈、静态存储区 1...
  • undefined reference to ***这个链接错误的花样总是层出不穷(more),这一次是找不到类... 类静态成员变量 在文件A.h中声明了类A与类B: class A { friend class B; static int pa; // 注:这里把成员变量
  • 静态变量在整个程序结束后才被释放,内存在编译时分配,初始化只执行一次,不初始化默认为0 全局变量在整个程序结束后才被释放,只要在{}外的都是全局变量,不初始化默认为随机数,在程序任意地方都可以使用全局变量...
  • 【C++】静态变量定义

    千次阅读 2020-03-17 18:54:18
    类内静态变量需在外部进行声明 为什么? 因为静态成员属于整个类,而不属于某个对象,如果在类内初始化,会导致每个对象都包含该静态成员,这是矛盾的。 如果不增加int A::count = 0 ; //变量定义,在编译的时候将...
  • C/C++静态变量

    2013-11-12 11:19:01
    (1)静态局部变量在函数内定义,但不象自动变量那样,当调用时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的生存期为整个源程序。  (2)静态局部变量的生存期虽然为整个源程序,但是其作用域...
  • 静态变量static(C)

    万次阅读 多人点赞 2018-12-19 15:19:13
    静态变量在函数间调用时保持他们的值不变。 它的语法结构为: static c_type data_name; 其中,c_type 为基础的数据类型,data_name是变量名。 生存期 生存期的概念是在程序执行过程中体现的。程序开始执行后,对所...
  • 静态变量static的理解

    2020-04-25 21:11:10
    静态变量在函数间调用时保持他们的值不变。 它的语法结构为: static c_type data_name; 其中,c_type 为基础的数据类型,data_name是变量名。 生存期 生存期的概念是在程序执行过程中体现的。程序开始执行后,对所...
  • C++类中的静态变量

    千次阅读 2017-10-15 23:45:30
    可以通过以下几个例子更形象的说明这个问题://test.cpp #include class A { public: static int a; //声明但未定义 }; int main() { printf("%d", A::a);...这是因为静态成员变量a未定义,也就是还没有分
  • 数据段:数据段存的是数,像全局变量就是存在数据段的 代码段:存的是程序代码,一般是只读的。 栈(stack):先进后出。C语言中局部变量就分配在栈中。   局部变量  普通的局部变量定义的时候直接定义或者在...
  • C++:外部变量和静态变量

    千次阅读 2018-03-21 19:38:06
    外部变量的定义和声明是不同的。外部变量的定义只能有一次,它的位置在所有函数之外,而统一文件中的外部变量的声明可以有多次,它的位置可以在函数之内,也可以在函数之外。 系统根据外部变量的定义,而不是声明,...
  • PHP_CodeSniffer静态分析工具插件,可添加对有问题的变量使用情况的分析。 在未定义的情况下使用变量时发出警告。 (嗅探代码: VariableAnalysis.CodeAnalysis.VariableAnalysis.UndefinedVariable ) 如果在...
  • ①BSS(Block by Start Symbol) :通常指用来存放程序中未初化的全局变量和静态变量的一块内存区域。BSS段属于静态内存分配。  特点是:可读写的,在程序执行之前BSS段为自动清零,所以未初始的全局变
  • 变量又分为局部变量和全局变量,但他们都在内存的静态区,静态变量只能被初始化一次。 静态全局变量,作用域仅限于被定义的文件中,其他文件即使用extern声明也没法使用它。准确地说作用域是从定义之处开始,到文件...
  • 我们知道C++类的静态成员变量是需要初始化的,但为什么要初始化呢。 其实这句话“静态成员变量是需要初始化的”是有一定问题的,应该说“静态成员变量需要定义”才是准确的,而不是初始化。 两者的区别在于:初始化...
  • 下面的是前四步,我在第四步的时候出现问题:环境变量 sysgen 未定义。具体如下: 第一步:为自己的Bootloader创建一个目录 我的目录设置如下: C:\WINCE500\PLATFORM\MyPlatform\Src\Bootloader\Eboot 第二步:...
  • 您可能感兴趣的文章:PHP Global定义全局变量使用说明PHP Global变量定义当前页面的全局变量实现探讨php 静态变量与自定义常量的使用方法PHP 变量的定义方法PHP教程 预定义变量PHP教程 变量定义PHP 变量定义和变量...
  • 静态变量编译之后,被编译器放到了可执行文件的哪个字段? 以下实验在ubuntu10.04上完成,使用gcc4.4.3。 测试源码如下: #include int g_val_init = 45; int g_val_uninit; static int s_global_...
  • 静态变量只有在定义时才会被分配内存,因此使用未声明的或者声明了未定义的变量程序都会运行失败。未声明时编译时失败,未定义是运行时失败。 2 静态成员数中的普通变量无论c还是java都是普通变量,需要定义后...
  • 然后在静态库中libb.a中,某些结构体或者变量在liba.a中声明的,此时b库依赖于a库。 然后链接的时候,会出现两个库之间的相互依赖问题。链接涉及到顺序问题,当先链接a库时,会出现函数未定义的情况,先链接b库是,...
  • 在C++11标准中,要求局部静态变量初始化具有线程安全性。描述(在标准草案的6.7节中): such a variable is initialized the first time control passes through its declaration; such a variable is ...
  • 一个由C/C++编译的程序占用的内存分为以下几个部分  1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。...3、全局区(静态区)(static)—,全局变量和静态变量的存储是
  • 内部类的对象 脱离了其 外围类的对象 就不会存在, 静态变量 的作用就是 让该类的所有对象共享一个状态。 这个类的所有对象都可以获取和修改这个状态。如果仅仅是这个目的,就可以推出这个状态也是所有外部对象所...
  • 比如 class Test{ static String name;...和不定义class直接变量f方法写在dart文件里有什么区别 如下: String name; String password; method(){ ..... } 这两者变量方法都是公共的,请问有什么区别
  • 昨天在修改项目函数功能时,在其中一个类中添加了一个静态成员变量和两个静态成员函数,结果在链接时出现一个非常典型的错误:“The follwing symbols referenced in processor “p0” could not be resolved:Class:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 31,827
精华内容 12,730
关键字:

未定义的引用静态变量