C ++错误:“'<'之前的预期构造函数,析构函数或类型转换代币

时间:2013-09-25 07:59:12

标签: c++ class templates constructor

我必须使用g ++在Linux环境中为Windows构建一个C ++库。我在构建它时遇到此错误:

RWGVector.cpp:5: error: g++ error: "expected constructor, destructor, 
or type conversion before '<' token

在Visual Studio 2010中构建它不会返回任何错误。我正在使用C ++ 11(aka c ++ 0x)标准构建它。

我有两个文件,一个带有模板类声明(RWGVector.h),另一个带有构造函数(RWGVector.cpp)。我只保留每个文件的基本部分,对错误负责。

RWGVector.h:

#ifndef _RWGVECTOR_H
#define _RWGVECTOR_H

#include <vector>
#include <rw/generic.h>

template<typename V> class RWGVector
{
    public:
        RWGVector<V>();

    private:
        std::vector<V> vector_;
};
#endif

RWGVector.cpp:

#include "RWGVector.h"

template<typename V>
RWGVector<V>::RWGVector() : vector_()       //<--- Line 5
{
}

导致此错误的原因是什么?我该如何解决?

解决方案:

删除<V>中的RWGVector<V>();

  

在类中,构造函数不需要模板参数的声明。因为当你指定类时,参数已经符合

虽然我有另一个问题,但更具体的是我的情况,因为&lt; rw / generic.h&gt;包含的文件,其中包含以下行:

#define RWGVector(Type) RWTValVector<Type>

评论该行解决了错误。

3 个答案:

答案 0 :(得分:3)

<V>中的RWGVector<V>();放入RWGVector.h

答案 1 :(得分:2)

#ifndef _RWGVECTOR_H
#define _RWGVECTOR_H

#include <vector>
#include <rw/generic.h>

template<typename V> class RWGVector
{
    public:
        RWGVector(); //  RWGVector<V> is wrong;

    private:
        std::vector<V> vector_;
};
#endif

class中,构造函数不需要模板参数的声明。因为当您指定class时,参数已经符合

答案 2 :(得分:0)

这里有额外的<V>

只需执行RWGVector.h

即可
template<typename V> class RWGVector
{
public:
    RWGVector();
    //      ^^^

// ...
};