информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеВсе любят мед
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Logitech готовится закрыть очередную... 
 Серьёзная атака на инфраструктуру... 
 Microsoft призналась в сознательном... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
В .h не возможно инициализировать объекты. 19.01 06:13  Число просмотров: 310
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка> <ответить>
А если я их объявлю в .cpp, то они только там видны и будут. Как это разрулить так, чтобы было типа
CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item"); и этот TYPE_STRING_ID_ITEM был доступен из других модулей
<ответить> <programming>
Как бы половчее реализовать на С++ класс, аналогичный java enum? 08.01 11:50  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка> <ответить>
В идеале бы так, чтобы все его экземпляры тащить из java в С копипастом.
как-то так 09.01 13:14  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка>
https://stackoverflow.com/questions/1965249/how-to-write-a-java-enum-like-class-with-multiple-data-fields-in-c
https://www.tangiblesoftwaresolutions.com/articles/cplus_equivalent_to_java_enums.html
Это "штучный" класс, а вот, как бы создать шаблон 10.01 09:18  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
> https://stackoverflow.com/questions/1965249/how-to-write-a-
аналогичный Жабовскому
public enum Planet {
MERCURY (3.303e+23, 2.4397e6),
VENUS (4.869e+24, 6.0518e6),
EARTH (5.976e+24, 6.37814e6),
MARS (6.421e+23, 3.3972e6),
JUPITER (1.9e+27, 7.1492e7),
SATURN (5.688e+26, 6.0268e7),
URANUS (8.686e+25, 2.5559e7),
NEPTUNE (1.024e+26, 2.4746e7);

private final double mass; // in kilograms
private final double radius; // in meters
Planet(double mass, double radius) {
this.mass = mass;
this.radius = radius;
}
А нечто подобное описанному я уже сляпал... Это-то очевидно.
error C2059: syntax error : 'constant' 13.01 09:06  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка>
Горит мой деревянный москlll
Короче, сделал вот так:
#include "Enum.h"
#include "Item.h"

static class ItemType : public CEnum
{
public:
ItemType();
virtual ~ItemType();


CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item");
CItem TYPE_TYPE_ID_ITEM( 0x0002, 1, 4, "type_id_item");
CItem TYPE_PROTO_ID_ITEM( 0x0003, 2, 4, "proto_id_item");
CItem TYPE_FIELD_ID_ITEM( 0x0004, 3, 4, "field_id_item");
CItem TYPE_METHOD_ID_ITEM( 0x0005, 4, 4, "method_id_item");
CItem TYPE_CLASS_DEF_ITEM( 0x0006, 5, 4, "class_def_item");
CItem TYPE_MAP_LIST( 0x1000, 16, 4, "map_list");
CItem TYPE_TYPE_LIST( 0x1001, 6, 4, "type_list");
CItem TYPE_ANNOTATION_SET_REF_LIST( 0x1002, 7, 4, "annotation_set_ref_list");
CItem TYPE_ANNOTATION_SET_ITEM( 0x1003, 8, 4, "annotation_set_item");
CItem TYPE_CLASS_DATA_ITEM( 0x2000, 9, 1, "class_data_item");
CItem TYPE_CODE_ITEM( 0x2001, 10, 4, "code_item");
CItem TYPE_STRING_DATA_ITEM( 0x2002, 11, 1, "string_data_item");
CItem TYPE_DEBUG_INFO_ITEM( 0x2003, 12, 1, "debug_info_item");
CItem TYPE_ANNOTATION_ITEM( 0x2004, 13, 1, "annotation_item");
CItem TYPE_ENCODED_ARRAY_ITEM( 0x2005, 14, 1, "encoded_array_item");
CItem TYPE_ANNOTATIONS_DIRECTORY_ITEM(0x2006, 15, 4, "annotations_directory_item");
};
Соответственно, создал CEnum и CItem c как бы я тайпы не переименовывал, как бы я не переписывал аргументы и что бы не менял в конструкторе получаю error C2059: syntax error : 'constant'.
Кака исчезает только, если конструктор делаю без аргументов.
В .h не возможно инициализировать объекты. 19.01 06:13  
Автор: Zef <Alloo Zef> Статус: Elderman
<"чистая" ссылка> <ответить>
А если я их объявлю в .cpp, то они только там видны и будут. Как это разрулить так, чтобы было типа
CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item"); и этот TYPE_STRING_ID_ITEM был доступен из других модулей
В Си и C++ существует такое понятие, как "единица компиляции" 04.06 19:17  
Автор: Den <Denis> Статус: The Elderman
Отредактировано 06.06 11:31  Количество правок: 1
<"чистая" ссылка> <ответить>
То, что объявлено внутри единицы компиляции, существует только там, а из других единиц компиляции ты можешь получить доступ к тому, что объявил через включение.

Заголовочные файлы также являются единицами компиляции и если ты объявил как static с инициализацией некий синглетон, то к нему, так или иначе, можно получить доступ. Например, в заголовочном файле ты можешь объявить:
static
TYPE_STRING_ID_ITEM* getStringItem1()
(
  static
  TYPE_STRING_ID_ITEM *instance = NULL;
  if (NULL == instance)
    instance = new TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item");
  return instance;
)

---
Экземпляр как переменной типа TYPE_STRING_ID_ITEM, так и возвращающей ссылку на неё функции, находящихся в заголовочном файле, будет только один для всех .cpp файлов, что будут включать этот заголовочный файл.
как с любой другой переменной 21.02 19:12  
Автор: dl <Dmitry Leonov>
<"чистая" ссылка> <ответить>
> А если я их объявлю в .cpp, то они только там видны и
> будут. Как это разрулить так, чтобы было типа
> CItem TYPE_STRING_ID_ITEM( 0x0001, 0, 4, "string_id_item");
> и этот TYPE_STRING_ID_ITEM был доступен из других модулей

Инициализировать в одном файле, в другом объявлять как extern.
Хвост древнего С 20.01 05:45  
Автор: Zef <Alloo Zef> Статус: Elderman
Отредактировано 20.01 05:46  Количество правок: 1
<"чистая" ссылка> <ответить>
Разобрался в чем дело: это хвост дообъектной эры. Компоновщик умеет предотвращать повторные объявления переменных при многократном инклюде хедера, но не умеет предотвращать повторную инициализацию. Потому можно объявлять в хедере только те объекты, у которых конструктор не имеет параметров. Хреново...
1






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2019 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach