3

とC++の静的メソッド...私はこの問題を抱えている構造体parametrs

私は私の構造体を持っている:

typedef struct Mystruct{ 
    float a; 
    float b; 
} 

と静的メソッド:

float static MyStaticMethod(MyStruct a, MyStruct b); 

私は、このメソッドを呼び出すとき:

Mystruct s; 
s.a = 1; 
s.b = 2; 

Mystruct t; 
t.a = 1; 
t.b = 2; 

MyClass.MyStaticMethod(s,t); 

私はこのエラーをc ompile時間:あなたはスコープ解決演算子使用してそれを呼び出す必要が

Error 51 error C2228: left of '.MyStaticMethod' must have class/struct/union 

Error 50 error C2275: 'MyClass' : illegal use of this type as an expression 
+1

'Mystruct'の定義に' typedef'を使用することは無意味です。私はあなたがそれを削除することをお勧めしますが、C++で行う*小さな違いが本当に必要な場合は、typedefの名前を指定する必要があります。 'typedef struct MyStruct {..} MyStruct;'。もう一度、私はちょうどそれを落とすだろう。詳細[ここ](http:// stackoverflow。com/a/1675446/36565)、主な焦点がCであっても、その答えはC++ –

答えて

9

:使用してから離れて

MyClass::MyStaticMethod(s,t); 
     ^^ 
1

を "MyClassの:: MyStaticMethod(S、T)は、"、あなたはまた、静的に呼び出すことができますインスタンス上の方法は:

MyClass instance; 
instance.MyStaticMethod(s,t); 

、それは読んでください:

typedef struct { 
    float a; 
    float b; 
} Mystruct; 

(新しい型名が最後になる)

1

キーワードstaticは、すなわち(C++言語でを過負荷になっていますそれは複数の意味を持つ)。あなたが提示されたコードで:

struct MyStruct { 
}; 
static float MyStaticFunction(MyStruct, MyStruct); 

staticの意味は、内部結合(すなわちシンボルは、現在の翻訳単位の使用可能な外できなくなり、これはヘッダ内に存在する場合、各翻訳を含みます。ユニットは、それが機能の自身のコピーで取得します。この場合、使用量はフリー機能のことです。

MyStruct a,b; 
float f = MyStaticFunction(a, b); 

何を意味することは、この代替シナリオでstaticを使用していたこと、それを使用しようとする試みからのようだ:

struct MyStruct { 
    static float MyStaticFunction(MyStruct, MyStruct); 
}; 

ここで、それは異なる意味を持っています:メンバーはクラスに属し、特定のインスタンスではありません。この場合、関数は次のいずれかの方法で呼び出すことができ、最も一般的なものは次のとおりです。

MyStruct a,b; 
float f = MyStruct::MyStaticFunction(a, b); 

言語でも(私はそれを使用してお勧めしません、それは混乱するかもしれない)ことができますにもかかわらず:

それはaメンバー関数を呼び出すのではなく、クラスの静的メンバ関数を呼び出すように見えるので、混乱が生じた
float f a.MyStaticFunction(a,b); 

関連する問題