0

私は多くのプラットフォームで開発していますが、今日は iOS と xCode に問題があり、いくつかのプロジェクトを最後の xCode 4.3.2 (Apple LLVM コンパイラ 3.1) に更新しています。

しばらくしてから、警告がエラーになりました: 「一時オブジェクトのアドレスを取得しています」

残念ながら、私はその多くを使用しました。私の例を見てください:

float dist = Vector3Dlength(&Vector3D(pos2 - pos1));
  • 一時変数を作成して新しいコード行を生成することを避けるため (ただし、これはコンパイラによってスタック上に作成されます)
  • 私はそのような10年間のコーディング以来、間違いを犯す可能性があることを知っています:)しかし、私はそのように続けたいです...

コードを編集せずにこのエラーを回避するための提案はありますか? (新しい xCode 4.3.2 (Apple LLVM コンパイラ 3.1) を使用)

4

1 に答える 1

2

コードを変更する必要があります。左辺値ではないもののアドレスを取得することはできず、その一時的なものはそうではありません。

Vector3D代わりにconst 参照を取るようにコードを変更してください。これはコピーのコストがかからず、明確に定義された動作です。

float Vector3Dlength(Vector3D const& pvect) {
  return sqrt(pvect.x * pvect.x ...);
}

...
float dist = Vector3Dlength(Vector3D(pos2 - pos1));
于 2012-05-04T13:38:06.620 に答える