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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2017, 13:56   #1
Mercuri
 
Регистрация: 27.10.2016
Сообщений: 7
По умолчанию Пример из учебника

Народ, при выполнении примера из учебника, произошла ошибка и как следствие, программа не скомпилировалась. Вот собственно код самой программы:

Код:
//tmp2tmp.cpp -- шаблонные друзья для шаблонного класса
#include <iostream>
#include <conio.h>
using namespace std;

//прототипы шаблонов
template <typename T> void counts();
template <typename T> void report(T &);

//шаблонный класс
template <typename TT>
class HasFriendT
{
	private:
	   TT item;
	   static int ct;
	public:
	   HasFriendT(const TT & i) : item(i) {ct++;}
	   ~HasFriendT( ) {ct--;}
	   friend void counts<TT>();
	   friend void report<>(HasFriendT<TT> &);
};
template <typename T>
int HasFriendT<T>::ct = 0;

//определение дружественных функции для шаблона
template <typename T>
void counts()
{
	cout << "template size: " << sizeof(HasFriendT<T>) << "; "; //размер шаблона
	cout << "template counts(): " << HasFriendT<T>::ct << endl;
}
template <typename T>
void report(T & hf)
{
	cout << hf.item << endl;
}

int main()
{
	counts<int>();
	HasFriendT<int> hfi1(10);
	HasFriendT<int> hfi2(20);
	HasFriendT<double> hfdb(10.5);
	report(hfi1);
	report(hfi2);
	report(hfdb);
	cout << "counts<int>() output:\n";
	counts<int>();
	cout << "counts<double> ( ) output: \n";
	counts<double>();
	getch();
	return 0;
}
Программа выдает следующее сообщение:


Кто сможет подсказать в чем дело?

Последний раз редактировалось Mercuri; 07.10.2017 в 15:31.
Mercuri вне форума Ответить с цитированием
Старый 07.10.2017, 16:00   #2
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Могу предположить что требуется указатель на объект.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 07.10.2017, 17:59   #3
Mercuri
 
Регистрация: 27.10.2016
Сообщений: 7
По умолчанию

WorldMaster, дело в том, что это взятый из учебника пример без изменений. У автора он видимо скомпилировался, т.к. после примера есть результат, возможно автор забыл добавить строку, или переводчики допустили ошибку, или компилятор не поддерживает данный код, но в итоге не выходит. А где необходимо указатель поставить?
Mercuri вне форума Ответить с цитированием
Старый 07.10.2017, 18:43   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Обновляйте компилятор. Все работает.
https://ideone.com/jToOkS
p51x вне форума Ответить с цитированием
Старый 07.10.2017, 19:52   #5
Mercuri
 
Регистрация: 27.10.2016
Сообщений: 7
По умолчанию

Спасибо. Странно, вроде пользуюсь Embarcadero® C++Builder XE8, а код все равно не компилируется, как и еще один пример по теме шаблонов. Пример из учебника 2011 года.
Mercuri вне форума Ответить с цитированием
Старый 07.10.2017, 21:06   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

http://docwiki.embarcadero.com/RADSt...pliance_Status

Там похоже почти весь С++11 не поддерживается в 32-бит компиляторе, только в 64-бит, который не их, а на основе Clang.

Ну и в ХЕ10 32-бит уже тоже Clang.
http://docwiki.embarcadero.com/RADSt...B%2B_Compilers
http://docwiki.embarcadero.com/RADSt...B%2B_Compilers
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.10.2017, 23:24   #7
Mercuri
 
Регистрация: 27.10.2016
Сообщений: 7
По умолчанию

Выбирая среду программирования была надежда что уж кто-кто, а Embarcadero потянет любой код, к сожалению это не так, как показала практика.
Mercuri вне форума Ответить с цитированием
Старый 07.10.2017, 23:30   #8
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Странная надежда, они вроде никогда не отличались особым следованием стандарту, там ж свой отдельный мир и вообще основной их продукт наверно Дельфи, а не Билдер.
Ну и вот в итоге выкинули свой компилятор и взяли Clang
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 07.10.2017, 23:38   #9
Mercuri
 
Регистрация: 27.10.2016
Сообщений: 7
По умолчанию

Ну в общем то так и есть)) хотя для новичков которые только осваивают язык, приемы программирования, это не так очевидно)))
Mercuri вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пример из учебника Mercuri C++ Builder 2 27.10.2016 19:27
Программа на C# с вычислениями математических функций (пример из учебника) не компилируется. 1911A1 Помощь студентам 3 15.07.2011 18:42
Программа из учебника Freeman-des Помощь студентам 4 22.11.2010 19:56
Пример из учебника valerij Microsoft Office Excel 11 20.06.2008 15:43