0

嘿,我的课程有问题。它应该有一个返回相同类但具有其他私有构造函数的方法。但它因特定错误而失败:

error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' :
          cannot access private member declared in class '

这是头文件:

class XMLClass {
private:

    bool isGood();
    std::vector<std::string> xmlRowList;
    std::fstream xmlFS;
    XMLClass(std::string newList);

public:

    XMLClass(char *filename,std::string root);
    std::string getAttribute(char *att);
    std::string getText(void);
    XMLClass getChildNode(std::string childNode);
};

这是导致错误的方法:

XMLClass XMLClass::getChildNode(std::string Node)
{
    XMLClass newXML(Node);
    return newXML;
}
4

2 回答 2

4

问题是fstream类成员 - 流是不可复制的,因此,你的类也是如此。

要从函数中按值返回对象,您需要一个复制构造函数。但是您没有,因为默认生成的格式不正确。

如果你有 C++11 支持,你可以为你的类实现移动构造函数。如果没有,您将需要存储指向流的指针。

于 2013-11-02T13:07:25.487 回答
1

有人可能会写一个更详细的答案,但我认为问题是这样的:

std::fstream xmlFS;

您不能复制它,这是按值返回所必需的:

return newXML;

解决方案应该是为您的类编写复制构造函数和赋值运算符,以正确处理此成员变量。

查看C++ 三法则

于 2013-11-02T13:06:51.853 回答