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;
}
答案 0 :(得分:4)
问题是fstream
类成员 - 流是不可复制的,因此,您的班级也是如此。
要按值从函数返回对象,需要复制构造函数。但是你没有一个,因为默认生成的那个将是不正确的。
如果您已获得C ++ 11支持,则可以为您的类实现移动构造函数。如果没有,您将需要存储指向流的指针。
答案 1 :(得分:1)
有人可能会写一个更详细的答案,但我认为问题是这个:
std::fstream xmlFS;
您无法复制它,这是按值返回所需的:
return newXML;
解决方案应该是为您的类编写复制构造函数和赋值运算符,以正确处理此成员变量。
在你身边时查看C++ Rule of Three 。