void foo()
{
bar(); // error: ‘bar’ has not been declared
}
void bar()
{
}
namespace N
{
void foo()
{
N::bar(); // error: ‘bar’ is not a member of ‘N’
}
void bar()
{
}
}
class C
{
static void foo()
{
C::bar(); // works just fine
}
static void bar()
{
}
};
Qual è la logica alla base di questa incoerenza nel trattare le chiamate alle funzioni al di sopra della loro dichiarazione? Come mai posso farlo all'interno di una classe, ma non all'interno di uno spazio dei nomi o nell'ambito globale?funzioni di chiamata sopra la loro dichiarazione
Forse, compilatore passa più volte attraverso implementazioni di metodo di classe all'interno di dichiarazione di classe, mentre "C" compilatore passa solo una volta. Potrebbe esserci qualche retaggio, dato che foo() è essenzialmente C-function –
E qual è il risultato dopo aver rimosso la static da static void foo ?? – perilbrain
@Anonimo, questo non cambia nulla – SingerOfTheFall