C++ toupper symbol clash?
Jonny Grant
jg@jguk.org
Sat Aug 5 02:02:00 GMT 2017
Hello
I thought functions can have the same name, because params are different
in C++
eg my
void tolower(std::string & str)
But I get a build error. I had expected not to conflict
I'm not on this list, so please cc me in any replies.
Thank you, Jonny
int toupper( int ch );
http://en.cppreference.com/w/cpp/string/byte/toupper
$ g++ -O2 -Wall -Wextra -Wpedantic -o main main.cpp
main.cpp: In function âvoid tolower(std::__cxx11::string&)â:
main.cpp:23:66: error: no matching function for call to
âtransform(std::__cxx11::basic_string<char>::iterator,
std::__cxx11::basic_string<char>::iterator,
std::__cxx11::basic_string<char>::iterator, <unresolved overloaded
function type>)â
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
^
In file included from /usr/include/c++/5/algorithm:62:0,
from main.cpp:3:
/usr/include/c++/5/bits/stl_algo.h:4164:5: note: candidate:
template<class _IIter, class _OIter, class _UnaryOperation> _OIter
std::transform(_IIter, _IIter, _OIter, _UnaryOperation)
transform(_InputIterator __first, _InputIterator __last,
^
/usr/include/c++/5/bits/stl_algo.h:4164:5: note: template argument
deduction/substitution failed:
main.cpp:23:66: note: couldn't deduce template parameter â_UnaryOperationâ
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
^
In file included from /usr/include/c++/5/algorithm:62:0,
from main.cpp:3:
/usr/include/c++/5/bits/stl_algo.h:4201:5: note: candidate:
template<class _IIter1, class _IIter2, class _OIter, class
_BinaryOperation> _OIter std::transform(_IIter1, _IIter1, _IIter2,
_OIter, _BinaryOperation)
transform(_InputIterator1 __first1, _InputIterator1 __last1,
^
/usr/include/c++/5/bits/stl_algo.h:4201:5: note: template argument
deduction/substitution failed:
main.cpp:23:66: note: candidate expects 5 arguments, 4 provided
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
//g++ -O2 -Wall -Wextra -Wpedantic -o main main.cpp
#include <algorithm>
#include <string>
#include <iostream>
void myfunc(int i)
{
i = 10;
std::cout << i;
}
void myfunc(std::string i)
{
i = "10";
std::cout << i;
}
void tolower(std::string & str)
{
std::transform(str.begin(), str.end(), str.begin(), ::tolower);
}
int main (void)
{
std::string caps = "FOO";
tolower(caps);
return 0;
}
More information about the Gcc-help
mailing list