Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 2 [3]  Все   Вниз
  Печать  
Автор Тема: Заголовочные файлы  (Прочитано 84115 раз)
0 Пользователей и 11 Гостей смотрят эту тему.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #60 : 02-04-2005 21:21 » new

Цитата
Qt/Windows can be used with Visual Studio .Net, Microsoft Visual C++ 6.0 or Borland Builder 5 (bcc32 5.5). The distribution includes qmake, a build tool that creates makefiles for Microsoft's nmake and for Borland's make as well as project files for Microsoft Visual C++ (.dsp files).
http://doc.trolltech.com/3.3/qmake-manual.html
« Последнее редактирование: 19-12-2007 21:47 от Алексей1153++ » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #61 : 05-04-2005 08:43 » 

А зачем сразу Qt? Чем WinAPI не устраивает?
Записан

Удачного всем кодинга! -=x[PooH]x=-
Migmile
Помогающий

ru
Offline Offline

« Ответ #62 : 05-04-2005 10:13 » 

IMXO, для начала надо начинать с начала:)
Надо разобраться с основами, а затем уже смотреть, что может облегчить жизнь
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #63 : 05-04-2005 17:58 » 

Михалыч, библиотеки пропиши в пути VC, полезно переменную QTDIR назначить, ну и moc надо как-то воспользоваться.

Гиморрой с этой виндой - чего ценного не прикручивай, а все криво висит.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #64 : 06-04-2005 06:48 » 

потому что у меня есть лит-ра для него и бибилиотеки, потомучто он платформенно   независим, потомучто он одинаков и для Linux, и для Windows и др.

Для него - кого? Qt и есть библиотека!!! "Он одинаков" - написание графического интерфейса одинаково, а написание бизнес-логики? Наличие лит-ры я не считаю основополагающим фактором выбора между Qt и WinAPI. На WinAPI доки найти горозда проще (даже здесь есть)!!! Тем более (точно не знаю, но скорее всего) Qt под Windows написана как раз на WinAPI. Так зачем ограничивать себя интерфейсом Qt?!! На мой взгляд MFC (или VCL) гораздо шире и практичней. Qt оправдывает себя только тогда, когда планируется перенос проги с Винды на Линух и обратно, и все-равно простого перехода не получится(!), в таком случае лучше Яву учить.
Записан

Удачного всем кодинга! -=x[PooH]x=-
PooH
Глобальный модератор

ru
Offline Offline
Пол: Мужской
... и можно без хлеба!


« Ответ #65 : 06-04-2005 06:54 » 

Короче, компилирует, линкует, проверяет на ошибки, а итог, т.е. саму прогу, не выводит. И еще: не могу найти файла с расширением .exe уже скомпилируемой проги.

Что значит "проверяет на ошибки"? - это включено в компиляцию и линкование. Линкование - сбор объектных файлов в исполняемый файл или библиотеку! Или линкования не происходит или происходит с ошибками. Каталог для исполняемого файла определяется в параметрах проекта, даже два каталога для Debug версии и для Release. Взависимости от типа сборки, исполняемый файл будет или в одном каталоге или в другом. Смотри параметры проекта (которые ты сам же и должен был настраивать)
« Последнее редактирование: 06-04-2005 06:57 от PooH » Записан

Удачного всем кодинга! -=x[PooH]x=-
Migmile
Помогающий

ru
Offline Offline

« Ответ #66 : 06-04-2005 09:06 » 

Короче, компилирует, линкует, проверяет на ошибки, а итог, т.е. саму прогу, не выводит. И еще: не могу найти файла с расширением .exe уже скомпилируемой проги.
Или линкования не происходит или происходит с ошибками. Каталог для исполняемого файла определяется в параметрах проекта, даже два каталога для Debug версии и для Release.
а заодно проверь тип пректа - если создается dll, то exe-шник ты вряд-ли найдешь:)
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #67 : 07-01-2006 13:35 » 

Набрёл на тему через поисковик.

Возвращаясь к самому началу.

Имеем Borland C++ 3.1. Имеем ошибку "Linker error: Undefined symbol ..."

Как она получается.

Имеется проект (не важно, DOS или Win - одинаково).

Тест #1.

