Думаю, самый простой выход — объявить деструктор public и страться нигде
не удалять объект вручную А дело, наверное, в том, что пкомпилер
порождает код деинициализации, из котрого деструктор "не виден".
В стандарте я нашёл только такое упоминание об видимости деструктора
(12.4.10):
[quote]A program is ill-formed if the destructor for an object is
implicitly used and it is not accessible.[/quote]
> В стандарте я нашёл только такое упоминание об видимости деструктора > (12.4.10): > [quote]A program is ill-formed if the destructor for an object is > implicitly used and it is not accessible.[/quote]
Хотя я ошибся, это в черночике стандарта от 97 года.
В самом стандарте написано, что деструктор должен быть доступен в точке
объявления переменной. Но видимо msvc6 следует тому, что было написано в
черновике и лучший выход (если забыть о возможности смены компилятора) —
оставить конструктор приватным и сделать публичным деструктор.
Здравствуйте, L2-Max, Вы писали:
LM>Здравствуйте, L2-Max, Вы писали:
LM>Кстати, вы можете определить статическую переменную типа вашего класса гденибудь в скопе срр файла, получите аналогичную ошибку только о конструкторе.
Здравствуйте, green.nsk, Вы писали:
>> В стандарте я нашёл только такое упоминание об видимости деструктора >> (12.4.10): >> [quote]A program is ill-formed if the destructor for an object is >> implicitly used and it is not accessible.[/quote]
GN>Хотя я ошибся, это в черночике стандарта от 97 года. GN>В самом стандарте написано, что деструктор должен быть доступен в точке GN>объявления переменной. Но видимо msvc6 следует тому, что было написано в GN>черновике и лучший выход (если забыть о возможности смены компилятора) — GN>оставить конструктор приватным и сделать публичным деструктор.
Я больше чем уверен — bug в компиляторе. Просто может патчи какие-есть? вроде у меня последний sp для VS стоит, но все равно проблема остается
Здравствуйте, DENIVA, Вы писали:
DEN>Здравствуйте, green.nsk, Вы писали:
>>> В стандарте я нашёл только такое упоминание об видимости деструктора >>> (12.4.10): >>> [quote]A program is ill-formed if the destructor for an object is >>> implicitly used and it is not accessible.[/quote]
GN>>Хотя я ошибся, это в черночике стандарта от 97 года. GN>>В самом стандарте написано, что деструктор должен быть доступен в точке GN>>объявления переменной. Но видимо msvc6 следует тому, что было написано в GN>>черновике и лучший выход (если забыть о возможности смены компилятора) — GN>>оставить конструктор приватным и сделать публичным деструктор.
DEN>Я больше чем уверен — bug в компиляторе. Просто может патчи какие-есть? вроде у меня последний sp для VS стоит, но все равно проблема остается
Проблем, в этом плане, в компиляторе нет. Он правильно ругается.
Если конструктор приватный:
Мы не можем создавать объект не методом-членом этого класса либо если это не друг этого класса. Глобальный скоп по определению не может являться ни другом ни членом класса, следовательно мы никогда не сможем создать этот объект глобальным скопом.
С деструктором тоже самое, удалиться он скопом также не сможет если деструктор не паблик. Так что вот ...
Здравствуйте, L2-Max, Вы писали:
LM>Здравствуйте, DENIVA, Вы писали:
DEN>>Здравствуйте, green.nsk, Вы писали:
DEN>>Я больше чем уверен — bug в компиляторе. Просто может патчи какие-есть? вроде у меня последний sp для VS стоит, но все равно проблема остается
LM>Проблем, в этом плане, в компиляторе нет. Он правильно ругается. LM>Если конструктор приватный: LM>Мы не можем создавать объект не методом-членом этого класса либо если это не друг этого класса. Глобальный скоп по определению не может являться ни другом ни членом класса, следовательно мы никогда не сможем создать этот объект глобальным скопом. LM>С деструктором тоже самое, удалиться он скопом также не сможет если деструктор не паблик. Так что вот ...
почитай верние топики. В VS 2003 все работает. Эта проблема только в VS 6.0
Здравствуйте, DENIVA, Вы писали:
DEN>Здравствуйте, L2-Max, Вы писали:
LM>>Здравствуйте, DENIVA, Вы писали:
DEN>>>Здравствуйте, green.nsk, Вы писали:
DEN>>>Я больше чем уверен — bug в компиляторе. Просто может патчи какие-есть? вроде у меня последний sp для VS стоит, но все равно проблема остается
LM>>Проблем, в этом плане, в компиляторе нет. Он правильно ругается. LM>>Если конструктор приватный: LM>>Мы не можем создавать объект не методом-членом этого класса либо если это не друг этого класса. Глобальный скоп по определению не может являться ни другом ни членом класса, следовательно мы никогда не сможем создать этот объект глобальным скопом. LM>>С деструктором тоже самое, удалиться он скопом также не сможет если деструктор не паблик. Так что вот ...
DEN>почитай верние топики. В VS 2003 все работает. Эта проблема только в VS 6.0
Проблема VS6 в том, что он придерживается стандарта ? Кстати, все студии позволяют видеть индексную переменную оператора for в следующем скопе, а вот GCC не позволяет — значит он имеет проблемы ?
Кстати, по поводу того что в VS2003 нормально тоже сомневаюсь, не должен он такое допускать. Скорее всего, что создавали объект динамически и не удаляли. (под рукой нет VS2003 проверить не могу).
Здравствуйте, L2-Max, Вы писали:
LM>Здравствуйте, DENIVA, Вы писали:
DEN>>Здравствуйте, L2-Max, Вы писали:
LM>>>Здравствуйте, DENIVA, Вы писали:
DEN>>>>Здравствуйте, green.nsk, Вы писали:
DEN>>>>Я больше чем уверен — bug в компиляторе. Просто может патчи какие-есть? вроде у меня последний sp для VS стоит, но все равно проблема остается
LM>>>Проблем, в этом плане, в компиляторе нет. Он правильно ругается. LM>>>Если конструктор приватный: LM>>>Мы не можем создавать объект не методом-членом этого класса либо если это не друг этого класса. Глобальный скоп по определению не может являться ни другом ни членом класса, следовательно мы никогда не сможем создать этот объект глобальным скопом. LM>>>С деструктором тоже самое, удалиться он скопом также не сможет если деструктор не паблик. Так что вот ...
DEN>>почитай верние топики. В VS 2003 все работает. Эта проблема только в VS 6.0
В любом случае приведенный вами в пример синглтон не правильный, с точки зрения шаблонов проектирования.
Здравствуйте, L2-Max, Вы писали:
LM>Здравствуйте, L2-Max, Вы писали:
LM>>Здравствуйте, DENIVA, Вы писали:
DEN>>>Здравствуйте, L2-Max, Вы писали:
LM>>>>Здравствуйте, DENIVA, Вы писали:
DEN>>>>>Здравствуйте, green.nsk, Вы писали:
DEN>>>>>Я больше чем уверен — bug в компиляторе. Просто может патчи какие-есть? вроде у меня последний sp для VS стоит, но все равно проблема остается
LM>>>>Проблем, в этом плане, в компиляторе нет. Он правильно ругается. LM>>>>Если конструктор приватный: LM>>>>Мы не можем создавать объект не методом-членом этого класса либо если это не друг этого класса. Глобальный скоп по определению не может являться ни другом ни членом класса, следовательно мы никогда не сможем создать этот объект глобальным скопом. LM>>>>С деструктором тоже самое, удалиться он скопом также не сможет если деструктор не паблик. Так что вот ...
DEN>>>почитай верние топики. В VS 2003 все работает. Эта проблема только в VS 6.0
LM>В любом случае приведенный вами в пример синглтон не правильный, с точки зрения шаблонов проектирования.