2016-12-23 8 views
0

Я обновил свой проект на C++ с VS 2010 до 2015 года и у вас есть некоторые проблемы с его компиляцией. Заголовок метода выглядит следующим образом:std :: ofstream не принимает const char * for << operator

void CCodeGenerator::GenerateCode(const MachineExArray & AMachineExArray, 
    const MachineArrays & AMachineArrays, 
    std::ofstream & HeaderFile, 
    std::ofstream & SourceFile) 

Там есть строчка:

std::string HeaderDefine = path(OutputFilename).filename().generic_string(); 

for (std::string::iterator Iter = HeaderDefine.begin(); Iter != HeaderDefine.end(); Iter++) 
    *Iter = toupper((unsigned char)*Iter); 

HeaderDefine = "__" + HeaderDefine + "_H__"; 

HeaderFile << "#ifndef " << HeaderDefine << "\n"; // <-- This one 

Компилятор останавливается здесь и говорит:

Нет оператора "< <" не соответствует этим операнды. Типы операндов являются: станд :: ofstream < < Const символ [9]

я написал в C++ давно, но от того, что я помню, std::ofstream довольно либеральны и должен принимать наиболее простых типов в качестве входных данных. Где проблема?


Когда, в начале я пишу HeaderFile., он сразу же помечается как ошибка (красный подчеркивание) и комментарий говорит, «Неполные типы не допускаются».

+4

Что такое 'HeaderDefine'? – Bathsheba

+0

HeaderDefine - std :: string. – Spook

+0

Юмор меня на мгновение и замените 'HeaderDefine' на' HeaderDefine.c_str() ', а затем посмотрите, изменится ли ошибка компиляции на что-то более ясное. – Bathsheba

ответ

3

Наблюдение на

"Неполные типы не допускаются"

. ошибка.

#include <ostream> 

int main() 
{ 
    std::ofstream HeaderFile; 
} 

дает эту ошибку тоже, в то время как это

#include <fstream> 

int main() 
{ 
    std::ofstream HeaderFile; 
} 

компилируется в VS2015.