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 に答える