Reputation: 16061
Straight into business: I have code looking roughly like this:
char* assemble(int param)
{
char* result = "Foo" << doSomething(param) << "bar";
return result;
}
Now what I get is:
error: invalid operands of types ‘const char [4]’ and ‘char*’ to binary ‘operator<<’
Edit:
doSomething
returns a char*
.
So, how do I concatenate these two?
Additional info:
Compiler: g++ 4.4.5 on GNU/Linux 2.6.32-5-amd64
Upvotes: 1
Views: 2673
Reputation: 26171
"Foo"
and "Bar"
are literals, they don't have the insertion (<<
) operator.
you instead need to use std::string
if you want to do basic concatenation:
std::string assemble(int param)
{
std::string s = "Foo";
s += doSomething(param); //assumes doSomething returns char* or std::string
s += "bar";
return s;
}
Upvotes: 2
Reputation: 153909
"Foo"
and "bar"
have type char const[4]
. From the error message,
I gather that the expression doSomething(param)
has type char*
(which is suspicious—it's really exceptional to have a case where
a function can reasonably return a char*
). None of these types
support <<
.
You're dealing here with C style strings, which don't support
concatenation (at least not reasonably). In C++, the concatenation
operator on strings is +
, not <<
, and you need C++ strings for it to
work:
std::string result = std::string( "Foo" ) + doSomething( param ) + "bar";
(Once the first argument is an std::string
, implicit conversions will
spring into effect to convert the others.)
But I'd look at that doSomething
function. There's something wrong
with a function which returns char*
.
Upvotes: 1
Reputation: 38825
Well, you're using C++, so you should be using std::stringstream
:
std::string assemble(int param)
{
std::stringstream ss;
ss << "Foo" << doSomething(param) << "bar";
return ss.str();
}; // eo assemble
Upvotes: 3