Избавление от ошибки C2243

netstat -plant | awk '$4 ~ /:80\>/ {print}' | wc -l

Это покажет Вам все соединения с сервером Apache. Можно создать cgi сценарий, который вычислит общее количество соединений с сервисом Apache и выпустит предупреждение, как только это достигает определенного порога. То, что сделать в той точке, является другим вопросом.

, Надо надеяться, Ваш сервер подготовлен.

10
задан Lucas Ayala 24 September 2009 в 13:57
поделиться

5 ответов

Если вы хотите разрешить преобразование , вам следует использовать общедоступное наследование.

Используя защищенное или частное наследование, вы заявляете, что тот факт, что производный тип наследуется от базового класса, является деталью, которая не должна быть видна извне: вот почему вы получаете это ошибка.

Непубличное наследование следует рассматривать только как форму композиции с добавленной возможностью переопределения методов.

18
ответ дан 3 December 2019 в 15:06
поделиться

Проблема в том, что вы пытаетесь выполнить завершающий обход скрытой информации, которую предоставляет атрибут protected . Если вы хотите получить доступ к экземпляру D как к B, почему вы унаследовали его как защищенный, а не открытый? При использовании защищенного наследования вы хотите, чтобы только экземпляры D и его потомков знали о компоненте B. Вам нужно еще раз взглянуть на то, чего вы хотите достичь.

Используемое вами старое приведение стиля C не имеет тонкости, присущего новым приведениям C ++, поэтому он дает вам код, который будет компилироваться, но проблема на самом деле заключается в наследовании .

2
ответ дан 3 December 2019 в 15:06
поделиться

Потому что из детей D и D никто не знает, что они являются родителями-потомками, поэтому вам нужно сделать это явно.

Вот что означает защищенное наследование, только ваша семья (дети) будет знать, что вы унаследуете. И вы можете использовать его, например, в дочернем методе, там неявное преобразование будет законным.

Если вы хотите иметь неявное преобразование из ваших детей, вам нужно сделать его общедоступным, чтобы все знали.

2
ответ дан 3 December 2019 в 15:06
поделиться

Поскольку protected и частное наследование не являются отношениями is-a , они просто синтаксический сахар для композиции. Ваши классы могут быть переписаны именно так, но вы теряете удобство, позволяя компилятору определять b для вас и использовать элементы b напрямую вместо того, чтобы ссылаться на них явно:

class D
{
  protected:
  B b;
};

Для второго пункта вашего вопрос:

operator B() {return *this;}

Эта строка имеет отношение к B и D . D * и B * полностью отличаются от B и D, хотя они являются указателями на них! для приведения указателей вы можете переинтерпретировать указатель:

B *p = reinterpret_cast<B*>(&d); // TOTALLY WRONG, although it compiles :)

Не делайте приведенную выше строку! Думаю, вы могли бы дать нам больше информации о том, чего пытаетесь достичь.

8
ответ дан 3 December 2019 в 15:06
поделиться

Вы пытались сделать оператор B () общедоступным в классе D? В показанном вами коде он будет отмечен как защищенный и по-прежнему недоступный. Но я бы по возможности избегал операторов преобразования вообще.

Тем не менее, наследование защищенного B означает, что вы намерены предотвратить выполнение B * p = & d. Представьте, что B на самом деле была защищенной переменной-членом в верхней части D. Точно так же, как вы не можете получить доступ к Db в этом случае, вы не можете получить доступ к d как B *, если вы не отбросите его. B публично или используйте свои слепки. Я бы пошел с наследованием B публично, потому что его защищенное наследование в основном говорит: «Не используйте меня как B», что вы все равно пытаетесь сделать.

0
ответ дан 3 December 2019 в 15:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: