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

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

Восстановить пароль Регистрация
 
skvor
640KB мне хватило на всё.
118 / 49 / 2
Регистрация: 07.06.2009
Сообщений: 442
27.09.2011, 12:52     Конфликт имени функции в шаблоне #1
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++ :р - - где эту фигню отключить?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
27.09.2011, 13:18     Конфликт имени функции в шаблоне #2
http://www.cplusplus.com/reference/std/functional/plus/

Добавлено через 38 секунд
Цитата Сообщение от skvor Посмотреть сообщение
где эту фигню отключить?
используй теги С++
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
27.09.2011, 13:23     Конфликт имени функции в шаблоне #3
skvor, на какие строки конкретно ругается?
LosAngeles
Заблокирован
27.09.2011, 13:24     Конфликт имени функции в шаблоне #4
vc2010 откомпилировал, странно, что у тебя ругается. Можешь так ещё попробовать написать
C++
1
 std::cout<<plus<std::string>(s1,s2)<<std::endl;
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-я работает как надо.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
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;
}
Yandex
Объявления
27.09.2011, 14:26     Конфликт имени функции в шаблоне
Ответ Создать тему

Метки
пространство имен, шаблоны
Опции темы

Текущее время: 18:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru