2014-11-11 2 views
3

Из кода ниже ясно, что я пытаюсь преобразовать int в строку.Попытка конвертировать int в строку

#include <sstream> 
#include <string> 
#include <iostream> 

int num = 1; 
ostringstream convert; 
convert << num; 
string str = convert.str(); 

Однако я получаю сообщение об ошибке

Line 7: error: expected constructor, destructor, or type conversion before '<<' token

Что я делаю не так? Это в основном тот же фрагмент кода, который каждый рекомендует преобразовать int в строку.

+1

Do не у вас есть 'основной()' функцию? (+1 для обеспечения небольшого примера кода, который позволяет нам воспроизвести ошибку!) – moooeeeep

+0

Ох, вот и все. Приветствия. –

+1

Есть ли код, который не требует main()? –

ответ

3

Здесь есть 2 проблемы, сначала вам не хватает main, поэтому этот код недействителен на верхнем уровне (например, внешний main/functions/etc). Когда вы компилируете свою программу, компилятор ищет main, а затем начинает выполнение кода с этого момента. Есть несколько вещей, которые разрешены до основного, но это выражение не является одним из них. Причина в том, что вы пытаетесь вычислить что-то, но поток программ никогда не идет туда, поэтому как компилятор может решить, когда выполнять этот код? Важно, какой порядок, который происходит в и перед основным, не определен. Это утверждение не является побочным эффектом, так что сообщение об ошибке, о котором вы писали, жалуется. Компилятор ищет основную информацию, так как в этом случае код начнет выполняться, поэтому вы хотите поместить свой код в основном по этой причине (я знаю, что это больше для этого, и это не на 100% точно, но я думаю, что это хорошая отправная точка/эвристика для новых программистов, чтобы лучше понять). Возможно, вы захотите прочитать этот вопрос. Is main() really start of a C++ program?

Во-вторых, существует проблема с пространствами имен. ostringstream находится в пространстве имен std, вместо этого попробуйте std::ostringstream. Ситуация с string аналогична, для этого используется std::string.

С учетом этих изменений код будет в конечном итоге выглядеть примерно так:

int main(){ 
    int num = 1; 
    std::ostringstream convert; 
    convert << num; //This isn't allowed outside of main 
    std::string str = convert.str(); 
    std::cout << str; 
    return 0; 
} 
1
#include <string> 
#include <sstream>  // std::stringstream 
#include <iostream> 

int main() 
{ 
    int num = 1; 
    std::stringstream convert; 
    convert << num; 
    std::string str = convert.str(); 
    std::cout << str ; 
    return 0; 
} 
+0

Просто чтобы вы знали: http://www.parashift.com/c++-faq/main-returns-int.html – shuttle87

+0

@ shuttle87 Спасибо :) – Emadpres

Смежные вопросы