预期';'在数字常量之前

时间:2012-10-17 00:50:07

标签: c++

我在C ++中有以下代码,试图将xml文件写入文件,但它一直给我这个问题“预期”;'在数字常量之前

int main () {
  ofstream myfile;
  myfile.open ("example.xml", ios::out| ios::app| ios::binary);
  if (myfile.is_open())
  {
    myfile << "<?xml version="1.0" encoding="UTF-8"?> \n";
    myfile << "<?xml-stylesheet type="text/xsl" href="wufi1d.xslt"?> \n";
    myfile << "<WUFI1D> \n";

有人可以帮忙吗?

7 个答案:

答案 0 :(得分:4)

你需要转义字符串中的引号,如下所示:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
myfile << "<?xml-stylesheet type=\"text/xsl\" href=\"wufi1d.xslt\"?> \n";
myfile << "<WUFI1D> \n";

编译器认为字符串在看到第一个"时已经完成 - 因此你必须告诉它你的意思是通过转义它\"将字符串包含在字符串中。

See here获取C ++中字符转义码的完整列表。

答案 1 :(得分:2)

逃避你的dbl-quotes:I.e。

   myfile << "<?xml version="1.0" encoding="UTF-8"?> \n";

应该是

   myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";

作为一个例子

答案 2 :(得分:1)

嵌入式引号需要转义。

这样:

myfile << "<?xml version="1.0" encoding="UTF-8"?> \n";
myfile << "<?xml-stylesheet type="text/xsl" href="wufi1d.xslt"?> \n";

应如下所示:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
myfile << "<?xml-stylesheet type=\"text/xsl\" href=\"wufi1d.xslt\"?> \n";

答案 3 :(得分:1)

您不能在字符串中使用原始引号,因为它们表示字符串的结尾。转而逃避:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";
myfile << "<?xml-stylesheet type=\"text/xsl\" href="wufi1d.xslt"?> \n";
myfile << "<WUFI1D> \n";

您还可以在C ++ 11中使用原始字符串文字,它将所有内容(包括空格)视为原始字符串的一部分:

myfile << 
R"(<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="wufi1d.xslt"?>
<WUFI1D>
)";

如果字符串中有括号,请在其周围添加分隔符:R"###(st(ri)ng)###"

后者可能更适合较长的文件,因此您不必转义所有内容,但请记住,所有换行符,空白等都包含在字符串中,并且语法突出显示可能会因为是否混乱而变得混乱编辑器会考虑原始文字,以及缩进,如果每行在开头都不包含额外的空格很重要,因为你必须将文字保持在每行的最开头。

答案 4 :(得分:0)

你有双引号未转义显示代码 - 荧光笔。如果要在输出文本中显示双引号,请使用\"

答案 5 :(得分:0)

您没有转义输出字符串中的引号,例如

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";

答案 6 :(得分:0)

你必须使用不是字符串分隔符的反斜杠来转义(“)双引号:

myfile << "<?xml version=\"1.0\" encoding=\"UTF-8\"?> \n";