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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> немного о хеадерах 
V
    Опции темы
apook
Дата 20.9.2007, 12:29 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Линкер выдает ошибку --
Error: _DAT defined in module main.cpp is duplicated in module dat.cpp

Суть такова:
В заголовочном файле dat.h есть структура DAT( там же заполняется ), в файле main.cpp включен файл dat.h и в dat.cpp тоже включен файл dat.h соответственно.
Ошибка потому что тип DAT обьявляется дважды, пачиму так smile? убедительная просьба разжувать
30 минут непоняток....


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 20.9.2007, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(apook @  20.9.2007,  13:29 Найти цитируемый пост)
Линкер выдает ошибку --

если так, то:
Цитата(apook @  20.9.2007,  13:29 Найти цитируемый пост)
В заголовочном файле dat.h есть структура DAT( там же заполняется

заполнять её надо один раз. а у тебя получается два.
PM MAIL WWW   Вверх
GrayCardinal
Дата 20.9.2007, 12:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


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

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



apook
Можно в файле main.cpp записать макрос (перед включением dat.h), к примеру :
#define MAIN_CPP
а в 
dat.h
#ifdef MAIN_CPP
(заполняем)
#else
(просто объявляем)
#endif


Это сообщение отредактировал(а) GrayCardinal - 20.9.2007, 12:41


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


Эксперт
***


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

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



Цитата(apook @  20.9.2007,  12:29 Найти цитируемый пост)
Ошибка потому что тип DAT обьявляется дважды, пачиму так ? убедительная просьба разжувать30 минут непоняток....

ну чего тут непонятного? 2 раза одна и таже переменная определяется. Убирать ее определение из хедера
PM MAIL   Вверх
apook
Дата 20.9.2007, 12:46 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Дело в том что она тока там и определяется(то бишь в хеадере)

так поправки:
структура такая --

struct 

    char Ы[ 3 ][ 1 ]; //идентификаторы
    int Г;
    } DAT={
    { "\x1", "\x1", "\x1" },
    { 25 }
    };

надо чтоб эта структура заполнялась только в файле dat.h и именно таким способом


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
GrayCardinal
Дата 20.9.2007, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


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

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



apook
Именно таким способом не прокатит  smile

Добавлено через 1 минуту и 2 секунды
ЗЫ
и объявляется дважды НЕ ТИП, а ПЕРЕМЕННАЯ "DAT".


--------------------
PM MAIL WWW   Вверх
apook
Дата 20.9.2007, 13:06 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(GrayCardinal @  20.9.2007,  12:49 Найти цитируемый пост)
и объявляется дважды НЕ ТИП, а ПЕРЕМЕННАЯ "DAT"
 Да это понятно там опечатка, но почему не прокатит не понятно я с этим не согласен, п о ч е м у у у???



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 20.9.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(apook @  20.9.2007,  14:06 Найти цитируемый пост)
п о ч е м у у у???

п о т о м у ч т о  в С + + т а к н е л ь з я! Определять переменные нужно в cpp файле, а чтобы они были видны не только там есть слово extern. читай доки!smile
PM MAIL WWW   Вверх
apook
Дата 20.9.2007, 13:26 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



c extern все понятно
Цитата(Daevaorn @  20.9.2007,  13:10 Найти цитируемый пост)
Определять переменные нужно в cpp файле
 О, а как сделать? Хотелось заполнить сразу при обьявлении...



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 20.9.2007, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  20.9.2007,  13:06 Найти цитируемый пост)
Да это понятно там опечатка, но почему не прокатит не понятно я с этим не согласен, п о ч е м у у у???

Потому что header - это НЕ отдельный модуль, а всего лишь кусочек другого модуля. В твоём случае этот кусочек фигурирует аж в двух модулях(можешь с тем же успехом убрать include и руками скопировать содержимое своего хэдера в оба модуля), как и дважды фигурирует определение переменной DAT. Так понятно?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 20.9.2007, 13:59 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(archimed7592 @  20.9.2007,  13:34 Найти цитируемый пост)
Так понятно?
 Но ведь дело в том что так и надо делать( по правильному, соответственно в main.cpp и функция int main() так что я не могу в этом модуле не включить и в нем dat.h так как из main я пользуюсь данными из структуры DAT), не прокатывает только заполнение структуры при ее обьявлении... я специально вытащил ее из класса только для того чтоб заполнять при обьявлении, в общем стоял перед выбором заполнять ее в конструкторе или таким способом, польстился чето на второй



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
GrayCardinal
Дата 20.9.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


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

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



