--libs interpreter
编译错误:[错误]无法声明成员函数'static void Sample :: showCount()'具有静态链接[-fpermissive]
答案 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;
}