Как объединить константный массив символов и указатель на массив символов? - PullRequest
1 голос
/ 14 марта 2012

Прямо в бизнес: мой код выглядит примерно так:

char* assemble(int param)
{
    char* result = "Foo" << doSomething(param) << "bar";
    return result;
}

Теперь я получаю:

error: invalid operands of types ‘const char [4]’ and ‘char*’ to binary ‘operator<<’

Редактировать: doSomethingвозвращает char*.

Итак, как мне объединить эти два?

Дополнительная информация:
Компилятор: g ++ 4.4.5 в GNU / Linux 2.6.32-5-amd64

Ответы [ 3 ]

3 голосов
/ 14 марта 2012

Ну, вы используете C ++, поэтому вы должны использовать std::stringstream:

std::string assemble(int param)
{
    std::stringstream ss;
    ss << "Foo" << doSomething(param) << "bar";
    return ss.str();
}; // eo assemble
2 голосов
/ 14 марта 2012

"Foo" и "Bar" являются литералами, у них нет оператора вставки (<<).

вместо этого вам нужно использовать std::string, если вы хотите выполнить базовую конкатенацию:

std::string assemble(int param)
{
    std::string s = "Foo";
    s += doSomething(param); //assumes doSomething returns char* or std::string
    s += "bar";
    return s;
}
1 голос
/ 14 марта 2012

"Foo" и "bar" имеют тип char const[4].Из сообщения об ошибке я понял, что выражение doSomething(param) имеет тип char* (что является подозрительным - действительно исключительный случай, когда функция может разумно вернуть char*).Ни один из этих типов не поддерживает <<.

Здесь вы имеете дело со строками в стиле C, которые не поддерживают конкатенацию (по крайней мере, не разумно).В C ++ оператор конкатенации в строках имеет вид +, а не <<, и для его работы необходимы строки C ++:

std::string result = std::string( "Foo" ) + doSomething( param ) + "bar";

(Если первый аргумент является std::string, неявные преобразованиявступит в силу, чтобы преобразовать остальных.)

Но я бы посмотрел на эту doSomething функцию.Что-то не так с функцией, которая возвращает char*.

...