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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ошибка в программе 
:(
    Опции темы
Julia9311
Дата 25.12.2012, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



программа выдает ошибку

c:\program files\microsoft visual studio\myprojects\шаблон\шаблон.cpp(30) : error C2065: 'n' : undeclared identifier 

Код

#include <iostream>
using namespace std;
 
template <class T>            //прототип шаблона семейства функций
T abs(T);
//--------------------------------------------------------------
int main()
{
int i1 = 5;     //инииализация переменных разных типов и знаков
int i2 = -6;
long l1 = 70000L;
long l2 = -80000L;
double d1 = 9.95;
double d2 = -10.15;
                               //вызовы функций
cout << "\nabs(" << i1 << ")=" << abs<>(i1);        //abs(int)
cout << "\nabs(" << i2 << ")=" << abs<int>(i2);     //abs(int)
cout << "\nabs(" << l1 << ")=" << abs<>(l1);        //abs(long)
cout << "\nabs(" << l2 << ")=" << abs<long>(l2);    //abs(long)
cout << "\nabs(" << d1 << ")=" << abs<>(d1);        //abs(double)
cout << "\nabs(" << d2 << ")=" << abs<double>(d2);  //abs(double)
    cout << endl;
    std::cin.get();
return 0;
}
//--------------------------------------------------------------
template <class T>             //шаблон семейства функций T abs(T n)
T abs(T n)
{
return (n < 0) ? -n : n;
}

PM MAIL   Вверх
Фантом
Дата 26.12.2012, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



С программой все в порядке. Вам надо сменить компилятор на что-нибудь нормальное.
PM   Вверх
Julia9311
Дата 26.12.2012, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, скорее всего из-за компилятора) у меня шестая студия
PM MAIL   Вверх
Фантом
Дата 26.12.2012, 00:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


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

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



Цитата(Julia9311 @  26.12.2012,  01:32 Найти цитируемый пост)
Да, скорее всего из-за компилятора) у меня шестая студия 

Не "скорее всего", а совершенно точно. Нужен как минимум более свежий MSVS, а лучше - просто какой-нибудь нормальный компилятор, а не это поделие от MS.
PM   Вверх
volatile
Дата 26.12.2012, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Шаблон должен быть виден на момент компиляции, перенесите его выше main.
Шестая студия - нормальный компилятор для 1996 года. (17 лет уже, слава богу дедушке)

PM MAIL   Вверх
baldina
Дата 26.12.2012, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



в данном случае он достаточно виден))
http://codepad.org/J7CnInX3

Добавлено через 12 минут и 55 секунд
вообще говоря, присутствие реализации шаблонной функции в файле (единице трансляции), где она используется, не обязательно.
Цитата

14.1.9 A non-exported non-class template must be defined in every translation unit in which it is implicitly instantiated (14.7.1),
unless the corresponding specialization is explicitly instantiated (14.7.2) in some translation unit; no diagnostic is required.

PM MAIL   Вверх
volatile
Дата 26.12.2012, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @ 26.12.2012,  10:26)
присутствие реализации шаблонной функции в файле (единице трансляции), где она используется, не обязательно.
Цитата

14.1.9 A non-exported non-class template must be defined in every translation unit in which it is implicitly instantiated (14.7.1)

baldina, не находите ли вы, что ваши выводы, напрямую противоречат вашей же цитате и стандарта.  smile

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


Эксперт
****


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

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



нет. читать внимательней (от слова unless)
PM MAIL   Вверх
volatile
Дата 26.12.2012, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @  26.12.2012,  10:26 Найти цитируемый пост)
unless the corresponding specialization 


baldina, где вы там специализацию увидели ?  smile 
PM MAIL   Вверх
baldina
Дата 27.12.2012, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



не понял, там - это где?

Добавлено через 8 минут и 53 секунды
Цитата(baldina @  26.12.2012,  10:26 Найти цитируемый пост)
unless the corresponding specialization is explicitly instantiated (14.7.2) in some translation unit

если соответствующая специализация не инстанцирована явно в какой-либо единице трансляции. т.е. если где-то она инстанцирована явно, определения в данной единице трансляции не требуется. отсюда следует, что в общем случае
Цитата(baldina @  26.12.2012,  10:26 Найти цитируемый пост)
присутствие реализации шаблонной функции в файле (единице трансляции), где она используется, не обязательно

а что в приведенном коде есть явная специализация я не говорил.
PM MAIL   Вверх
baldina
Дата 27.12.2012, 00:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



btw если явная специализация не используется, шаблон функции должен быть определен в каждой единице трансляции. нигде при этом не сказано, что он должен быть определен до первого использования. достаточно объявления. поэтому код ТС корректен, переносить определение выше main() не требуется.

PM MAIL   Вверх
volatile
Дата 27.12.2012, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @  27.12.2012,  00:32 Найти цитируемый пост)
нигде при этом не сказано, что он должен быть определен до первого использования. 

В стандарте много чего не сказано.
Можно слишком далеко зайти, считая, что можно делать все что вздумается, ссылаясь на то что в стандарте этого не сказано ...

Цитата(baldina @  26.12.2012,  10:26 Найти цитируемый пост)
14.1.9 A non-exported non-class template must be defined in every translation unit in which it is implicitly instantiated (14.7.1),

А это весьма красноречиво.

Спасибо за цитату. Мне бы не пришло в голову искать ее применительно к компилятору 1996 года.  
Вообще, забавен сам факт применения стандарта, к компилятору выпущенному еще до выхода всяких стандартов.

Причем, обратите внимание, я даже не сомневаюсь что поведение VC6, (хоть и весьма логично), но не удовлетворяет нынешнему стандарту).
Просто вы привели цитату, как раз в пользу VC6 (вероятно, сами не желая того.)
 smile

PM MAIL   Вверх
baldina
Дата 27.12.2012, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

Цитата(volatile @  27.12.2012,  17:32 Найти цитируемый пост)
Можно слишком далеко зайти, считая, что можно делать все что вздумается, ссылаясь на то что в стандарте этого не сказано ...

конечно, я не совсем это имел в виду. но в общем то верно: если и программа и компилятор стандарту удовлетворяют, все должно работать.
и я не очень понимаю что значит "слишком далеко", и чего в этом плохого. правила языка формальны, а не эмоциональны  smile

Добавлено через 1 минуту и 8 секунд
volatile, мне кажется вы зря ...э-э... так эмоциональны. опережающее объявление для шаблона, а также разделение объявления и реализации (с целью ускорения компиляции) - законное и обычное дело. применяется, правда, редко из-за доп. затрат на организацию кода. проще просто определить шаблон выше по тексту.
PM MAIL   Вверх
volatile
Дата 27.12.2012, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(baldina @  27.12.2012,  17:54 Найти цитируемый пост)
volatile, мне кажется вы зря ...э-э... так эмоциональны


baldina, я абсолютно спокоен.
С наступающим вас!
 smile 
PM MAIL   Вверх
baldina
Дата 28.12.2012, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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

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

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

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

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


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

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


 




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


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

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