【问题标题】:static private variables not working in c++ [duplicate]静态私有变量在c ++中不起作用[重复]
【发布时间】:2013-06-26 05:47:01
【问题描述】:

我不明白为什么静态私有变量在我的代码中不起作用!代码如下:

#include<iostream>
#include<string>
using namespace std;
class KittyCat{
private:
int a;
string t;
static int count;
public:
KittyCat(){
    a=0;
    t="NULL";
    count++;
}
void set(int i, string m){
    a=i;
    t=m;
}
void show(){
    cout << "A is: "<< a <<" T is: " << t <<"\n\n";
}
void totalCount(){
    cout <<"Total Counts: "<< count <<"\n\n";
}

};
void main(){
KittyCat tech, review, article, photo, video;
tech.set(10, "Technology");
review.set(85, "Reviews");
article.set(54, "Articles");
article.show();
article.totalCount();
}

有什么想法吗?

【问题讨论】:

  • 与其说(或除此之外)“不工作”,不如说您期望什么行为,以及您观察到什么行为。
  • @Navin,不,'count'默认初始化为0。
  • 你已经声明 count,但你从来没有定义它。在KittCat 的定义之后,main 之前添加一行int KittyCat::count;
  • @Navin,第二次,静态变量默认初始化为0!
  • @user1764961 这就是我所说的......我提到的“初始化”这个词是错误的,它应该是“定义”。就像杰瑞的例子一样。

标签: c++ static


【解决方案1】:

甚至 int KittyCat::count;也会奏效的。静态数据成员的默认值为 0。静态数据成员在类内声明,但在类定义之外定义。

【讨论】:

    【解决方案2】:
    int KittyCat::count = 0;
    

    必须在main之前添加,因为所有的静态数据成员在使用前都必须初始化。

    【讨论】:

    • 初始化是个好主意,但考虑到 cmets 中对这个问题的讨论,您可以多考虑​​一下这个答案。
    【解决方案3】:

    知道了:

    #include<iostream>
    #include<string>
    using namespace std;
    class KittyCat{
    private:
    int a;
    string t;
    static int count;
    public:
    KittyCat(){
        a=0;
        t="NULL";
        count++;
    }
    void set(int i, string m){
        a=i;
        t=m;
    }
    void show(){
        cout << "A is: "<< a <<" T is: " << t <<"\n\n";
    }
    void totalCount(){
        cout <<"Total Counts: "<< count <<"\n\n";
    }
    
    };
    int KittyCat::count=0;
    void main(){
    KittyCat tech, review, article, photo, video;
    tech.set(10, "Technology");
    review.set(85, "Reviews");
    article.set(54, "Articles");
    article.totalCount();
    }
    

    【讨论】:

    • 这应该是什么?你至少能解释一下问题是什么吗?您能否评论一下您的问题是否与可能重复的问题所描述的相同?
    • 程序运行并报告了Total Counts: 5。对我来说看上去很好。你的期望是什么?什么对你“不起作用”?
    • 这不是回答问题的正确方式,尤其是如果是你自己的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多