Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;std::stringstream操作符<&书信电报;vs(建造师)_C++_Constructor_Stringstream - Fatal编程技术网

C++ C++;std::stringstream操作符<&书信电报;vs(建造师)

C++ C++;std::stringstream操作符<&书信电报;vs(建造师),c++,constructor,stringstream,C++,Constructor,Stringstream,我的期望是,我可以创建一个未初始化的std::stringstream,并向它提供一个字符串,或者最初使用相同的流创建它,并获得相同的结果。当我做第一个案例时,代码按照我的预期工作。然后我尝试了第二个案例,希望会有相同的结果,但没有发生。我错过了什么 第一个病例的片段 ... int main() { constexpr auto APTCP_XML_DOC_PREFIX {R"EOD(<?xml version="1.0" encoding="ISO-8859-1"

我的期望是,我可以创建一个未初始化的
std::stringstream
,并向它提供一个字符串,或者最初使用相同的流创建它,并获得相同的结果。当我做第一个案例时,代码按照我的预期工作。然后我尝试了第二个案例,希望会有相同的结果,但没有发生。我错过了什么

第一个病例的片段

...
int main() {
constexpr auto APTCP_XML_DOC_PREFIX            {R"EOD(<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE doc [<!ENTITY nbsp "&#xa0;">]>
<doc>
<head>
</head>
<body>
)EOD"};
   std::stringstream xml_doc; xml_doc << APTCP_XML_DOC_PREFIX;
...
   if (transformer.transform(xml_doc, style_sheet, std::cout) != 0)
      std::cerr << "aptcp/main()/transformer.getLastError(): " << transformer.getLastError() << "\n" << style_sheet.str() << xml_doc.str();
   }
出现此错误时:

Fatal Error: comment or processing instruction expected (Occurred in an unknown entity, at line 2, column 1.)
aptcp/main()/transformer.getLastError(): SAXParseException: comment or processing instruction expected (Occurred in an unknown entity, at line 2, column 1.)
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet id="aptcp_stylesheet"
                version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output
            method="html"
            version="4.01"
            indent="yes"
            doctype-system="http://www.w3.org/TR/html4/strict.dtd"
            doctype-public="-//W3C//DTD HTML 4.01//EN"/>
<xsl:template match="xsl:stylesheet" />
<xsl:param name="current_time_p"/>
<xsl:template match="/">
  <html>
  <body>
    <style>
    pp {display: none;}
    pp, table, tr {
        width: 100%;
...
致命错误:需要注释或处理指令(发生在未知实体的第2行第1列。)
aptcp/main()/transformer.getLastError():SAXParseException:应为注释或处理指令(发生在未知实体的第2行第1列)
pp{显示:无;}
pp,table,tr{
宽度:100%;
...
此代码:

#include <iostream>
#include <sstream>
#include <string>
#include <utility>
#include <cstring>

int main() {
    constexpr auto BEFORE {"Before"};

    std::stringstream un; un << BEFORE;
    un << "UN";
    std::cout << "un=" << un.str() << "." << std::endl;

    std::stringstream con(BEFORE);
    con << "CON";
    std::cout << "con=" << con.str() << "." << std::endl;
    }
要回答此问题,缺少模式():


似乎编译器不喜欢原始字符串。我不确定为什么编译器在这两种情况下的行为会有所不同,但在这个特定的编译器中,这肯定是某种错误。[虽然我不确定错误是否来自编译器或其他工具,但您的问题并不完全清楚]我没有假设“编译器或其他工具”中存在错误。如上所述,我不希望出现不同的结果,因此我假设我不理解某些东西。什么是“你的问题不完全清楚”?不清楚的是错误是否来自编译器,还是你在代码中进行的库调用。我认为是后者。原则上,设置stringstream的方式应该无关紧要。当然,我假设
在这里并不重要-这并不总是一个安全的假设-对于初学者的问题,几乎总是删除的代码才是问题所在。无论哪种方式,试着只打印字符串的值,看看这是否会产生d不同的输出-有什么不同,你能确定为什么吗?我发帖的目的是确认“这两种方法应该是相同的”,而不是调试其他问题。我发帖的细节是为了确认这两种方法的含义。是的,它们是。这就是为什么我立即说“某处有一个bug”。
#include <iostream>
#include <sstream>
#include <string>
#include <utility>
#include <cstring>

int main() {
    constexpr auto BEFORE {"Before"};

    std::stringstream un; un << BEFORE;
    un << "UN";
    std::cout << "un=" << un.str() << "." << std::endl;

    std::stringstream con(BEFORE);
    con << "CON";
    std::cout << "con=" << con.str() << "." << std::endl;
    }
un=BeforeUN.
con=CONore.
std::stringstream xml_doc(APTCP_XML_DOC_PREFIX,
    std::ios::in|std::ios::out|std::ios::ate);