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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> статическая переменная, внутреннее связывание 
:(
    Опции темы
kLASTER
Дата 27.6.2013, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, всем.
Даны 2 файла(пример из учебника), в которых описываются св-ва связывания.
Помогите, пжл, разобрать код.

Код

//twofile1
#include <iostream>
#include "twofile2.cpp"

int tom = 3;
int dick = 30;
static int harry = 300;

void remote_access();

int main()
{
  using namespace std;
  cout << "main() reports the following addresses:\n";
  cout << &tom << " = tom, " << &dick << " = &dick, ";
  cout << &harry << " = &harry\n";
  remote_accesses();
  
  system("PAUSE");
  return 0;
}


и вот второй

Код

#include <iostream>

extern int tom;
static int dick = 10;
int harry = 200;

void remote_accesses()
{
  using namespace std;
  cout << "remote_accesses() reports the folowing addresses:\n";
  cout << &tom << " = &tom, " << &dick << " = &dick, ";
  cout << &harry << " = &harry\n";
}


При компиляции пишет, что ошибка переопределения переменной "dick", хотя по правилам должна быть замена внешней переменной на внутреннее связывание. Далее, если делаю замену во втором файле на "extern int dick", компилятор жалуется на переопределение переменной "harry", хотя это внешнее связывание и не должно быть проблемой.
заранее спасибо.
П.С. Использую Dev C++.

Это сообщение отредактировал(а) kLASTER - 27.6.2013, 07:32
PM MAIL   Вверх
volatile
Дата 27.6.2013, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(kLASTER @  27.6.2013,  07:31 Найти цитируемый пост)
Даны 2 файла(пример из учебника)

Для вас может быть это и 2 файла, а для компилятора это один файл. (более точный термин : "модуль трансляции")
Что в учебнике прямо так и было написано ?
Цитата(kLASTER @  27.6.2013,  07:31 Найти цитируемый пост)
#include "twofile2.cpp"

если так выбросьте этот учебник.

PM MAIL   Вверх
kLASTER
Дата 27.6.2013, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

Что в учебнике прямо так и было написано ?
Цитата(kLASTER @  27.6.2013,  07:31 )
#include "twofile2.cpp"

если так выбросьте этот учебник.

Нет, это мои эксперименты.
На самом деле, я тогда не понимаю как подключить 2-ой файл. Если создать проект и к нему добавить "twofile2", то он не видит его:
  In function `int main(int, char**)':
  `remote_accesses' undeclared (first use this function)
Поэтому, мой разгоряченный мозг выдал простое решение - подключить "twofile2" и скомпилировать.
PM MAIL   Вверх
fish9370
Дата 27.6.2013, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



включать (#include) нужно заголовочные файлы ("*.h"), где должны быть прототипы требуемых функций.. а сам файл (заранее откомпилированный, или не откомпилированый) добавляется в момент компиляции с помощью командной строки или специальным образом подготовленым мейкфайлом и командой make


--------------------
undefined
PM MAIL WWW ICQ   Вверх
volatile
Дата 27.6.2013, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(kLASTER @  27.6.2013,  09:01 Найти цитируемый пост)
Если создать проект и к нему добавить "twofile2", то он не видит его:
  In function `int main(int, char**)':
  `remote_accesses' undeclared (first use this function)

Так эту строчку в первом файле оставьте:
Цитата(kLASTER @  27.6.2013,  07:31 Найти цитируемый пост)
void remote_access();

Он просто прототипа не видит.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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