我必须使用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>
评论该行解决了错误。
答案 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();
// ^^^
// ...
};