预期的类型说明符错误gcc

时间:2014-02-15 16:16:42

标签: c++ gcc

我有以下代码:

在文件“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编译

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

结果:好的,没有错误。