#include "stdafx.h"
#include <iostream.h>
#include <stdio.h>class Animal
{
public:
virtual void sleep() { printf("Animal sleep!"); }
};class Dog :public Animal
{
public:
//virtual void sleep() { printf("Dog sleep!"); }};
int main(int argc, char* argv[])
{
Dog dog;
dog.sleep;   //这行 注意slepp后面没有加()号 提示: warning C4551: function call missing argument list   为什么会提示这个??
return 0;
}
 
                             

解决方案 »

  1.   

    能运行成功吗?sleep是关键字.
      

  2.   

    slepp是关键字? 真的能运行啊  不过什么也没有就是了
      

  3.   

    sleep不是关键字
    程序在语法上没有问题
    dog.sleep;是指向dog中sleep()的指针,也是合法表达式,但执行时什么都不会做
    它与以下表达式类似
    main()
    {
       int x=10;
       x;      //只是一个表达式,不执行任何代码
    }
      

  4.   

    sleep不是关键字,是API函数名
      

  5.   

    dog.sleep;是指向dog中sleep()的指针
    运行时要转换,找到对应的函数入口地址,用dog.sleep()表达才正确
      

  6.   

    没有问题的
    实际上 dog.sleep 只是一个值,并不会出现编译错误
    例如
    int i;i;
    这样也不会出错
      

  7.   

    int i;i;
    i有定义啊   可是sleep没定义啊
      

  8.   

    class Animal
    {
    public:
    virtual void sleep() { printf("Animal sleep!"); } //这里不就是sleep的定义吗?
    };
    Dog dog;
    dog.sleep; // 一个函数指针你试试:
      typedef void (Dog::*DFun)();  DFun psleep;  psleep=dog.sleep; //可将它赋给同类型指针
      

  9.   

    sleep 是函数的指;
    如:
      main()
    {
       char *c;
       c;
       char b[];
       b;
    }c,是一个字符指针,
    b[]是数组名,b是字符数组的指针,指向字符串的首地址!
    dog.sleep()是函数名,dog.sleep是指向函数的首地址!
      

  10.   

    class Animal
    {
    public:
    virtual void sleep() { printf("Animal sleep!"); } //这里不就是sleep的定义吗?
    };
    Dog dog;
    dog.sleep; // 一个函数指针你试试:
      typedef void (Dog::*DFun)();  DFun psleep;  psleep=dog.sleep; //可将它赋给同类型指针------------------
    正解,函数指针。
      

  11.   

    为什么我用Sleep(),S必须大写?
      

  12.   

    int i;i;
    i有定义啊   可是sleep没定义啊
    ---------------------------------------------
    sleep有定义,sleep是虚函数表中的一个虚函数指针
      

  13.   

    virtual void sleep() { printf("Animal sleep!"); }
    ------------------------------------------------------
    这时VTABLE中会有一个虚函数指针,该指针在未被重载时指向 CDog::sleep()