Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2012, 12:13   #11
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
К тому же, реализация inline-функции должна быть в каждой единице трансляции, и если Вы будете собирать программу из нескольких файликов, то получите фейл.
Какой ещё фейл? Что мешает определять функцию в декларативной части класса, а потом пользовать этот класс хоть в 100500 единицах трансляции?
_Bers вне форума Ответить с цитированием
Старый 23.05.2012, 12:32   #12
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Цитата:
Какой ещё фейл? Что мешает определять функцию в декларативной части класса, а потом пользовать этот класс хоть в 100500 единицах трансляции?
Согласен, глупость сказал. Но это в любом случае лишняя работа компилятору.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 23.05.2012, 13:26   #13
Che-Che
 
Аватар для Che-Che
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию

Granus прав. Вся проблема в том, что компиль ругается на него.
Вопрос состоит в том, что являлось альтернативой списка инициализации до 11 стандарта языка.
Che-Che вне форума Ответить с цитированием
Старый 23.05.2012, 13:41   #14
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Согласен, глупость сказал. Но это в любом случае лишняя работа компилятору.
Если изменять строение класса, то перекомпилироваться будут все его клиенты (все ед. трансляции). И это никак не зависит от того, где именно реализованы методы класса (в хэдере, или в спп).

Если не изменять строение класса, то сами по себе inline методы будут для компилятора копейками.

Что бы на крупном проекте не загнобить время компиляции, нужно стараться максимально все что только возможно цеплять через .cpp, а не через .hpp
И тогда даже оч крупный проект будет быстро компилироваться.

Другое дело.. как сделать так, что бы он ещё и линковался быстро...
_Bers вне форума Ответить с цитированием
Старый 23.05.2012, 13:45   #15
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Che-Che Посмотреть сообщение
Granus прав. Вся проблема в том, что компиль ругается на него.
Вопрос состоит в том, что являлось альтернативой списка инициализации до 11 стандарта языка.
Если в структуре отсутствуют явные конструкторы, то можно использовать списки инициализации:

Код:
struct SRect { float x,y, sizeX, sizeY };

SRect rect = { 10,10,10,10};
Если присутствуют явные конструкторы, то и инициализация может быть только через эти конструкторы:

Код:
struct SRect 
{ 
   SRect(const float X, const float Y, const float SizeX, const float SizeY)  :     x(X), y(Y), sizeX(SizeX),sizeY(SizeY){}
   float x,y, sizeX, sizeY
};

SRect rect(10,10,10,10);
_Bers вне форума Ответить с цитированием
Старый 23.05.2012, 14:49   #16
Che-Che
 
Аватар для Che-Che
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию

Ок, сейчас 11 студия встанет и попробую)
Che-Che вне форума Ответить с цитированием
Старый 26.05.2012, 14:58   #17
Che-Che
 
Аватар для Che-Che
 
Регистрация: 21.05.2012
Сообщений: 5
По умолчанию

Решил использовать явный конструктор. Но у меня опять некоторая несостыковка.
При просмотре в отладчике работы конструктора все значения присваиваются правильно, но при просмотре уже самого элемента происходит потеря одного элемента.
вот код:
Код:
answers::answers(char * f,char * s,char * t,char * ff){
		variant[0] = new char[strlen(f)+1];
		strcpy(variant[0],f);
		variant[1] = new char[strlen(s)+1];
		strcpy(variant[1],s);
		variant[2] = new char[strlen(t)+1];
		strcpy(variant[2],t);
		variant[3] = new char[strlen(ff)+1];
		strcpy(variant[3],ff);
	}
Код:
answers a("a","b","c","d");
После инициализации

Che-Che вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц