私は修正したいGCCの警告に直面しています。基本的に私はローカル変数へのポインタをメソッドに渡していますが、私の場合は完全にOKです。私はコンパイラがなぜこれが潜在的な問題であると言われているのか理解していますが、私の場合はこれは問題ありません。一時的な回避策のアドレスが必要です
どうすれば解決できますか?コンパイル時に-fpermissive
を渡すと、将来の問題を見つけることができなくなります。私はこの特定の問題を解決したい、または回避する。
コードがここにあります:
#include <cstdio>
class Integer{
public:
Integer(int i){ v = i; };
int value(){ return v; };
private:
int v;
};
int foo(Integer *i);
int main()
{
foo(&Integer(12));
}
int foo(Integer *i)
{
std::printf("Integer = %d\n", i->value());
}
とコンパイルが私を与える:
$ g++ test-reference.cpp -O test-reference
test-reference.cpp: In function ‘int main()’:
test-reference.cpp:15:18: error: taking address of temporary [-fpermissive]
$ g++ --version
g++ (Ubuntu/Linaro 4.6.3-1ubuntu3) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
はEDIT:foo
を作るのように(const
を使用して
はのconstポインタを取り、value()
などをマーキングconst)は同じエラーを返します。
理解するために、マットの応答を参照してください@jalf。私の場合は、関数が呼び出されたときに変数が有効範囲にあります。 – elcuco
関数のシグネチャを 'int foo(const Integer & i);'? – jrok