【问题标题】:C++ error: "expected constructor, destructor, or type conversion before '<' tokenC++ 错误:“'<' 标记之前的预期构造函数、析构函数或类型转换
【发布时间】:2013-09-25 07:59:11
【问题描述】:

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

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

在 Visual Studio 2010 中构建它不会返回任何错误。我正在使用 C++11(又名 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
{
}

是什么导致了这个错误?我该如何解决?

解决方案:

删除RWGVector&lt;V&gt;();中的&lt;V&gt;

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

虽然我遇到了其他问题,更具体到我的情况,因为包含 文件,其中包含以下行:

#define RWGVector(Type) RWTValVector<Type>

注释该行解决了错误。

【问题讨论】:

    标签: c++ class templates constructor


    【解决方案1】:

    &lt;V&gt; 放入RWGVector&lt;V&gt;(); 放入RWGVector.h

    【讨论】:

    • 删除它并得到另一个错误:RWGVector.h:10: error: expected ';' before '&lt;' token 找到了原因,将使用解决方案编辑我的帖子 :) 谢谢!
    【解决方案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时,参数已经符合

    【讨论】:

    • 感谢您的澄清。我删除了 并得到了另一个错误:RWGVector.h:10: error: expected ';' before '&lt;' token 找到了原因,将使用解决方案编辑我的帖子 :) 谢谢!
    【解决方案3】:

    你在这里有一个额外的&lt;V&gt;

    只要在你的RWGVector.h做:

    template<typename V> class RWGVector
    {
    public:
        RWGVector();
        //      ^^^
    
    // ...
    };
    

    【讨论】:

    • 删除了 并得到了另一个错误:RWGVector.h:10: error: expected ';' before '&lt;' token 找到了原因,将使用解决方案编辑我的帖子 :) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-12-04
    • 2016-03-14
    • 2014-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多