Straight into business: I have code looking roughly like this:
char* assemble(int param)
{
char* result = \"Foo\" << doSomething(param) << \"bar\
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
"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*
.
"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;
}