3

我有这个问题...C++静态与结构parametrs

我有我的结构方法:

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++中所做的* small *区别,则需要为typedef'typedef struct MyStruct {..} MyStruct;'提供一个名称。再次,我会放弃它。更多[here](http:// stackoverflow。com/a/1675446/36565),注意即使主要焦点是C,答案也涉及C++ – 2012-04-04 11:53:07

回答

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

即使语言还可以(我不建议使用它,它可能会造成混淆):

float f a.MyStaticFunction(a,b); 

凡产生了困惑,因为它看起来像调用a一个成员功能,而不是号召类静态成员函数