3

这是我的代码的简化版本:

#include <iostream>
using namespace std;

enum Shapes {circle, rectangle};

class Shape {
public:
  virtual Shapes getType() const = 0;
};
class Circle : public Shape {
public:
  Shapes getType() const {
    return circle;
  }
};
class Rectangle : public Shape {
public:
  Shapes getType() const {
    return rectangle;
  }
};
int main() {
  Shape *sPtr = new Circle;
  cout << "Circle type: " << sPtr->getType() << endl;
  sPtr = new Rectangle;
  cout << "Rectangle type: " << sPtr->getType() << endl;
  return 0;
}

当我尝试使用调试器观看 sPtr->getType() 时,它显示 CXX0052: Error: member function not present。这里有什么问题?

4

2 回答 2

1

调试器只能调用一小部分简单函数。您的示例中的函数被认为过于复杂。

另外,请查看以下主题:在使用 Visual Studio 2005 进行调试时调用函数?

例如,这个:

enum Shapes {circle, rectangle};

class Circle {
public:
  Shapes getType() const
  {
    return circle;
  }
};

int main() {
  Circle *sPtr1 = new Circle;
  auto t = sPtr1->getType();
  return 0;
}

在 QuickWatch 中运行良好。

于 2013-05-23T21:13:22.070 回答
1

请参阅此处Expression Evaluator Error CXX0052以了解当您尝试在调试器上观看时出现此错误的原因。

要编辑的 Visual Studio 属性以关闭内联函数扩展:

在此处输入图像描述

将“内联函数扩展”从“默认”更改为“禁用 (/Ob0)”。

于 2013-05-23T20:27:40.080 回答