4

我正在尝试将静态方法从 ah 调用到 b.cpp。根据我的研究,它就像放置 :: 范围解析一样简单,但是我尝试过,它给我一个错误“C++ 需要所有声明的类型说明符”。下面是我所拥有的。

a.cpp

float method() {
   //some calculations inside
}

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.

我很困惑,需要指导。

4

2 回答 2

3

如果你只是有

#include "b.h"
method();

您只是在“无处”中间转储一些指令(在某个地方您可以声明一个函数,定义一个函数或做一些邪恶的事情,例如定义一个全局,所有这些都需要一个类型说明符开始)

如果你从另一个方法调用你的函数,假设main编译器会认为你正在调用一个方法,而不是试图声明一些东西并且没有说出它是什么类型。

#include "b.h"
int main()
{
    method();
}

编辑

如果你真的在一个类中有一个静态方法,比如说class A在一个头文件中声明a.h你这样调用它,使用你所说的范围解析运算符,注意不要在全局范围内转储随机函数调用,而是把它们放在一边方法。

#include "a.h"
int main()
{
    A::method();
}

如果问题也是如何声明和定义静态方法,这就是这样做的方法:在啊:

#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;
}
于 2013-10-10T16:04:00.643 回答
0

很难理解你想要做什么。尝试类似:

// 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')
}
于 2013-10-10T16:32:31.477 回答