C++返回一個帶有私有構造函數的類實例 (C++ return a class instance with private constructor)


問題描述

C++返回一個帶有私有構造函數的類實例 (C++ return a class instance with private constructor)

嘿,我的課程有問題。它應該有一個返回相同類但具有其他私有構造函數的方法。但它因特定錯誤而失敗:

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

## 參考解法 #### 方法 1:

The problem is fstream class member ‑ streams are non‑copyable and as a consequence, so is your class.

To return an object from function by value, you need a copy constructor. But you don't have one because default generated one would be ill‑formed.

If you've got C++11 support, you can implement move constructor for your class. If not, you'll need to store a pointer to the stream.

方法 2:

Someone will probably write a more detailed answer, but I Think problem is This:

std::fstream xmlFS;

You can't copy it, which is needed for this return by value:

return newXML;

Solution should be to write copy constructor and assignment operator for your class, which handle this member variable correctly.

Check out C++ Rule of Three while you are at it.

(by Eddy Haselhoffjrokhyde)

參考文件

  1. C++ return a class instance with private constructor (CC BY‑SA 3.0/4.0)

#return #C++






相關問題

如果評估的最後一個語句是 If 語句,Ruby 會返回什麼 (What is Returned in Ruby if the Last Statement Evaluated is an If Statement)

將多個參數傳遞給 javascript 並根據兩個參數 + php 循環更新 html 內容 (pass multiple parameters to a javascript and update html content bases on both parameters + php loop)

Loại Không khớp không thể chuyển đổi từ Boolean sang Int (Mảng trong phương thức tùy chỉnh) (Type Mismatch can't convert from Boolean to Int (Arrays in custom method))

C++返回一個帶有私有構造函數的類實例 (C++ return a class instance with private constructor)

ArrayList.isEmpty() 時如何返回值? (How do I return a value when ArrayList.isEmpty()?)

如何將坐標(元組)格式化為字符串? (How can I format a coordinate (tuple) as a string?)

void 類型方法表達式體成員允許非 void 類型的表達式 *如果其他方法* (Void-type method expression-bodied member allows expression of non-void type *if other method*)

paypal動態退貨地址 (paypal dynamic return address)

讓兩個類進行交互 (getting two classes to interact)

在 C++ 中返回“this”? (return "this" in C++?)

Java:枚舉的不同返回類型 (Java: Different return type by enum)

如何檢查函數參數和類型 (How to inspect function arguments and types)







留言討論