我有以下代码:
在文件“Defs.h”
中namespace ABCD
{
template < typename T >
class TPixelSum_TraitFor
{
public:
typedef double AccumType;
};
template <>
class TPixelSum_TraitFor< MonochromeImage::PixelType >
{
public:
typedef /*unsigned*/ long AccumType;
};
}
并在“GraphicLibrary.h”文件中
#include "Defs.h"
using namespace ABCD;
using namespace std;
template < typename T, typename ACC_TRAIT = TPixelSum_TraitFor< T > >
class SumImage : public TImageProcessor< T >
{
public:
typedef typename ACC_TRAIT::AccumType AccumType;
private:
AccumType fSum;
};
我收到以下错误
'TPixelSum_TraitFor'之前的预期类型说明符
在'TPixelSum_TraitFor'
之前预期'&gt;'
在第
行模板&lt; typename T,typename ACC_TRAIT = TPixelSum_TraitFor&lt; T> &GT;
代码使用g ++ 4.8.1编译
答案 0 :(得分:2)
此代码在MSVC ++ 11.0 U4下编译时没有错误。只发出它是抱怨未定义类型指定为基类:
TImageProcessor< T >
您确定此类型在此文件的范围内是否已知?我不熟悉GCC错误消息,但语法如下:
template < typename T, typename ACC_TRAIT = TPixelSum_TraitFor< T > >
完全有效,所以他可能会抱怨下一行。
更新:
我用g ++ 4.8.1测试了你的代码。 我将内容拆分为两个文件并删除了未知类型:
test.h
:
namespace ABCD
{
template < typename T >
class TPixelSum_TraitFor
{
public:
typedef double AccumType;
};
template <>
class TPixelSum_TraitFor< long /*MonochromeImage::PixelType*/ > //MonochromeImage is unknown
{
public:
typedef long AccumType;
};
}
test.cpp
:
#include "test.h"
using namespace ABCD;
using namespace std;
template < typename T, typename ACC_TRAIT = TPixelSum_TraitFor< T > >
class SumImage //: public TImageProcessor< T > -> TImageProcessor is also unknown
{
public:
typedef typename ACC_TRAIT::AccumType AccumType;
private:
AccumType fSum;
};
int main()
{
}
命令:
g++ -o test.o test.cpp
结果:好的,没有错误。