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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Видимость структуры в другом модуле 
V
    Опции темы
Alca
Дата 14.8.2008, 16:32 (ссылка)  | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Видимость структуры  в другом модуле?
Код

//uMain.cpp 
typedef struct {
    std::string sVar1; 
    std::string sVar2; 
} SMystruct, *PSMystruct;

SMystruct g_stMystruct;
g_stMystruct.sVar1 = "111";
g_stMystruct.sVar2 = "222";

//Unit1.cpp
//хочу чтоб струтура была видна в этом модуле, делаю так:
#include "uMain.cpp"
extern SMystruct g_stMystruct; 

Полоучаю:
Цитата

error C2146: syntax error : missing ';' before identifier 'g_stMystruct'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int



Это сообщение отредактировал(а) Alca - 14.8.2008, 17:10


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alek86
Дата 14.8.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

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



структура  у тебя описана в Main.cpp, а инклудишь ты uMain.cpp

Это сообщение отредактировал(а) Alek86 - 14.8.2008, 16:50


--------------------
user posted image    user posted image
PM MAIL   Вверх
Alca
Дата 14.8.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Это просто опечатка! В проекте и там и там Main.cpp.  smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
Daevaorn
Дата 14.8.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alca @  14.8.2008,  17:32 Найти цитируемый пост)
g_stMystruct.sVar1 = "111";
g_stMystruct.sVar2 = "222";

А что это такое и как это живет вне функции?
PM MAIL WWW   Вверх
Alca
Дата 14.8.2008, 17:18 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Цитата

А что это такое и как это живет вне функции?

Заполняю структуру. Структура глобальная в модуле uMain.cpp.


--------------------
PM WWW ICQ Skype Jabber   Вверх
Lazin
Дата 14.8.2008, 17:30 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Alca @  14.8.2008,  16:32 Найти цитируемый пост)
#include "uMain.cpp"

включать cpp файлы директивой include это  smile 
определенно стоит прочитать хотя-бы учебник по Си
PM MAIL Skype GTalk   Вверх
Alca
Дата 14.8.2008, 17:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



???????


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alek86
Дата 14.8.2008, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

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



вообще-то, если уж инклудишь срр, то ничего дописывать не нужно
инклуд - обычная подстановка
то есть во втором файле ты и так получишь все то же, что и в первом + то, чито допишешь
но будет ошибка линковки, так как в 2х модулях объявлены 2 разные паеременные с 1 именем

потому советую почитать про разделение кода на h и cpp файлы


Цитата(Alca @  14.8.2008,  17:18 Найти цитируемый пост)
Заполняю структуру. Структура глобальная в модуле uMain.cpp.

вне функции эти 2 строчки компилироваться не должны


--------------------
user posted image    user posted image
PM MAIL   Вверх
Daevaorn
Дата 14.8.2008, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alca @  14.8.2008,  18:18 Найти цитируемый пост)

Заполняю структуру. Структура глобальная в модуле uMain.cpp. 

А кто вам сказал, что так заполняют структуры?
Цитата(Lazin @  14.8.2008,  18:30 Найти цитируемый пост)
определенно стоит прочитать хотя-бы учебник по Си 

Поддерживаю. Только по С++ раз уж std::string используетсяsmile

Это сообщение отредактировал(а) Daevaorn - 14.8.2008, 18:06
PM MAIL WWW   Вверх
Alek86
Дата 14.8.2008, 17:40 (ссылка) |   (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

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



а тут решение - вынести
Код

typedef struct {
    std::string sVar1; 
    std::string sVar2; 
} SMystruct, *PSMystruct;

в uMain.h
и поменять 2 файла так

uMain.cpp
Код
#include "uMain.h"
SMystruct g_stMystruct;

void func() {  // это должно быть внутри ф-ии!!!
 g_stMystruct.sVar1 = "111";
 g_stMystruct.sVar2 = "222";
}


Unit1.cpp
Код

#include "uMain.h"
extern SMystruct g_stMystruct;




--------------------
user posted image    user posted image
PM MAIL   Вверх
Lazin
Дата 14.8.2008, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Цитата(Daevaorn @  14.8.2008,  17:38 Найти цитируемый пост)
Толькл по С++ раз уж std::string используется

но структура объявлена в стиле Си smile 
PM MAIL Skype GTalk   Вверх
Alca
Дата 14.8.2008, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Структура у меня заполняется в функции! smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
Daevaorn
Дата 14.8.2008, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alca @  14.8.2008,  19:07 Найти цитируемый пост)
Структура у меня заполняется в функции! smile  

Тогда что за код вы привели, если он во многих местах не соответствует действительности?
PM MAIL WWW   Вверх
Lazin
Дата 14.8.2008, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



секретный код))
PM MAIL Skype GTalk   Вверх
Alca
Дата 14.8.2008, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Короче я разобрался... Напортачил с инклюдами.
Было так:

Код

//--------------------------------------------------------------
//uMain.cpp 
//--[удалил]-- #include "Unit1.cpp"    <-- включение это файла было раньше чем объявление структуры - структура не видна

typedef struct {
    std::string sVar1; 
    std::string sVar2; 
} SMystruct, *PSMystruct;

//--[добавил]-- #include "Unit1.cpp"    <-- переместил сюда, теперь структура видна в другом модуле

SMystruct g_stMystruct;
void vSomeFun() {
    g_stMystruct.sVar1 = "111";
    g_stMystruct.sVar2 = "222";
}

//--------------------------------------------------------------
//Unit1.cpp
//хочу чтоб струтура была видна в этом модуле, делаю так:
#include "uMain.cpp"
extern SMystruct g_stMystruct;


Всем спасибо, сорри если не так написал код вначале. smile 
P.S.
Lazin
Цитата

включать cpp файлы директивой include это   
определенно стоит прочитать хотя-бы учебник по Си
  smile  smile  smile 

Это сообщение отредактировал(а) Alca - 14.8.2008, 18:25


--------------------
PM WWW ICQ Skype Jabber   Вверх
mes
Дата 14.8.2008, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(Alca @  14.8.2008,  18:20 Найти цитируемый пост)
Короче я разобрался... Напортачил с инклюдами.

Маг да и только !  smile

Цитата(Alca @  14.8.2008,  18:20 Найти цитируемый пост)

Цитата


включать cpp файлы директивой include это   
определенно стоит прочитать хотя-бы учебник по Си

   smile  smile  smile  


да. чуствую обращение о нецелесобразности такого подключения  эффекта не возъимело.. smile 




--------------------
PM MAIL WWW   Вверх
Alek86
Дата 14.8.2008, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

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



мес, не беспокойся
просто сам на грабли понаступает...


--------------------
user posted image    user posted image
PM MAIL   Вверх
Alca
Дата 15.8.2008, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

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



Вынес структуру в отдельный файл и там где она мне будет нужна
буду ее инклюдить.
Код

//MyStruct.hpp

#ifndef SMyStructHPP
#define SMyStructHPP       
//---------------------------------------------------------------------------
#include <string>
//---------------------------------------------------------------------------
struct SMyStruct {
    std::string sVar1; 
    std::string sVar2; 
};
//---------------------------------------------------------------------------
#endif

P.S. Как вы советовали.


--------------------
PM WWW ICQ Skype Jabber   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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