-2
class Shapemaker
{
public:
  static Shape * shapeCreate(CDrawView::shape sh);
};

私の CDrawView クラスの列挙型は

enum shape{line, rect, elli};
shape current_shape;

私が呼び出すShapemaker::shapeCreate(current_shape)と、エラー c2653 が表示されますCDrawView: is not a class or namespace name onshapemaker.h

4

5 に答える 5

1

これはおそらく最も簡単なことです:

class Shapemaker{
    public:
    enum Color { //your colors here }
};

class Otherclass{
    void fun(Shapemaker::Color);
};

コンパイラが Shapemaker をクラス名として認識しない場合、Otherclass を宣言する前にヘッダー ファイルをインクルードしていないと思われます。

于 2013-03-28T21:35:26.420 に答える
0

最終的には名前空間の問題です。この質問への回答も見てくださいenum。関数のパラメーターリストでキーワードを使用しないでください。適切な名前空間で列挙名を直接使用してください。

列挙型の名前空間 - ベスト プラクティス

于 2013-03-28T21:18:27.603 に答える
0

それenumが他のクラスのメンバーである場合、それを として参照できますがnameoftheClass::Color、公開されている必要があります。

void function(nameoftheClass:Color input);
于 2013-03-28T21:15:46.313 に答える
0

次のようにするとします。

class C {
    public:
        enum E {
            HERP,
            DERP
        };
 };

その列挙型を取る関数は次のようになります。

void foo(C::E e) {
   // do stuff with e
}
于 2013-03-28T21:16:21.380 に答える
0

色変数の列挙型を渡そうとしましたが、「nameoftheclass」がクラスまたは名前空間ではないというコンパイル エラーが表示されます

使用する前に宣言を配置する必要があります。つまり、適切なヘッダー ファイルが必要です。

MyClass.h

class MyClass {
    public:
        enum Color {
            Red,
            Green,
            Blue
        };
};

MyOtherClass.h

#include "MyClass.h" // This is required.

// Now you can use MyClass::Color freely.
于 2013-03-28T21:25:33.567 に答える