16

голосов
4

ответ
887

Просмотры

Why can I not instantiate a class whose constructor is private in a friend class?

У меня есть два класса; Заработная плата, предназначенная для хранения информации и расчетов относительно заработной платы работника и работника, который имеет объект класса типа Зарплата и некоторые члены, как имя и адрес сотрудника ... То, что я хочу сделать, это предотвратить класс Зарплата от того, инстанцирован кроме класса Employee. Поэтому я объявил строитель заработной платы частного и сделал Работник друг Зарплата. Но я получаю ошибки: класс Employee; класс Зарплата {общественности: частная: Зарплата (): revenue_ {}, cost_ {} {} Зарплатный (интермедиат х, у ИНТ): revenue_ {х}, cost_ {у} {} ИНТ revenue_, cost_; друг класс Employee; }; класс Employee {общественности: станд :: строка name_; Зарплата сала; }; INT основных () {Сотрудник EMP {}; // "Зарплата :: Зарплата ()" недоступен} Проблема уходит, если я вперед объявить основной: INT основной (интермедиат, символ * []); И сделать главный друг класса Зарплата как и в Оклад: класс Зарплата {// ... друг Int основной (INT ARGC, символ * ARGV []); }; Теперь программа компилируется правильно! *** Еще одна вещи, в основном, если я объявить объект так: Employee ую; // ОК эми Сотрудник {}; // ошибка?
Syfu_H
8

голосов
3

ответ
483

Просмотры

Что является результатом присвоения STD :: вектор :: начать ()?

Я немного понимания Lvalue и rvalues. Так как я знаю, что мы не можем назначить на RValue но неконстантного Lvalue нормально. # include # include INT основных () {станд :: вектор v {1, 2, 3, 4, 5}; v.begin () = v.end () - 2; станд :: соиЬ
Syfu_H