Допустим, у меня есть заголовочный файл ах и исходный файл a.cpp.Когда я пытаюсь скомпилировать это и вызвать what () из другого файла (например, main.cpp), который включает в себя ах:
ах:
class A {
friend void what();
public:
int index;
};
a.cpp:
#include "a.h"
#include <iostream>
void what() {
std::cout << "what" << std::endl;
}
Сбой, как и ожидалось (ошибка: «что» не было объявлено в этой области).Однако, когда я делаю то же самое с этим:
ах:
class A {
friend void what(A *thing);
public:
int index;
};
a.cpp:
#include "a.h"
#include <iostream>
void what(A *thing) {
std::cout << thing->index << std::endl;
}
Он компилируется и прекрасно работает на g ++ 4.4.1 (конечно, при условии, что "index" инициализирован).Я не очень разбираюсь в C ++, но я предполагаю, что, передав указатель объекта в функцию, функция каким-то образом стала доступной для глобальной области видимости (то есть получила «повышение» для того, чтобы иметь возможность «видеть» объект).который ранее существовал в той же области, что и он).Я еще не пробовал это с другими видами функций, но, используя g ++ и дружественные функции, я получаю такое поведение.Это должно произойти в C ++?
Спасибо и извините, если это нубистский вопрос, мой друг Google меня подводил.