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: エラー: メンバー関数が存在しません。ここで何が問題なのですか?

4

2 に答える 2

1

デバッガーで監視しようとしたときにこのエラーが発生する理由については、ここでExpression Evaluator Error CXX0052を参照してください。

インライン関数展開をオフにするために編集する Visual Studio プロパティ:

ここに画像の説明を入力

「インライン関数展開」を「デフォルト」から「無効(/Ob0)」に変更します。

于 2013-05-23T20:27:40.080 に答える
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 に答える