Цитата

специально вытащил ее из класса только для того чтоб заполнять при обьявлении, в общем стоял 
перед выбором заполнять ее в конструкторе или таким способом, польстился чето на второй

Ыыыы. LOL.


--------------------
PM MAIL WWW   Вверх
Earnest
Дата 21.9.2007, 19:28 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

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



apook, так и заполняй себе при объявлении на здоровье. Только отдели мух от супа, т.е. объявление типа от объявления переменной. Первое - в хедер, второе - в cpp.
А не нравится - все претензии к Страуструпу - это он, гад, напридумал... 
А нет, это даже Керниган с прочими праотцами С...
smile  smile  smile 



--------------------
...
PM   Вверх
archimed7592
  Дата 21.9.2007, 19:38 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



apook, не парь мозги ни себе ни нам. Вот тебе пример(хотя их на форуме десятки):
Код

// dat.h
extern int x;

// dat.cpp
int x = 75; // определяем и инициализируем здесь(только в одном месте)

// module1.cpp
#include "dat.h"
void f1()
{ std::cout << x << std::end; }

// module2.cpp
#include "dat.h"
void f2()
{ std::clog << x << std::end; }

Если это не понятно, то советую обратиться к книге и постараться увидеть там нечто большее, чем "фигу".


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 22.9.2007, 02:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(archimed7592 @  21.9.2007,  19:38 Найти цитируемый пост)
// dat.hextern int x;// dat.cppint x = 75; // определяем и инициализируем здесь(только в одном месте)

Ну что-за пример! я б не додумался до такого
Заполнять при обьявлении имелось ввиду напр:
Код

char *str="Строка";

проделать сие в хеадере как я теперь понял нельзя....



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 22.9.2007, 08:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  22.9.2007,  02:43 Найти цитируемый пост)
Заполнять при обьявлении имелось ввиду напр:

И чем твой пример отличается от int x = 75;? 0_o

Вообще говоря, тебе не плохо было бы узнать разницу между объявлением и определением. "Заполнять"(а точнее, инициализировать) при объявлении нельзя - так устроен язык С++.


Цитата(apook @  22.9.2007,  02:43 Найти цитируемый пост)
проделать сие в хеадере как я теперь понял нельзя....

В хэдере можно делать абсолютно всё, что можно делать в самом модуле(.cpp), но нужно осозновать возможные последствия содеянного.


Попробуй задаться для себя вопросом: в чём для тебя принципиальная разница "заполнения" в хэдере или модуле? Думаю, когда ответишь на него, все вопросы сразу отпадут.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 22.9.2007, 09:54 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(archimed7592 @  22.9.2007,  08:06 Найти цитируемый пост)
Попробуй задаться для себя вопросом: в чём для тебя принципиальная разница "заполнения" в хэдере или модуле?
 Сложный вопрос. Думаю ответ:-"Так захотелось", почти подходит. Ну вобщем вопрос снят с повески дня! smile 



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 22.9.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  22.9.2007,  09:54 Найти цитируемый пост)
Думаю ответ:-"Так захотелось"

Думаю ответ: хотелось инициализировать общую переменную в одном месте, но ты, почему-то выбрал для этого хэдер(таким образом сделав инициализацию во всех модулях, которые используют этот хэдер), вместо того, чтобы сделать инициализацию в одном из модулей или вообще в отдельном модуле.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 22.9.2007, 14:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



так, если уж разбитраться что подтолкнуло обьявить переменную в хеадере, то скажу что этому предшествовало, предупреждаю что все не очень серьезно. а дело было так, напоминаю что переменная является структурой и вполне вероятно, так как я не совсем ясно представляю всех нюансов достижения будущей программой поставленного результата, эта структура станет массивом структур.. Структура являлась членом некого класса, дойдя до написания конструктора которого я встал перед вопросом заполнения полей структуры( а заполняется она заранее известными данными) , их примерно 10 - 15(полей) т.е не много(чтоб начать плодить хеадеры с коими итак путанница) но и не мало чтоб это незаметно выглядело в конструкторе(строки типа 
Код
strcpy( p->DAT[ 0 ]. ident, "submamber_item_value" );
) и таких 15 x n. Ну просто представилось предпочтительнее заполнить структуру статически и не вспоминать о ее инициализации более ни где на протяжении всего кода.
Кстати уже инициализировал в конструкторе(временно), но однак так и останется.... 

Сейчас пришло на ум поиграться со значеничми по умолчанию и инициализировать типа статически, но опять же не все компиляторы поддерживают такую фишку в default constructor, есть-ли какие-нибудь соображения?? чты эт не очень серьезно так ка прога и так работть будет

Это сообщение отредактировал(а) apook - 22.9.2007, 14:21


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Ln78
Дата 22.9.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



apook, при очень большом желании можно и зайца курить научить (вопрос зачем?). В твоём случае, один из вариантов может быть такой:
Код

#ifdef _DATA
#define _MOD
#define SET =
#define BRACE_L {
#define BRACE_R }
#define COMMA ,
#define INIT1(a) {(a)}
#define INIT2(a,b) {(a),(b)}
#define INIT3(a,b,c) {(a),(b),(c)}
#else
#define _MOD extern
#define INIT1(a) 
#define INIT2(a,b)
#define INIT3(a,b,c)
#define SET
#define BRACE_L 
#define BRACE_R 
#define COMMA 
#endif

_MOD struct S_DAT

    char S[ 3 ][ 2 ]; //идентификаторы
    int I;
} DAT SET BRACE_L 
      INIT3(("\x30"),("\x31"),("\x33")) COMMA 
      INIT1(25) 
  BRACE_R ;


В одном из *.cpp файлов нужно определить _DATA.
PM MAIL   Вверх
zkv
Дата 22.9.2007, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



если инициализацией простой не обойтись, то можно сделать следущее:
(надеюсь правильно тебя понял)
Код

struct DATA
{
  const char *someField;
};

class CSome
{
  static DATA m_data;
  static bool  m_fDataIsConstructed;
public:
  CSome();
  static void ConstructData();
};

bool CSome::m_fDataIsConstructed = false;

CSome::CSome()
{
  if( !CSome::m_fDataIsConstructed )
    ConstructData();
}

void CSome::ConstructData()
{
  // initialize m_data here 
}

PM MAIL   Вверх
apook
Дата 22.9.2007, 16:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Одной из причин было уменьшение строчек кода, хотяб иллюзия этого smile 
Спасибо за предложеннные  варианты.


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
zkv
Дата 22.9.2007, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(apook @  22.9.2007,  16:41 Найти цитируемый пост)
Одной из причин было уменьшение строчек кода

целью должна быть скорее прозрачность кода, а не количество строчек.  smile 
PM MAIL   Вверх
apook
Дата 28.9.2007, 13:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



как борться с тем что при включении хеадера значительно утяжеляется исполняемый файл, даже если (ради эксперемента) не вызывать ничего из этого файла ?


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
akizelokro
Дата 28.9.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



ради эксперимента попробовать не включать такой хедер smile 

Это сообщение отредактировал(а) akizelokro - 28.9.2007, 13:28


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
apook
Дата 28.9.2007, 14:07 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне почему-то хочется включить iostream.h

Хотя включив просто iostream.h файл не увеличивается, а если вызвать cout  то увеличивается с  4.67 kb  до 28.9 kb!!! smile
а файл string хватает просто включить и файл увеличивается до 70 kb smile smile smile ! И вобщем тогда тоже склоняюсь не включать таких файлов(как жаль)... 

Это сообщение отредактировал(а) apook - 28.9.2007, 14:29


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 28.9.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  28.9.2007,  14:07 Найти цитируемый пост)
Мне почему-то хочется включить iostream.h 

Странные нынче программисты пошли...
no comments



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 1.10.2007, 07:02 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



товарищ Уолтер Савич говорит что в cpp файле для хеадера следует писать
Код

//file somefile.cpp
#ifdef SOMEFILE_CPP
#define SOMEFILE_CPP

...

#endif

говорится так-же что при таком включении не надо передавать имя такого файла в параметре компилятора, а так же не надо включать его через include напр:  #include"somefile.cpp"
на практике это не работает. Работает так:
Код

//file somefile.cpp
#include"somefile.h"

