簡體   English   中英

在c ++ 11中需要作為一元'&'操作數的左值

[英]lvalue required as unary '&' operand in c++11

我正在編碼c ++ 11。 在A類中,我有一個成員變量 “ member”,其定義為

vector<OtherClass> member; // A's member variable

我想將A序列化(因此我想將vector中包含的OtherClass中的所有數據類型)序列化為二進制格式的文件,因此我定義了一個函數寫入,如下所示。

void A::write(ostream& os){ // A's function for outputting A
   os.write(reinterpret_cast<const char*>( &(member.size()) ), sizeof(member.size()));
}

但是編譯器說,左值要求為一元“&”操作數。

如何在不創建寫入函數中諸如long size = member.size()之類的臨時對象的情況下進行修復?

問題是&(member.size()) -您沒有分配size()的返回值並試圖獲取它的地址(它甚至可能沒有地址)。

但是不知道為什么無論如何都要在這里調用size,您需要實際數據的起始地址: member.data() (或者如果您沒有C ++ 11 &member[0]

“如何在不創建臨時對象的情況下進行修復”

你不能 您要使用& ,它采用對象的地址。 沒有對象,沒有地址。 真的就是這么簡單。

請注意,您的long size = member.size()想法不會創建臨時變量。 那是一個普通的變量。

暫無
暫無

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

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