C ++返回一个带有私有构造函数的类实例

时间:2013-11-02 12:58:37

标签: c++ return

嘿,我有一个班级问题。它应该有一个返回相同类但具有其他私有构造函数的方法。但它失败了,具体的错误是:

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;
}

2 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:1)

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

std::fstream xmlFS;

您无法复制它,这是按值返回所需的:

return newXML;

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

在你身边时查看C++ Rule of Three