[解決済み】エラー:lvalueは単項演算子として必要です。
質問
Linux Server リリース 6.1 でコンパイルしたところ、以下のようなコードになりました。
strftime(AppTime, sizeof(AppTime),"%Y/%m/%d %T", localtime(&((long)u32_Time)));
というエラーが表示されます。
error: lvalue required as unary '&' operand
Red Hat Enterprise Linux AS release 3でコンパイルしたところ、大丈夫でした。
解決方法を教えてください。
アドレス演算子
&
は、アドレスを取得するための変数を必要とします。キャストの結果
(long)u32_Time
は、必ずしもメモリ上に存在しないテンポラリであるため、取得できるアドレスがないのです。そのため、このコードがどこかでコンパイルされたことがあるとすれば、それは非標準のコンパイラ拡張である。
規格では、§5.3.1,3が要求しています。
単項演算子 & の結果は、オペランドへのポインタである。オペランドは、lvalue [...]でなければならない。
これを修正する方法
std::localtime
へのポインタを期待します。
std::time_t
ということで、それを提供するのがベストです。説明や更なるコードは提供されませんでしたので、推測するに
u32_Time
は4バイトの符号なし演算型であり、何らかの方法で時間を表すものと思われます。それをどのように
std::time_t
は、コンパイラが後者をどのように実装しているか、さらにその値をどのように取得したかに依存します。単純にCキャストを適用すると
ではなく
へのキャストは移植可能であり
long
はさらにポータビリティに欠ける。
もし、もし、もし
その
std::time_t
現在お使いのプラットフォームで
と同じ表現で、符号なし32ビット型でもあります。
u32_Time
を使用すれば十分でしょう。
localtime(reinterpret_cast<std::time_t*>(&u32_Time));
よりポータブルなのは、最初に正しいデータ型に値を格納することでしょう。
std::time_t time = u32_Time;
localtime(&time);
このようにすると、以下のような場合に必要な警告やエラーが表示されます。
time_t
であり、その型は
u32_Time
は互換性がありません。
なぜなら、このコードを他のプラットフォームに移植しなければならなくなったとき、その厄介なキャストを簡単に見つける手段がなくなってしまうからです。
関連
-
Swift言語とAppleScriptの違い、AppleScriptの開発状況について教えてください。
-
コマンドによるフォルダの簡単なインクリメンタルバックアップ(win/linux)
-
InstallShield でレジストリキーを取得するスクリプト
-
[解決済み】R on MacOS Error: vector memory exhausted (limit reached?)
-
[解決済み】C++ Cout & Cin & System "Ambiguous" [クローズド]。
-
[解決済み] '\r': コマンドが見つかりません - .bashrc / .bash_profile [重複].
-
[解決済み】C++の<map>に相当するC#は何ですか?[重複しています]
-
[解決済み】例外:AAPT2エラー:詳細はログを確認してください。
-
[解決済み】 c++ "Incomplete type not allowed" クラス参照情報へのアクセスエラー (前方宣言による円環状依存性)
-
[解決済み] ポインタからキャストを使わずに整数を返す [-Wint-conversion] 戻り値の候補を作る
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
パスワード入力を非表示にする InstallShield スクリプト
-
linux シェル学習ノート 4日目
-
[解決済み】以下の追跡されていないワーキングツリーファイルは、マージによって上書きされますが、私は気にしません。
-
[解決済み】rmarkdownエラー "長さ0の変数名を使おうとした"
-
[解決済み】git pullの取り消し、レポを古い状態に戻す方法
-
[解決済み】ウィンドウ階層にないビューを持つUIViewControllerでUIViewControllerを表示しようとする
-
[解決済み】二重の空きや破損(fasttop)
-
[解決済み】ポインタと整数の比較を警告する
-
[解決済み】C#でクエスチョンマークを2つ並べるとどんな意味になるのか?
-
[解決済み】拡張メソッドは、一般的でない静的クラスで定義する必要がある