2013-10-10 6 views
3

Я пытаюсь вызвать статический метод от a.h до 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. 

Я совершенно запутался и нуждаются в руководстве.

+3

хмм, 'method' не похож на фактический метод для меня, просто простая функция. – SirDarius

+0

Оставьте 'a ::'. Просто 'method();', он чище. –

+0

Вы показываете * все * соответствующего кода? Статические * методы * являются частью класса. Если 'method' не находится в классе, вы не хотите' static' для этого объявления. – crashmstr

ответ

3

Если вы просто

#include "b.h" 
method(); 

вы просто демпинг некоторые инструкции в середине «нигде» (ну где вы могли бы объявить функцию, определить функцию или сделать что-то плохое, как определить глобальный, все из которых требуется спецификатор типа)

Если вы вызываете свою функцию из другого метода, скажем main, то компилятор будет думать, что вы вызываете метод, а не пытаетесь объявить что-то и не можете сказать, какой тип он есть.

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

редактировать

Если у вас действительно есть статический methid в классе, скажут 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; 
} 
+0

Nevermind Я уже работал. Спасибо за вашу помощь. у меня есть ключ переключения, у меня проблема, и я в конечном итоге печатаю; и я не понимал, что ПРОБЛЕМА:/ – user2211678

+0

Рад, что это отсортировано. Получить новую клавиатуру :-) – doctorlove

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') 
} 
+0

Эй, я уже начал работать. Спасибо за всю вашу помощь. у меня есть ключ переключения, у меня проблема, и я в конечном итоге печатаю; и я не понял, извинился:/ – user2211678

+0

Ничего себе. Необычные симптомы. рад, что это сработало. – Arunas

Смежные вопросы