c ++中的静态成员函数错误

时间:2015-03-31 14:09:19

标签: c++

如果静态类成员和静态类函数具有类范围,那么为什么我无法访问显示功能(它显示错误)?如果代替显示功能我写入计数它显示正确的值,即0

#include <iostream>
#include <string> 

using namespace std;

class Person
{
    public:
     static int Length;
     static void display()
     {
        cout<< ++Length;
     }
};

int Person::Length=0;

int main()
{
   cout<< Person :: display(); //error
   // Person :: Length shows correct value
   return 0;
}

2 个答案:

答案 0 :(得分:6)

可以调用display函数,您的错误是您尝试将结果输出到coutPerson::display不返回任何内容,因此错误。

只需改变一下:

cout<< Person :: display(); //error

对此:

Person::display();

答案 1 :(得分:0)

如果要将对象传递给流,则需要定义一个合适的运算符&lt;&lt;,如下所示:

#include <iostream>
#include <string> 

using namespace std;

class Person
{
    public:
     class Displayable {
         template< typename OStream >
         friend OStream& operator<< (OStream& os, Displayable const&) {
             os << ++Person::Length;
             return os;
         }
     };
     static int Length;
     static Displayable display() { return {}; }
};

int Person::Length=0;

int main()
{
   cout<< Person :: display(); //works
   // Person :: Length shows correct value
   return 0;
}