gpt4 book ai didi

c++ - 编译器不让我返回 rapidxml::xml_document,并报告头文件中的错误

转载 作者:行者123 更新时间:2023-11-28 02:42:15 27 4
gpt4 key购买 nike

编译我的三文件程序(main.cpp、source.cpp、header.hpp)会产生以下错误:

source.cpp: In member function ‘rapidxml::xml_document<> MyClass::generate_xml_document()’:
source.cpp:559:9: error: use of deleted function ‘rapidxml::xml_document<>::xml_document(const rapidxml::xml_document<>&)’
In file included from header.hpp:12:0,
from source.cpp:11:
rapidxml.hpp:1358:11: error: ‘rapidxml::xml_document<>::xml_document(const rapidxml::xml_document<>&)’ is implicitly deleted because the default definition would be ill-formed:
rapidxml.hpp:1322:9: error: ‘rapidxml::xml_node<Ch>::xml_node(const rapidxml::xml_node<Ch>&) [with Ch = char, rapidxml::xml_node<Ch> = rapidxml::xml_node<char>]’ is private

命名行是:

  • source.cpp:559 简单地表示 return doc; .它是生成 rapidxml::xml_document<> 的函数的结尾.
  • header.hpp:12 和 source.cpp:11 状态 #include "rapidxml.hpp" .
  • rapidxml.hpp:1322 周围的区域指出:

    private:
    // Restrictions

    // No copying
    xml_node(const xml_node &);
    void operator =(const xml_node &);
  • rapidxml.hpp:1358 是类的开始 xml_document : class xml_document: public xml_node<Ch>, public memory_pool<Ch>

这是rapidxml的错误吗? (我很确定不是,因为 Marcin Kalicinski 绝对是比我更好的程序员。)

最佳答案

基本上,RapidXML xml_document 类型是不可复制的。正如您发布的代码片段所示(以及注释“无复制”所暗示的),复制构造函数和赋值运算符是私有(private)的以强制编译器错误。

您应该在您的函数中动态创建一个,并返回一个指针 - 或者,使该函数将对现有 xml_document 的引用作为输入。

所以不是这个

xml_document myFunc() 
{
xml_document doc;
...
return doc;
}

xml_document d = myfunc();

..你需要这个

void myFunc(xml_document &doc) 
{
...
}

xml_document d;
myfunc(d);

或者,使用动态分配:

xml_document *myFunc() 
{
xml_document *doc = new xml_document();
return doc;
}

xml_document d = myfunc();
...
delete d;

后者显然需要智能指针,但这表明了这个想法。

关于c++ - 编译器不让我返回 rapidxml::xml_document,并报告头文件中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25561004/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com