我在程序中有错误来计算具有静态变量的对象总数

时间:2016-08-03 05:18:54

标签: c++

--libs interpreter

编译错误:[错误]无法声明成员函数'static void Sample :: showCount()'具有静态链接[-fpermissive]

4 个答案:

答案 0 :(得分:2)

删除静态关键字

void Sample::showCount(){    
    cout<<"Total No. of Objects :"<<count;
}
类成员函数声明中的

static关键字与函数定义中的static关键字具有不同的含义。前者告诉该函数不需要该类的实例(不获取this指针),后者定义静态链接:文件本地,该函数只能在此特定文件中访问。 / p>

您还缺少计数的定义。您需要在main之前的某个地方找到一条线:

int Sample::count = 0;
...
main() {
...
}

答案 1 :(得分:0)

class Sample
{ ...
    static void showCount();
};

static   void Sample::showCount(){    
    cout<<"Total No. of Objects :"<<count;
}
// You can void instead of static, because you are not returning anything.

这是不正确的。您不需要第二个static

答案 2 :(得分:0)

在C ++中声明静态成员函数时,只在类定义中将其声明为(undo-boundary)。如果您在类定义之外实现该功能(就像您一样),请不要在那里使用static关键字。

在类定义之外,函数或变量上的static关键字表示符号应具有“静态链接”。这意味着只能在源文件(翻译单元)中访问它。当所有编译的源文件链接<时,不会共享static符号/ em>在一起。

如果您不熟悉术语“翻译单元”,请参阅this SO question

你还有另外一个问题,Saurav Sahu提到过:你声明了静态变量static但从未定义它。在类定义之外添加:

static int count;

答案 3 :(得分:0)

#include <iostream>
using namespace std;
class Sample
{
    int x;
public:
    static int count;
    void get();
    static void showCount();
};
int Sample::count = 0;
void Sample::get()
{
    cin >> x;
    ++count;
}
void Sample::showCount(){
    cout << "Total No. of Objects :" << count;
}
int main()
{
    Sample s1, s2;
    s1.get();
    s2.get();
    Sample::showCount();
    return 0;
}