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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Структура, Как создать глобальный массив структур 
V
    Опции темы
Belous
Дата 6.2.2017, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.11.2015

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



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

error C2501: 'data' : missing storage-class or type specifiers

А если добавляю определение в этот модуль, то получаеся переменная не глобольной структуры, а локальной структуры, с таким же именем см рисунок DATA глобальная и DATA локальная.

Код

// Project.h

#include <windows.h>
#include "Data.h"

struct DATA
{
    int index;
    char name[256];
    POINT point;
};

namespace e
{
    HINSTANCE hinst;
    char appname[256];
    //...
    DATA data[10];
}


Код

// Data.h

#include <windows.h>

namespace e
{
    extern char appname[256];
    //...
    extern DATA data[10];
}


Код

// Data.cpp

#include "Data.h"

void DataApplication()
{
    strcpy(e::appname, "Application");
    e::data[0].index = 0;
}


Как создать массив глобальных переменных типа структура?

Это сообщение отредактировал(а) Belous - 6.2.2017, 20:16

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  pic.GIF 8,48 Kb
PM MAIL   Вверх
ss
Дата 6.2.2017, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 17.5.2007

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



в Data.h надо подключить Project.h. Файл в котором описана структура не подключен. Структуру нужно вынести в другой файл иначе будет кольцевое подключение.
PM MAIL   Вверх
Belous
Дата 6.2.2017, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.11.2015

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



Цитата

Структуру нужно вынести в другой файл иначе будет кольцевое подключение

Вот именно. Поэтому и не подключен. А иначе никак ? А то и так этих файлов очень много получается, и это только начало программы...

Спасибо, попробую.



Это сообщение отредактировал(а) Belous - 6.2.2017, 21:41
PM MAIL   Вверх
ss
Дата 6.2.2017, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 131
Регистрация: 17.5.2007

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



в Data.h опиши структуру, заведи массив а в других файлах (Project.h) подключай этот Data.h и определяй ссылку extern DATA data[10];
PM MAIL   Вверх
Belous
Дата 6.2.2017, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.11.2015

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



В общем смысл я понял.

У меня было в Project.h описаны все глобальные переменные
в Project.cpp - WinMain() и WndProc()

В остальных файлах-модулях, по смыслу File.h + File.cpp - работа с файлами,
В Data.h + Data.cpp - работа с данными, инициализация, проверки, undo, redo и т.д.
Естественно все так или иначе вызывается с WndProc()

Так просто перенести переменные из Project.h в Data.h не получится,
поскольку функции модуля Data.cpp вызываются из Project.cpp. и все равно получается

error C2011: 'DATA' : 'struct' type redefinition

немного спасает #pragma once

но получил
Project.obj : error LNK2005: "struct DATA * e::data" (?data@e@@3PAUDATA@@A) already defined in Data.obj

...

Наверное без дополнительного файла под структуру не обойтись.
PM MAIL   Вверх
xvr
Дата 7.2.2017, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



У вас в принципе неправильная структура файлов. Должно быть так:
Код

// Data.h
#pragma once

#include <windows.h>

struct DATA
{
    int index;
    char name[256];
    POINT point;
};

namespace e
{
    extern DATA data[10];
}


Код

// Project.h
#pragma once

#include <windows.h>
#include "Data.h"

namespace e
{
    extern HINSTANCE hinst;
    extern char appname[256];
}


Код

// Data.cpp
#include "Data.h"

namespace e
{
    DATA data[10];
}

void DataApplication()
{
    strcpy(e::appname, "Application");
    e::data[0].index = 0;
}


Код

// Project.cpp
#include "project.h"
namespace e
{
    HINSTANCE hinst;
    char appname[256];
}
...

PM MAIL   Вверх
Belous
Дата 7.2.2017, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 35
Регистрация: 8.11.2015

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



Спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1400 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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