2015-10-15 60 views
0

當我嘗試執行以下操作時,出現錯誤標題。關於ifstream:錯誤'std :: ios_base :: ios_base(const std :: ios_base&)'是私人的

class Test 
{ 
private: 
    std::ifstream File; 


public: 
    Test(); 

};

測試::測試(){}

我知道有關於這個問題棧的多個線程。我知道,我可以爲

std::ifstream *File; 

我已經發布了這個問題的原因簡單的事情解決我的問題,因爲我的教練告訴我,我應該能夠做到這一點,而無需修改第一個代碼塊我張貼。我研究過這個,我沒有發現任何暗示我能做到的事情。有任何想法嗎?

按要求。

class Test 
{ 
private: 
    std::ifstream File; 


public: 
    Test(); 
}; 

Test::Test() {} 

int main() 
{ 
Test test = Test(); 
return 0; 
} 

這是我無法編譯的例子。

+1

請發表[最小,完整,可驗證的示例](http://stackoverflow.com /幫助/ MCVE)。 –

+0

嗨Sahu,我給的代碼不能滿足嗎?它展示了我正在遇到的確切問題。 – JohnKraz

+1

不,它沒有。我無法僅使用發佈的代碼來重現您所看到的錯誤。 –

回答

1

Test test = Test(); 

是因爲std::ifstream沒有一個拷貝構造函數或拷貝賦值運算符的一個問題。用途:

Test test; 

如果你有一個C++編譯器11,還可以使用:

Test test{}; 
+0

謝謝你的回覆Sahu。不幸的是,我必須使用 「Test test = Test()」格式,因爲我的教師需要它。我們只允許使用C++ 98編譯器。 – JohnKraz

+0

@JohnKraz,我希望你的意思是'測試測試;'而不是'測試測試=測試();'因爲第二個將是一個問題。 –

+0

在給定的驅動程序(我們無法修改)中,使用「Test test = Test()」格式創建對象。如果我使用「std :: ifstream * File」,這仍然是一個問題嗎?如果我這樣寫的話,我的代碼編譯得很好,但我希望你的意見是否會在長期內導致問題。 – JohnKraz

相關問題