c++代码小问题有代码

下面的c++代码在VS上走不了,(别的编译器能走)

#include 
using namespace std;
class Base {

public:

    virtual void f() { cout << "Base::f" << endl; }

    virtual void g() { cout << "Base::g" << endl; }

    virtual void h() { cout << "Base::h" << endl; }

};#include 
using namespace std;
class Base {

public:

    virtual void f() { cout << "Base::f" << endl; }

    virtual void g() { cout << "Base::g" << endl; }

    virtual void h() { cout << "Base::h" << endl; }

};
typedef void(*Fun)(void);

int main()
{
Base b;

Fun pFun = NULL;

cout << "虚函数表地址:" << (int*)(&b) << endl;
cout << "虚函数表地址:" << (&b) << endl;
cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;   //指针的指针

// Invoke the first virtual function

pFun = (Fun)*((int*)*(int*)(&b+0));

pFun();
    return 0;
}
typedef void(*Fun)(void);

int main()
{
Base b;

Fun pFun = NULL;

cout << "虚函数表地址:" << (int*)(&b) << endl;
cout << "虚函数表地址:" << (&b) << endl;
cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;   //指针的指针

// Invoke the first virtual function

pFun = (Fun)*((int*)*(int*)(&b+0));

pFun();
    return 0;
}

代码重复,去掉重复部分。

img

#include <iostream>
using namespace std;
class Base {

public:

  virtual void f() { cout << "Base::f" << endl; }

  virtual void g() { cout << "Base::g" << endl; }

  virtual void h() { cout << "Base::h" << endl; }

};
typedef void(*Fun)(void);



int main()
{
  Base b;

  Fun pFun = NULL;

  cout << "虚函数表地址:" << (int*)(&b) << endl;
  cout << "虚函数表地址:" << (&b) << endl;
  cout << "虚函数表 — 第一个函数地址:" << (int*)*(int*)(&b) << endl;   //指针的指针

  // Invoke the first virtual function

  pFun = (Fun) * ((int*)*(int*)(&b + 0));

  pFun();
  return 0;
}