Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Инициализация костанты в классе 
:(
    Опции темы
Royan
Дата 8.10.2004, 13:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Судя по теперешнему хелпу (MSDN'у) в VC++.NET я могу написать следующее:

Код
class A(){
 static const int k = 1;//инициализация статической интегральной константы
public:
 A(){}
};


Придя в институт, где стоит VC++6 обнаружилось, что этакого делать нельзя. Т.е. константы надо инициализировать классическим способом А() : k(1){}, при этом "k" не должно быть статическим членом.

Собственно, а как правильно с точки зрения стандарта. И выходит что это баг в VC++6?

Это сообщение отредактировал(а) Royan - 8.10.2004, 13:09


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
Step
Дата 8.10.2004, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5151
Регистрация: 26.9.2002
Где: дурдом.UA

Репутация: 5
Всего: 25



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


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
DENNN
Дата 8.10.2004, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 3878
Регистрация: 27.3.2002
Где: Москва

Репутация: 1
Всего: 43



Стандарт на эту тему я не знаю, но, судя по многочисленной литературе с примерами кода,
класический подход
Код

class A (value1, value2) : k1(value1), k2( value2)
{
.......
}

где k1, k2 - члены класса, для которых не определен конструктор по умолчанию
value1, value2 - параметры или иные данные
верен, а значит должен быть и верен частный случай, где в членах класса есть переменная константа встроенного типа.
PM ICQ   Вверх
Vyacheslav
Дата 8.10.2004, 13:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



По стандарту объявление статических полей в классе является всего лишь ее декларированием и только. Необходимо выполнить еще и "реализацию", то ее нужно еще и определить
Код

class A(){
static const int k;
public:
A(){}
};

const int A::k = 10;
//можно и просто
//const int A::k;

В последнем случае k будет инициализирован нулем



--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
Vyacheslav
Дата 8.10.2004, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 9
Всего: 59



Хотя виноват. Действительно в стандарте только для статических констант( на статические члены-неконстанты это не распространяется) разрешена инициаализация в классе.
VC++6 в данном случае нарушает стандарт.
С++Builder 6 эту возможность поддерживает


--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
srd
Дата 8.10.2004, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

Репутация: 27
Всего: 49



Вроде инициализация статических членов-констант в классе разрешена только для интегральных типов.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
Улисс
Дата 8.10.2004, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 7.10.2004
Где: за зелено-синим м орем, в длинном темном коридоре

Репутация: нет
Всего: нет



А я всю жизнь пользуюсь вариантом таким:

class A {
enum { k=10 };
};

работает пока везде...
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.