3

i have this problem...

i have a my struct:

typedef struct Mystruct{
  float a;
  float b;
}

and a static method:

float static MyStaticMethod(MyStruct a, MyStruct b);

when i call this method:

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

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

MyClass.MyStaticMethod(s,t);

i have this error at compile time:

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
4

3 回答 3

9

You need to call it using a scope resolution operator:

MyClass::MyStaticMethod(s,t);
       ^^
于 2012-04-04T10:48:45.697 回答
1

除了使用“MyClass::MyStaticMethod(s,t);”之外,您还可以在实例上调用静态方法:

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

它应该是:

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

(新的类型名最后出现)

于 2012-04-04T11:04:56.483 回答
1

该关键字在 C++ 语言中static重载(即它具有多种含义)。在您提供的代码中:

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 );

即使该语言也允许(我不建议使用它,它可能会造成混淆):

float f a.MyStaticFunction(a,b);

出现混淆的地方是因为它看起来像在 上调用成员函数a,而不是在类上调用静态成员函数。

于 2012-04-04T12:00:17.230 回答