我正面臨我想解決的GCC警告。基本上我傳遞給一個方法一個指向局部變量的指針,在我的情況下,它是完全正確的。我明白爲什麼編譯器告訴我這是一個潛在的問題,但在我的情況下,這是好的。以臨時解決方法 - 需要的解決方法
我該如何解決它,在本地空間?編譯時通過-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.
編輯:
使用const
(如製造foo
採取一個const指針,標誌着value()
爲const)給出了相同的錯誤。
@jalf看到墊響應,理解。在我的情況下,該變量在函數調用時的作用域上。 – elcuco 2012-04-01 08:46:54
你不能將函數的簽名更改爲'int foo(const Integer & i);'? – jrok 2012-04-01 10:14:07