и имя файла передается с пареметром компилятору
что-за ?


Это сообщение отредактировал(а) apook - 1.10.2007, 07:04


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 1.10.2007, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



apook, ты сам то понял, что написал?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 1.10.2007, 08:24 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(archimed7592 @  1.10.2007,  07:15 Найти цитируемый пост)
apook, ты сам то понял, что написал?
Да, ну если захотеть не понять то можно и не понять. Извиняюсь я не на экзамене и даже не на уроке чтоб  формулировать суперточно. Тебя смутила фраза
Цитата
в cpp файле для хеадера
, ну ты -же понял о чем я... че придераешься?



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
UnrealMan
Дата 1.10.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(apook @  1.10.2007,  09:24 Найти цитируемый пост)
ну ты -же понял о чем я... 

Это вряд ли. Такой бред понять невозможно.
PM MAIL   Вверх
Fazil6
Дата 1.10.2007, 08:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(apook @  1.10.2007,  08:24 Найти цитируемый пост)
Извиняюсь я не на экзамене и даже не на уроке чтоб  формулировать суперточно.

Извиняюсь, но тут тебе тоже никто не Буратино, чтобы догадываться о чем твоя галиматья и как ее коментировать...  
PM MAIL   Вверх
apook
Дата 1.10.2007, 08:56 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



а что именно не понятно то? я чесно не понял... smile 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
akizelokro
Дата 1.10.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Крокодил
**


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

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



Предположу, что достопочтенный товарищ Савич писал не

Код

#ifdef SOMEFILE_CPP
#define SOMEFILE_CPP

...

#endif


а

Код

#ifndef SOMEFILE_CPP
#define SOMEFILE_CPP

...

#endif


Также предпоожу, что (насколько я трудно тебя понял) он пытается показать как функции хедера (.hpp,.h файл) возложить на файл с расщирением .cpp. Если это даже близко не так, то мне вас не близко не понять


--------------------
a = a + b; b = a - b; a = a - b;
PM MAIL   Вверх
apook
Дата 1.10.2007, 09:32 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



да точно 
Код
#ifndef
 а не 
Код
#ifdef
 и оказалось что все в порядке.... Но все-же UnrealMan и archimed7592 где вы увидели бред, да еще такой степени что понять невозможно?  smile 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
apook
Дата 1.10.2007, 09:49 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все разобраля! Действительно бредово получилось  smile  smile
Вот кусочек из примера Уолтера Савича
Код

#ifndef LIST_CPP
#define LIST_CPP
#include "list.h"  // Хотя в данном файле этого не требуется
                            // использование директивы #ifndef в файле list.h полезно
                            // для тех случаев, когда шаблон класса
                            // применяется в нескольких файлах программы. 
...
#endif

Смущает комментарий  "Хотя в данном файле этого не требуется" находящийся напротив включения #include "list.h", развивая мысль и убрав эту строку получаем ошибку .... has no been declared.
Запутал подлец с утра, а я напридумывал черти-че см мой вопрос выше


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 1.10.2007, 09:58 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  1.10.2007,  08:24 Найти цитируемый пост)
Извиняюсь я не на экзамене и даже не на уроке чтоб  формулировать суперточно.

Ты на форуме, где ты должен формулировать свои вопросы достаточно точно, чтобы получить адекватные ответы.
Ты нафлудил 782 поста и так и не научился, ни вопросы задавать, ни мысли формулировать, ни программировать.
На месте модераторов я бы давно тебе влепил бы не одно предупреждение ибо такая халатность и отсутствие уважения к форумчанам(мы тебе чё, обязаны, что ль?) простительны только ньюбам.

Цитата(apook @  1.10.2007,  09:49 Найти цитируемый пост)
Вот кусочек из примера Уолтера Савича

Я его не читал, но если кусочек не сильно выдран из контекста, то могу лишь посоветовать Савичу пустить себе пулю в лоб, пока это не сделал кто-то другой.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 1.10.2007, 11:04 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



archimed7592 твои претензии выдраны из контекста
Цитата(archimed7592 @  1.10.2007,  09:58 Найти цитируемый пост)
мы тебе чё, обязаны, что ль?
Я ведь не к тебе именно обратился, а к тем кто непосчитает вопрос флудом и не против посоветовать.. 

