[Developers] libraries of functions

John Sibert johnrsibert at gmail.com
Mon Aug 11 16:26:53 PDT 2014


The message is caused because the compiler does not know anything about 
class model_parameters, as would be the case if 
#include<CAPAM_Growth.hpp> were included in the GLOBALS_SECTION of a tpl 
file.

If I read your function correctly, there is no need for Richards(...) to 
be a member of the model_parameters class. All of the required variables 
are passed as arguments. So I would suggest simply making it a global 
function.
dvariable Richards(const dvariable &age, const dvariable &Linf, const 
dvariable &K, const dvariable &t0, const dvariable &p)

If you want to be a more restrictive (and perhaps a bit safer in case 
there is some other function with the same protoype), you might consider 
using a namespace. For instance
namespace CAPAM
{
    dvariable Richards(const dvariable &age, const dvariable &Linf, 
const dvariable &K,   const dvariable &t0, const dvariable &p)
    {

    }

}

To invoke it your could call
dvariable y = CAPAM::Richards(...)

Or insert a using statement in the GLOBALS_SECTION of your tpl like
using namesapce CAPAM;

and simply call the function without the namespace qualifier.
  dvariable y = Richards(...)

The innertube has information on the use of namespace.
http://www.cplusplus.com/doc/tutorial/namespaces/


On 08/11/2014 12:49 PM, Mark Maunder wrote:
>
> Why do I get an error if I put the following function in the file 
> CAPAM_Growth.hpp and include it using #include<CAPAM_Growth.hpp> but 
> if I put it in the tpl using the FUNCTION section I do not? The 
> translator appears to just put it in the cpp with no changes
>
> dvariable model_parameters::Richards(const dvariable &age, const 
> dvariable &Linf, const dvariable &K, const dvariable &t0, const 
> dvariable &p)
>
> {
>
>   {
>
>     dvariable Length=Linf*pow((1+(1/p)*exp(-K*(age-t0))),-p);
>
>     return(Length);
>
>   }
>
> }
>
> The errors I get are
>
> In file included from igm.cpp:3:0:
>
> ./CAPAM_Growth.hpp:130:142: error: invalid use of incomplete type 
> 'struct model_parameters'
>
> c:/ADMB/admb101-gcc452-win32\include/admodel.h:107:9: error: forward 
> declaration of 'struct model_parameters'
>
> igm.cpp: In member function 'virtual void 
> model_parameters::userfunction()':
>
> igm.cpp:127:46: error: no matching function for call to 
> 'Richards(prevariable, named_dvariable&, named_dvariable&, 
> param_init_number&, named_dvariable&)'
>
> igm.cpp:128:58: error: no matching function for call to 
> 'Richards(prevariable&, named_dvariable&, named_dvariable&, 
> param_init_number&, named_dvariable&)'
>
> igm.cpp:139:49: error: no matching function for call to 
> 'Richards(double&, named_dvariable&, named_dvariable&, 
> param_init_number&, named_dvariable&)'
>
> The selectivity special issue of the journal Fisheries Research is now 
> published
>
> http://www.sciencedirect.com/science/journal/01657836/158/supp/C
>
> The Stock Synthesis special issue of the journal Fisheries Research
>
> http://www.sciencedirect.com/science/journal/01657836/142
>
> Mark Maunder
>
> Head of the Stock Assessment Program
>
> Inter-American  Tropical Tuna Commission
>
> 8901 La Jolla Shores Dr.
>
> La Jolla, CA  92037-1508, USA
>
> Tel: (858) 546-7027
>
> Fax: (858) 546-7133
>
> mmaunder at iattc.org <mailto:mmaunder at iattc.org>
>
> http://www.fisheriesstockassessment.com/TikiWiki/tiki-index.php?page=Mark+Maunder
>
> Visit the Center for the Advancement of Population Assessment 
> Methodology at
>
> http://www.capamresearch.org/
>
> Visit the AD Model Builder project at
>
> http://admb-project.org/
>
> See the following website for information on fisheries stock 
> assessment http://www.fisheriesstockassessment.com/
>
> -- 
> You received this message because you are subscribed to the Google 
> Groups "admb-users" group.
> To unsubscribe from this group and stop receiving emails from it, send 
> an email to admb-users+unsubscribe at googlegroups.com 
> <mailto:admb-users+unsubscribe at googlegroups.com>.
> To post to this group, send email to admb-users at googlegroups.com 
> <mailto:admb-users at googlegroups.com>.
> Visit this group at http://groups.google.com/group/admb-users.
> For more options, visit https://groups.google.com/d/optout.



More information about the Developers mailing list