Изправен съм пред предупреждение от 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
да вземе константен указател и маркирането на value()
като const) дава същата грешка.
int foo(const Integer& i);
? - person jrok   schedule 01.04.2012