Re: Template function with enum usage - compiler error
Am 24.07.2011 03:18, schrieb baskar:
class RockProp
{
public:
enum Field {WELLNAMES, CELLS, SELECTEDPROPERTIES, REPORTLABELS,
COMMENT, FIELDEND};
}
class WellProp
{
public:
enum Field {WELLNAMES, CELLS, SELECTEDPROPERTIES, REPORTLABELS,
COMMENT, FIELDEND};
}
Template call :
WellProp *pNode=new WellProp () ;
convertReportLabels(pNode,nType);
Function :
template<typename T>
bool RepMgrNodeTree::convertReportLabels(T *pNode,int nType)
{
if(pNode)
{
vector<string> vecStrSProp=pNode->GetField<vector<string>
(T::SELECTEDPROPERTIES);
}
}
I am getting compiler error if I use enum in function template I am
getting following error
/data/rpe/bvbj/ixsage/hlg/resserver/repmgrnodetree.cpp:606: error:
expected primary-expression before ?>? token
/data/rpe/bvbj/ixsage/hlg/resserver/repmgrnodetree.cpp:607: error:
expected primary-expression before ?>? token
but following line compiles fine
vector<string> vecStrSProp=pNode->GetField<vector<string>
( WellProp::SELECTEDPROPERTIES);
any idea ?
Your code is broken in many ways, I can only repeat to recommend that any problematic code presented in this group should be complete for compilation. E.g. your code misses necessary includes and the declaration of some member function GetField. Without seeing these things the chances are small that interested people will find the problem in the code. But it is also clear that you miss to provide a necessary keyword 'template' during the call of
pNode->GetField<vector<string>>(WellProp::SELECTEDPROPERTIES)
If I try to complete your example to this form:
//------------
class RockProp
{
public:
enum Field {WELLNAMES, CELLS, SELECTEDPROPERTIES, REPORTLABELS,
COMMENT, FIELDEND};
};
class WellProp
{
public:
enum Field {WELLNAMES, CELLS, SELECTEDPROPERTIES, REPORTLABELS,
COMMENT, FIELDEND};
template<class T>
T GetField(Field);
};
#include <vector>
#include <string>
template<typename T>
void convertReportLabels(T *pNode,int nType)
{
if(pNode)
{
std::vector<std::string> vecStrSProp=pNode->template GetField<std::vector<std::string>> (T::SELECTEDPROPERTIES);
}
}
int main() {
WellProp *pNode=new WellProp () ;
int nType = 1;
convertReportLabels(pNode,nType);
}
//------------
I'm getting no compile errors on gcc 4.7 or Comeau online.
HTH & Greetings from Bremen,
- Daniel Kr?gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]