簡體   English   中英

將ifstream作為參數傳遞給Class Constructor

[英]Passing ifstream as an argument to Class Constructor

我試圖通過:ifstream infile;

在我的main()中,創建一個名為“ FIFO”的類的構造函數:FIFO(infile);

在FIFO(FIFO.h)的頭文件中,我有:

FIFO (std::ifstream);
std::ifstream infile;

在FIFO.cc中,我有:

FIFO::FIFO (std::ifstream & INFILE)
{
         infile = INFILE;
}

我一直在想(有更多它們,我只粘貼其中之一):

在/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/localefwd.h:43中包含的文件中/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/string:45,來自FIFO.cc:7:/ usr /lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:在成員函數'std :: basic_ios> &std :: basic_ios> :: operator =(const std :: basic_ios>&)':/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../.././ include / c ++ / 4.4.7 / bits / ios_base.h:793:錯誤:“ std :: ios_base&std :: ios_base :: operator =(const std :: ios_base&)”是私有的/ usr / lib / gcc / x86_64- redhat-linux / 4.4.7 /../../../../ include / c ++ / 4.4.7 / iosfwd:47:錯誤:在此上下文中

我不確定使用引用傳遞ifstream是否有效,或者這是我的代碼問題。

謝謝!

在構造函數聲明中,您按值而不是按引用獲取std::ifstream 代替

FIFO (std::ifstream);

它應該是

FIFO (std::ifstream&);

並且您通過值而不是通過引用存儲成員變量“ infile”。

std::ifstream infile;

應該

std::ifstream& infile;

由於您現在要存儲對ifstream的引用,因此需要在初始值設定項列表中對其進行初始化,而不是在構造函數中進行分配。

FIFO::FIFO (std::ifstream & INFILE)
    : infile(INFILE)
{
}

這是因為std::ifstream的副本構造函數是私有的(或在C ++ 11中刪除)。 通過按值存儲成員變量,您嘗試制作傳遞給構造函數的std::ifstream對象的副本。

原型聲明和實現的簽名不匹配。 更改

FIFO (std::ifstream);

FIFO (std::ifstream &);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM