我试图从a.h到b.cpp调用静态方法。从我研究的内容来看,它就像放置一个:: scope解决方案一样简单,但是我尝试了它并且它抛出了一个错误“C ++需要所有声明的类型说明符”。以下是我所拥有的。
a.cpp
float method() {
//some calculations inside
}
a.h
static float method();
b.cpp
a::method(); <- error! "C++ requires a type specifier for all declarations".
but if I type without the ::
a method(); <- doesn't throw any errors.
我很困惑,需要指导。
答案 0 :(得分:3)
如果您只是
#include "b.h"
method();
你只是在“无处”的中间抛出一些指令(在某处你可以声明一个函数,定义一个函数或做一些邪恶的事情,比如定义一个全局,所有这些都需要一个类型说明符开始)
如果你用另一种方法调用你的函数,比如main
,编译器就会认为你正在调用一个方法,而不是试图声明一些东西,而不是说它是什么类型。
#include "b.h"
int main()
{
method();
}
修改强>
如果你在一个类中确实有一个静态methid,比如在class A
标题中声明a.h
,你可以这样调用它,使用范围资源运算符,如你所说,小心不要在全局范围内转储随机函数调用,但是将它们放在内部方法中。
#include "a.h"
int main()
{
A::method();
}
如果问题也是如何声明和定义静态方法,这就是这样做的方法: 在a.h:
#ifndef A_INCLUDED
#define A_INCLUDED
class A{
public :
static float method();
};
#endif
然后在a.cpp
中定义它#include "a.h"
float A::method()
{
//... whatever is required
return 0;
}
答案 1 :(得分:0)
很难理解你正在尝试做什么。尝试类似:
a.h
// header file, contains definition of class a
// and definition of function SomeFunction()
struct a {
float method();
static float othermethod();
static float yetAnotherStaticMethod() { return 0.f; }
float value;
}
float SomeFunction();
a.cpp
// implementation file contains actual implementation of class/struct a
// and function SomeFunction()
float a::method() {
//some calculations inside
// can work on 'value'
value = 42.0f;
return value;
}
float a::othermethod() {
// cannot work on 'value', because it's a static method
return 3.0f;
}
float SomeFunction() {
// do something possibly unrelated to struct/class a
return 4.0f;
}
b.cpp
#include "a.h"
int main()
{
a::othermethod(); // calls a static method on the class/struct a
a::yetAnotherStaticMethod(); // calls the other static method
a instanceOfA;
instanceOfA.method(); // calls method() on instance of class/struct a (an 'object')
}