C++: доступ к общедоступной функции-члену извне класса

У меня есть класс, определенный в отдельном файле, и в какой-то момент мне нужно получить доступ к одной из общедоступных функций-членов из другого исходного файла. По какой-то причине я забыл, как это сделать, и компилятор выдает мне ошибку.

У меня есть classA.h с определением класса A, подобным этому:

class classA {
  public:
  int function1(int alpha);
}

И отдельный файл classA.cpp с реализацией. А затем в каком-то другом файле blah.cpp я включаю заголовок и пытаюсь получить к нему доступ следующим образом:

 classA::function1(15);

и мой компилятор отказывается от него с ошибкой, что он не может найти совпадение для 'classA::function1(int)'.
Если это имеет значение, я использую Embarcadero RAD studio 2010.


person Andrew    schedule 30.11.2010    source источник


Ответы (2)


Чтобы вызвать «нормальную» функцию, вам нужен экземпляр.

classA a;
a.function1(15);

Если вы хотите вызвать функцию, используя classA::, тогда она должна быть static.

classA {
  public:
    static int function1(int alpha);
};

//...
classA::function1(15);

Обратите внимание, что внутри статического метода вы не можете получить доступ к каким-либо нестатическим переменным-членам по той же причине — нет экземпляра для предоставления контекста.

person sje397    schedule 30.11.2010
comment
или classA должно быть пространством имен. - person Naveen; 30.11.2010
comment
@Naveen: правда, но это было бы действительно плохим именем для пространства имен :) - person sje397; 30.11.2010

Является ли function1 статическим методом? Если нет, то вам нужен объект этого класса для вызова функции-члена.

Включите classA.h в свой blah.cpp и создайте объект класса A, а затем вызовите функцию-член.

person Madhur Ahuja    schedule 30.11.2010