межмодульные связи
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



межмодульные связи Expand / Collapse
Автор
Сообщение
21.12.2006 17:52
Forum Guru

Forum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum GuruForum Guru

участник
Last Login: 06.12.2007 15:50
Сообщ.: 63, Visits: 589

Проблема:  есть 2 модуля (модуля классов) ,связанные include (может быть перекрёстным include) . Есть функция модуля 2 вызываемая из модуля 1, меняющая переменную модуля 2

Есть 2 модульное (консольное ) приложение из 2 модулей unit1 и unit2

Unit1.cpp

-------------------------------

#include "unit2.h"

#include <stdio.h>

#include <conio.h>

int main(int argc, char* argv[])

{ char ch;

  test();

   printf("%4i", i);

    getch();

        return 0;

}

 

Unit2.h

-------------------------------

int i;

void test();

 

Unit2.cpp

#include "Unit2.h"

void test()

{

 i=1;

}

Проблема в том, что хотя переменная I « видна» в unit1 (т.е компилятор не придирается к отсутствию её определения в unit1) но после вызова функции test получается i=0 вместо ожидаемого i=1

1 из решений состоит в замене такого определения переменной в хэдер-файле

И объяалении её в 1 из модулей, а в другом её же с директивой external.

Но, согласитесь, работать с exterrnal  в объектно-ориентированном программировании по кр мере архаично (что-то вроде common-блоков Фортрана).

Неужели  способ , описанный выше нельзя поправить, может за счёт условной компиляции может еще как. Иначе получается что единственный способ межмодульных связей – только через external ???

Сообщ. #909115
21.12.2006 18:12
Supreme Being

Supreme Being

модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240, Visits: 65 445
Правильно будет указать extern int i; в unit2.h и int i; в unit2.cpp.

Если тебя смущает использование external в объектно-ориентированном языке, то следует все писать с использованием классов. Иначе странно получается. Функции вне классов (не-ООП подход) тебя устраивает, а extern нет. Не вижу в этом логики. Одно из достоинств C++ состоит как раз в возможности использования и ООП и "старого" процедурного подхода.

Сообщ. #909116
22.12.2006 18:31
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

модератор
Last Login: 09.07.2008 2:17
Сообщ.: 1 298, Visits: 12 500
bazile все сказал, если мыслить понятиями ООП, то надо пользоваться классами, тогда любого рода глобальные переменные должны быть представлены атрибутами класса, а класс по необходимости можно оформить в виде синглетона (Singleton pattern)

Удачи,
Владимир
Сообщ. #909163
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 6:33