Tenho dúvidas sobre o erro de ambiguidade. Como ele se dá?
 
	Eu estou tentando modificar um código de um simulador numérico de escoamento de fluidos (OpenFOAM), por meio da inserção de uma variável que me dê uma nova condição de contorno na variável de temperatura.
 
	Ao compilar o código recebo a seguinte mensagem de erro:
 
	In constructor ‘Foam::atmBoundaryLayerInletTemperatureFvPatchScalarField::atmBoundaryLayerInletTemperatureFvPatchScalarField(const Foam::fvPatch&, const Foam::DimensionedField<double, Foam::volMesh>&, const Foam::dictionary&)’: 
	RAS/derivedFvPatchFields/atmBoundaryLayerInletTemperature/atmBoundaryLayerInletTemperatureFvPatchScalarField.C:61:26: error: reference to ‘T’ is ambiguous
 
	A variável T é declarada no arquivo atmBoundaryLayer.H conforme o código:
 
	tmp<scalarField> T(const vectorField& p) const;
 
	Como uma função membro para avaliação da temperatura na classe atmBoundaryLayer.
 
	No arquivo atmBoundaryLayer.C eu utilizou a função de acordo com o seguinte código:
 
	    tmp<scalarField> atmBoundaryLayer::T(const vectorField& p) const 
	    { 
	        if (L_ < 0)        //Atmosfera instável 
	        { 
	            return Tstar_/kappa_*(log(((zDir_ & p) + z0_)/z0_) - (2*log(1/2*(1 + sqrt(1 - 16*(zDir_ & p)/L_))))); 
	        } 
	        if (L_ > 0)        //Atmosfera estável 
	        { 
	            return Tstar_/kappa_*(log(((zDir_ & p) + z0_)/z0_) - (5*(zDir_ & p)/L_)); 
	        } 
	        if (L_ == 0)    //Atmosfera neutra 
	        { 
	            return Tstar_/kappa_*log(((zDir_ & p) + z0_)/z0_); 
	        } 
	    }
 
	Quando eu introduzir a condição de contorno de temperatura na simulação, o farei para uma fronteira do sistema do seguinte modo.
 
	    faceXPos 
	    { 
	        type            atmBoundaryLayerInletTemperature; 
	        flowDir        ( -1 0 0 ); 
	        zDir            ( 0 0 1 ); 
	        kappa         0.41; 
	        Uref            4; 
	        Tref            303; 
	        Zref            5; 
	        z0               uniform 1.75; 
	        zGround     uniform 0.05; 
	        L                0; 
	        value         uniform 303; }
 
	O nome atmBoundaryLayerInletTemperature, pode ser reconhecido graças a seguinte a linha, implementada no arquivo atmBoundaryLayerInletTemperatureFvPatchScalarField.H
 
	    class atmBoundaryLayerInletTemperatureFvPatchScalarField 
	    : 
	        public fixedValueFvPatchScalarField, 
	        public atmBoundaryLayer 
	    {
 
	    public:
 
	        //- Runtime type information 
	        TypeName("atmBoundaryLayerInletTemperature");
 
	.
 
	.
 
	.
 
	Essa biblioteca será incluída no arquivo atmBoundaryLayerInletTemperatureFvPatchScalarField.C e a variável T será novamente implementada conforme a seguinte linha:
 
	    atmBoundaryLayerInletTemperatureFvPatchScalarField:: 
	    atmBoundaryLayerInletTemperatureFvPatchScalarField 
	    ( 
	        const fvPatch& p, 
	        const DimensionedField<scalar, volMesh>& iF, 
	        const dictionary& dict 
	    ) 
	    : 
	        fixedValueFvPatchScalarField(p, iF), 
	        atmBoundaryLayer(patch().Cf(), dict) 
	    { 
	        scalarField::operator=(T(patch().Cf())); 
	    }
 
	Caso alguém possa me ajudar ficaria agradecido.