为了账号安全,请及时绑定邮箱和手机立即绑定

新手求助,c++静态函数调用的问题

新手求助,c++静态函数调用的问题

C C++
Leo_clip 2017-03-03 00:11:52
#include<iostream> using namespace std; class A{ private: static int x; public: A(int a) { x=a; } static void print(); }; void A::print() { cout<<x<<endl; }   int main() { A p1(1); A::print(); }错在哪里?感觉是static x 的定义问题,求解
查看完整描述

3 回答

已采纳
?
MinRam

TA贡献87条经验 获得超24个赞

C++类的静态成员变量是需要定义的,即 分配内存。

如果没有分配空间,就无法访问到静态成员。

调试方法:

int A::a;  // 添加在类的定义部分,使static int a 有定义
              // 和 void A::print()  函数的定义,是同样的道理


查看完整回答
反对 回复 2017-03-03
?
__YXQ__

TA贡献48条经验 获得超15个赞

静态成员需在类外部初始化

#include <iostream>
using namespace std;

class A{

private:
    static int a;
public:
    A( int x ){
        a = x;
    }
    static void print();
};
void A ::print(){
    cout<<a<<endl;
}

int A::a = 0;
int main(){
    A p(1);
    A::print();

    return 0;
}


查看完整回答
反对 回复 2017-03-03
?
onemoo

TA贡献883条经验 获得超454个赞

static成员函数只能访问static成员变量。x并不是static的,所以报错。

查看完整回答
反对 回复 2017-03-03
  • Leo_clip
    Leo_clip
    把a改成static还是不行啊
  • Leo_clip
    Leo_clip
    把x说错了
  • onemoo
    onemoo
    接上,刚才的回复中有一点不准确:可以在类定义内同时提供初值的static成员变量,不仅需要初值是整型常量,该static成员变量也要是整型常量类型(static const或static constexpr)。即便是可以在类定义内提供了初值,一般也要在类定义外再定义一次该成员变量(不用写初值了),否则的话在某些情况下编译器仍会报“找不到定义”错误。
点击展开后面1
  • 3 回答
  • 1 关注
  • 1914 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信