Цитата(archimed7592 @  1.10.2007,  09:58 Найти цитируемый пост)
нафлудил 782 поста
 зачем так преувеличивать?

Цитата(archimed7592 @  1.10.2007,  09:58 Найти цитируемый пост)
 ни вопросы задавать, ни мысли формулировать, ни программировать.
 особенно третье, я никому не обязан научиться программировать тем более я занимаюсь этим (обучением) 2-ой год пошел...

Че-за крутизна, не нравлюсь не общайся




--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
UnrealMan
Дата 1.10.2007, 12:22 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Маленький совет: разберись с тем, что такое единица трансляции и правило одного определения, и узнай, что делают директивы include, ifndef, define, endif. Далее, если с логическим мышлением всё в порядке, тебе станет ясно, что и как надо делать.
PM MAIL   Вверх
archimed7592
Дата 1.10.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  1.10.2007,  11:04 Найти цитируемый пост)
Че-за крутизна, не нравлюсь не общайся

"Крутизна" как раз таки исходит с твоей стороны:
Цитата(apook @  1.10.2007,  08:24 Найти цитируемый пост)
Извиняюсь я не на экзамене и даже не на уроке чтоб  формулировать суперточно.


А это:
Цитата(apook @  1.10.2007,  08:24 Найти цитируемый пост)
ну ты -же понял о чем я... че придераешься?

Если бы я понял, я бы наверное не спрашивал бы тебя понял ли ты сам.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 1.10.2007, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



apook, согласен с UnrealMan и archimed7592. И от себя еще раз попрошу читабельно формулировать задачи, желательно используя знаки препинания в предложениях.

За код, приведенный тобой вначале, я бы послал автора штудировать Страуструпа и других хороших товарищей, так как в .cpp-файлах конструкция вида #ifndef... #define........#endif бессмысленна, потому что они и так транслируются один раз. Применима она как раз в хедерах, которые могут включаться не в один .cpp-файл.



--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
zkv
Дата 1.10.2007, 16:03 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



apook, правда непонятно нифига, не заводись smile
Первый раз вижу защиту от двойного подключения в cpp-файле...

пропустил страницу обсуждения...

Это сообщение отредактировал(а) zkv - 1.10.2007, 16:18
PM MAIL   Вверх
apook
Дата 1.10.2007, 17:22 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(zkv @  1.10.2007,  16:03 Найти цитируемый пост)
Первый раз вижу защиту от двойного подключения в cpp-файле

Программирование на С++, 4 издание, Уолтер Савич, стр 649
специально нашел в инете электронный вариант прикрепил как-раз эту страницу. Надо поуглубленней изучит книгу тут говорят неплохой автор smile

Это сообщение отредактировал(а) apook - 1.10.2007, 18:09

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  _.zip 117,33 Kb


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
Daevaorn
Дата 1.10.2007, 17:40 (ссылка) |   (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(apook @  1.10.2007,  18:22 Найти цитируемый пост)
Программирование на С++, 4 издание, Уолтер Савич, стр 649

Робски тоже "книги" пишет...
PM MAIL WWW   Вверх
archimed7592
Дата 1.10.2007, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  1.10.2007,  17:22 Найти цитируемый пост)
Программирование на С++, 4 издание, Уолтер Савич, стр 649

А теперь разуй глаза и посмотри на 648 страницу. Это не модуль трансляции. Это обычный заголовочный файл с расширением .cpp
[не стал читать полностью, но, по всей видимости это пример того как можно "разделить" интерфейс от реализации в случае шаблонов]

Это сообщение отредактировал(а) archimed7592 - 1.10.2007, 18:13


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
apook
Дата 1.10.2007, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(archimed7592 @  1.10.2007,  18:05 Найти цитируемый пост)
Это не модуль трансляции
Впрочем я что-то подобное говорил в первом вопросе по этому поводу. Все-равно твоя реакция предвзята, че так сразу в штыки...



--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
archimed7592
Дата 1.10.2007, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


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

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



Цитата(apook @  1.10.2007,  18:15 Найти цитируемый пост)
Все-равно твоя реакция предвзята, че так сразу в штыки...

Ни хрена себе предвзята. 5 страниц флуду ни о чём.
Давай не будем обсуждать меня или тебя, а будем обсуждать твою проблему. Она исчерпана?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1697 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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