Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
#1

Конфликт имени функции в шаблоне - C++

27.09.2011, 12:52. Просмотров 506. Ответов 5

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class x>
  x plus(const x &x1, const x &x2)
  { return x1+x2;
  }
 
int main(int argc, char *argv[], char *env[])
{ system("clear");
  int a=10,b=37;
  std::string s1="111",s2="222";
  std::cout<<plus(111,222)<<std::endl;
  std::cout<<plus(s1,s2)<<std::endl;
  std::cout<<s1+s2<<std::endl;
  std::cout<<plus(111.11,222.22)<<std::endl;
  std::cout<<plus(a,b)<<std::endl;
  std::cout<<plus(a,a)<<std::endl;
  return 0;
}
Если не использовать std::string (11 строка), то компилируется нормально, а если пытаться использовать plus() для строк, то компилятор пишет
/usr/include/c++/4.2/bits/stl_function.h: In function 'int main(int, char**, char**)':
/usr/include/c++/4.2/bits/stl_function.h:134: error: 'template<class _Tp> struct std:lus' is not a function,
test.cpp:30: error: conflict with 'template<class x> x plus(const x&, const x&)'
test.cpp:40: error: in call to 'plus'
если переименовать plus() в, допустим, plus33(), то всё снова компилируется.

Поясните по-русски, что такое
'template<class _Tp> struct std:lus' is not a function
я так понял, что в std уже использована "plus" (правда не знаю что это), но почему это конфликтует с std::string, ведь моя функция plus() описана вне std?

ЗЫ, смайлики конфликтуют с C++ :р - - где эту фигню отключить?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.09.2011, 12:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конфликт имени функции в шаблоне (C++):

Ошибка в шаблоне функции: "Отсутствуют экземпляры шаблон функции, соответствующие списку аргументов" - C++
#include &lt;iostream&gt; #include &lt;iterator&gt; #include &lt;map&gt; #include &lt;Windows.h&gt; #include &lt;functional&gt; #include &lt;string&gt; #include...

Ошибка в шаблоне функции - C++
Доброго времени суток. У меня проблема с функцией для чтения таблицы из файла, которая спокойно работает с типами int и float, но не хочет...

Переопределение функции в шаблоне - C++
Подскажите, в пустом проекте работает следующий код #include &lt;utility&gt; #include &lt;type_traits&gt; #include &lt;cstdio&gt; #include...

Объявление функции в шаблоне - C++
Здравствуйте. Как правильно объявить в шаблонном классе оператор / функцию: без указания типа: const Polynomial operator+(const...

Ошибка с типами в шаблоне функции - C++
1&gt;c:\users\nano\desktop\visual studio\homework\homework\homework.cpp(10): error C2563: несоответствие в списке формальных параметров ...

Необъявленный идентификатор в шаблоне функции - C++
Добрый вечер! Пишу простенькую программку, но возникла проблема в коде: #include &lt;iostream&gt; using namespace std; template...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
LosAngeles
Заблокирован
27.09.2011, 13:18 #2
http://www.cplusplus.com/reference/std/functional/plus/

Добавлено через 38 секунд
Цитата Сообщение от skvor Посмотреть сообщение
где эту фигню отключить?
используй теги С++
1
sandye51
программист С++
684 / 586 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
27.09.2011, 13:23 #3
skvor, на какие строки конкретно ругается?
0
LosAngeles
Заблокирован
27.09.2011, 13:24 #4
vc2010 откомпилировал, странно, что у тебя ругается. Можешь так ещё попробовать написать
C++
1
 std::cout<<plus<std::string>(s1,s2)<<std::endl;
1
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.09.2011, 13:58  [ТС] #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
template <class x>
  x plus(const x &x1, const x &x2)
  { return x1+x2;
  }
 
int main(int argc, char *argv[], char *env[])
{ std::string s1="111",s2="222";
  std::cout<<plus(s1,s2)<<std::endl;
  std::cout<<plus<std::string>(s1,s2)<<std::endl;
  return 0;
}
/usr/include/c++/4.2/bits/stl_function.h: In function 'int main(int, char**, char**)':
/usr/include/c++/4.2/bits/stl_function.h:134: error: 'template<class _Tp> struct std::рlus' is not a function,
test.cpp:3: error: conflict with 'template<class x> x plus(const x&, const x&)'
test.cpp:9: error: in call to 'plus'
вобщем, нифига не понял, компилирую gcc-ом.
Если 9-ую строку закоментировать, то 10-я работает как надо.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
27.09.2011, 14:26 #6
Вообще, никакого конфликта cо стандартным std::plus быть не должно... Скорее всего это проблема данной версии gcc, потому как у меня таких проблем нет. Либо обнови компилятор, либо используй namespace:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
namespace my
{
    template<class x>
    x plus(const x &x1, const x &x2)
    {
            return x1 + x2;
    }
}
 
int main()
{
    std::string s1 = "111", s2 = "222";
    std::cout << my::plus(s1, s2) << std::endl;
    std::cout << my::plus<std::string> (s1, s2) << std::endl;
 
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2011, 14:26
Привет! Вот еще темы с ответами:

Непонятный параметр в шаблоне функции - C++
День добрый! Приведу пример шаблона функции: template &lt;typename T1&gt; void func(const T1 &amp;val = T1()) {} Если вызвать функцию со...

Ошибка в рекурсивном шаблоне функции - C++
Добавлено через 9 минут template &lt;int from,int much&gt; int getRangeSum(){ return from+getRangeSum&lt;from+1,much-1&gt;(); }; template &lt;int...

Ошибка с типами в шаблоне функции - C++
#include &lt;iostream&gt; #include &lt;typeinfo&gt; using namespace std; template&lt;typename T1, typename T2&gt; auto product(T1 v1, T2 v2,...

Вызов функции в шаблоне класса - C++
Выполняю,через шаблоны класса. Вообщем,в меню не могу вызвать функции. Скажите,все ли правильно в вызове функций? вот файл .h ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
27.09.2011, 14:26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru