#c #xcode #c 11
#c #xcode #c 11
Вопрос:
Я пытался убедить себя, что объекты одного и того же типа имеют доступ к закрытым элементам данных друг друга. Я написал некоторый код, который, как я думал, поможет мне лучше понять, что происходит, но теперь я получаю сообщение об ошибке от XCODE7 (всего 1), в котором говорится, что я использую необъявленный идентификатор «комбинация».
Если бы кто-нибудь мог помочь мне понять, где я ошибся в своем коде, я бы с удовольствием поучился.
Мой код должен просто печатать false , если выполняется правильно.
#include <iostream>
using std::cout;
using std::endl;
class Shared {
public:
bool combination(Sharedamp; a, Sharedamp; b);
private:
int useless{ 0 };
int limitless{ 1 };
};
bool Shared::combination(Sharedamp; a,Sharedamp; b){
return (a.useless > b.limitless);
}
int main() {
Shared sharedObj1;
Shared sharedObj2;
cout << combination(sharedObj1, sharedObj2) << endl;
return 0;
}
Ответ №1:
combination
является функцией-членом класса Shared
. Следовательно, он может быть вызван только для экземпляра Shared
. Когда вы вызываете combination
, вы не указываете, какой объект вы называете его одним:
cout << combination(sharedObj1, sharedObj2) << endl;
^^^
Instance?
Компилятор жалуется, потому что думает, что вы хотите вызвать вызываемую функцию combination
, но ее нет.
Итак, вам нужно указать экземпляр:
cout << sharedObj1.combination(sharedObj1, sharedObj2) << endl;
Однако в этом случае не имеет значения, в каком экземпляре он вызывается, поэтому вы должны сделать combination
static , чтобы вы могли сделать
cout << Shared::combination(sharedObj1, sharedObj2) << endl;
Комментарии:
1. Супер ответ. Спасибо за этот совет в конце. Отличное объяснение со всех сторон.