powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / friend operator >>
3 сообщений из 3, страница 1 из 1
friend operator >>
    #38343450
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.
В заголовке такое определение:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class Shape_definition {
private:
	// ...
	std::vector<Instruction> items;			
public:
	//...
	friend std::istream& operator >> (std::istream& is, Shape_definition& def); // Объявлен дружественным
};
//-----------------------------------------------------------------------------
std::istream& operator >> (std::istream& is, Shape_definition& def);
//...


В реализации оператора пытаюсь обратиться к полю items:
Код: plaintext
1.
2.
3.
4.
5.
6.
std::istream& operator >> (std::istream& is, Bushman::shp::Shape_definition& def){
	//...
	Bushman::shp::Instruction instr = Bushman::shp::Instruction::get_empty();
	while(is >> instr) def.items.push_back(instr); // Здесь проблема.
	return is;
}


Однако MS Visual Studio в проблемной строке подчёркивает "items" и пишет:
IDEerror C2248: 'Bushman::shp::Shape_definition::items' : cannot access private member declared in class 'Bushman::shp::Shape_definition'

Почему нет доступа, ведь я же объявил оператор дружественным?

Спасибо.
...
Рейтинг: 0 / 0
friend operator >>
    #38343473
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

Догадки:

В объявлении и определении функции разные namespace у этого класса Shape.

В определении функции чтения класс Shape доступен только как forward declaration. Т.е. в этом месте определение класса неполное, поэтому что функция friend, компилятор не знает.

Проверь.
...
Рейтинг: 0 / 0
friend operator >>
    #38343488
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВ объявлении и определении функции разные namespace у этого класса Shape.
Да, спасибо, как раз только что обнаружил. Нужно было писать так:
Код: plaintext
1.
std::istream& Bushman::shp::operator >> (std::istream& is, Bushman::shp::Shape_definition& def){//...}
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / friend operator >>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]