// File : main.cpp
#include <stdio.h>
int main()
{
printf("Hello world!\n");
return 0;
}

Работает.

Тест #2.

// File : other.cpp
#include <stdio.h>
#include "other.h"
void f()
{
printf("Hello world!\n");
}

// File: other.h
#ifndef OTHER_H
#define OTHER_H
void f();
#endif

// File: main.cpp
#include "other.h"
int main()
{
f();
return 0;
}

Работает.

Тест #3.

// File : other.cpp
#include <stdio.h>
#include "other.h"
void C::m()
{
printf("Hello world!\n");
}

// File: other.h
#ifndef OTHER_H
#define OTHER_H
class C
{
public :
void m();
};
#endif

// File: main.cpp
#include "other.h"
int main()
{
C c;
c.m();
return 0;
}

Работает.

Тест #4.

// File : other.cpp
#include <stdio.h>
#include "other.h"
template<class T>
void C<T>::m()
{
printf("Hello world!\n");
}

// File: other.h
#ifndef OTHER_H
#define OTHER_H
template<class T>
class C
{
public :
void m();
private :
T t;
};
#endif

// File: main.cpp
#include "other.h"
int main()
{
C<int> c;
c.m();
return 0;
}

Linker Error: Undefined symbol c<int>::m() in module MAIN.CPP

Кто может объяснить, почему так происходит? Может настройки какие-нибудь влияют?
« Последнее редактирование: 07-01-2006 13:46 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #68 : 07-01-2006 13:39 » 

Да, забыл.

Тест #5.

// File: main.cpp
#include <stdio.h>
template<class T>
class C
{
public :
void m();
private :
T t;
};
template<class T>
void C<T>::m()
{
printf("Hello world!\n");
}
int main()
{
C<int> c;
c.m();
return 0;
}

Работает.
« Последнее редактирование: 07-01-2006 13:46 от dimka » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #69 : 07-01-2006 13:49 » 

Ну шаблоны классов и их реализация должна происходить в одном файле. Где то на форуме npak уже объяснял почему.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #70 : 07-01-2006 13:50 » 

Хм... в GCC тоже.

$ g++ main.cpp other.cpp
~/tmp/ccKvVi4X.o: In function `main':
~/tmp/ccKvVi4X.o(.text+0x18): undefined reference to `C<int>::m()'
collect2: ld returned 1 exit status

Значит дело не в старом компиляторе, а синтаксисе.
« Последнее редактирование: 19-12-2007 21:48 от Алексей1153++ » Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #71 : 07-01-2006 13:51 » 

Finch, ок, поищу.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #72 : 07-01-2006 14:11 » 

Цитата: npak
Для того, чтобы компилятор смог сгенерировать тела метов инстанциированного класса, необходимо, чтобы текст шаблона был видим в точке инстанциирования шаблона.  Перенеси все методы в заголовочный файл.

Для примера посмотри заголовки STL -- iostream, string, etc.  В них содержатся полные реализации стандартных шаблонов.

Понятно.

// File : other.cpp
#include "other.h"
void X::m()
{
c.m();
}

// File : other.h
#include <stdio.h>
template<class T>
class C
{
public :
void m();
private :
T t;
};
template<class T>
void C<T>::m()
{
printf("Hello world!\n");
}
class X
{
public :
void m();
private :
C<int> c;
};

// File : main.cpp
#include <other.h>
int main()
{
X x;
x.m();
return 0;
}

Работает.

Спасибо за подсказку.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
vananabu
Интересующийся

ru
Offline Offline

« Ответ #73 : 29-04-2011 17:03 » 

Подскажите, пожалуйста, можно ли добавить таблицу констант (таблицу S_box) в заголовочный файл:

const int sbox[256] ={
0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0x95, 0x83, 0x38,
0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16}
Записан
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #74 : 29-04-2011 17:24 » 

vananabu, нет, в заголовочном файле должна быть декларация идентификатора sbox с пометкой extern, а сама таблица должна быть в файле кода. В противном случае в разных объектных файлах окажутся копии одной и той же таблицы, что будет обнаружено редактором связей, и возникнет неопределённость.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Страниц: 1 2 [3]  Все   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines