我有这个问题......
我有一个我的结构:
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);
我在编译时遇到这个错误:
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
答案 0 :(得分:9)
您需要使用范围解析运算符调用它:
MyClass::MyStaticMethod(s,t);
^^
答案 1 :(得分:1)
除了使用“MyClass :: MyStaticMethod(s,t);”之外,您还可以在实例上调用静态方法:
MyClass instance;
instance.MyStaticMethod(s,t);
它应该是:
typedef struct {
float a;
float b;
} Mystruct;
(新的名字是最后一个)
答案 2 :(得分: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 );
尽管该语言也允许(我不建议使用它,但可能会令人困惑):
float f a.MyStaticFunction(a,b);
出现混淆的地方,因为它看起来像是在a
上调用成员函数,而不是在类上调用静态成员函数。