【问题标题】:resolve C++ class template errors on my list解决我列表中的 C++ 类模板错误
【发布时间】:2014-03-16 04:22:31
【问题描述】:

我创建了这个 squareList 类,当我编译它时,它给了我很多错误,我不知道有人可以帮我解决这些错误 更新:我在 ~square_list(){} 之后评论了我的所有代码,并且每个错误都指向列表数据;

///#include "LinkedList.hpp"
#include <vector>
#include <cassert>
#include <iostream>
#include <iomanip>
#include <math.h>
#include <list>
#include <iterator>


template <typename T_>

class square_list
{

    typedef T_              value_type;
    typedef std::size_t     size_type;
    typedef T_ &            reference;
    typedef T_ const &      const_reference;
    typedef T_ *            pointer;
    typedef T_ const *      const_pointer;
    typedef T_ *            iterator;
    typedef T_ const *      const_iterator;
    typedef std::ptrdiff_t  difference_type;

    typedef std::reverse_iterator<iterator> reverse_iterator;
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;



     //for header vector<pair<itr,unsindINT) header
    list<T_> data;





    square_list() {}
    ~square_list(){}

 //   bool empty(){
    //  if(this->begin() == nullptr && this->end() == nullptr)
    //      return 1;
    //  else
    //      return 0;
    //}

    //list<value_type>::iterator    begin() {
    //  return data.begin(); 
    //}
    //list<value_type>::iterator    end() { 
    //  return data.end(); 
    //}
};

错误 1 ​​错误 C2143:语法错误:缺少 ';'在'之前 错误 4 错误 C2143:语法错误:缺少 ';'在'之前 错误 7 错误 C2143:语法错误:缺少 ';'在'之前 错误 10 错误 C2143:语法错误:缺少 ';'在'之前 错误 13 错误 C2143:语法错误:缺少 ';'在'之前 错误 16 错误 C2143:语法错误:缺少 ';'在'之前 错误 19 错误 C2143:语法错误:缺少 ';'在'之前 错误 22 错误 C2143:语法错误:缺少 ';'在'之前 错误 25 错误 C2143:语法错误:缺少 ';'在'之前 错误 28 错误 C2143:语法错误:缺少 ';'在'之前 错误 31 错误 C2143:语法错误:缺少 ';'在'之前 错误 34 错误 C2143:语法错误:缺少 ';'在'之前 错误 37 错误 C2143:语法错误:缺少 ';'在'之前 错误 40 错误 C2143:语法错误:缺少 ';'在'之前 错误 43 错误 C2143:语法错误:缺少 ';'在'之前 错误 46 错误 C2143:语法错误:缺少 ';'在'之前 错误 3 错误 C2238: ';' 前面的意外标记错误 6 错误 C2238: ';' 前面的意外标记错误 9 错误 C2238: ';' 之前的意外标记错误 12 错误 C2238:意外 ';' 前面的记号错误 15 错误 C2238:意外令牌 前面的';'错误 18 错误 C2238:前面的意外令牌 ';'错误 21 错误 C2238:“;”之前的意外令牌
错误 24 错误 C2238:“;”之前的意外令牌
错误 27 错误 C2238:“;”之前的意外令牌
错误 30 错误 C2238:“;”前面的意外令牌
错误 33 错误 C2238:“;”之前的意外令牌
错误 36 错误 C2238:“;”前面的意外令牌
错误 39 错误 C2238:“;”之前的意外令牌
错误 42 错误 C2238:“;”前面的意外令牌
错误 45 错误 C2238:“;”之前的意外令牌
错误 48 错误 C2238: ';' 前面的意外令牌错误 2 错误 C4430:缺少类型说明符 - 假定为 int。注意:C++ 没有 支持 default-int 错误 5 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int 错误 8 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 错误 11 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int 错误 14 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 错误 17 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int 错误 20 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 错误 23 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int 错误 26 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 错误 29 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int 错误 32 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 错误 35 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int 错误 38 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 错误 41 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int 错误 44 错误 C4430: 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int 错误 47 错误 C4430:缺少类型说明符 - int 假定。注意:C++ 不支持 default-int

【问题讨论】:

  • 我看到的唯一问题是list&lt;T&gt; data,应该是list&lt;T&gt; data。除此之外,我没有看到其他问题。您确定此代码重现了显示的错误吗?
  • 是的,它会复制但没有用?
  • 既然你 typedef T_ as value_type 你应该改用 value_type

标签: c++ visual-c++ boost c++11


【解决方案1】:

看来编译错误是私有构造器引起的,这段代码可以编译,希望对你有帮助,

#include <vector>
#include <cassert>
#include <iostream>
#include <iomanip>
#include <math.h>
#include <list>
#include <iterator>
using namespace std;

#define nullptr NULL
template <typename T_>
class square_list
{
public:
    typedef T_              value_type;
    typedef std::size_t     size_type;
    typedef T_ &            reference;
    typedef T_ const &      const_reference;
    typedef T_ *            pointer;
    typedef T_ const *      const_pointer;
    typedef T_ *            iterator;
    typedef T_ const *      const_iterator;
    typedef std::ptrdiff_t  difference_type;

    typedef std::reverse_iterator<iterator> reverse_iterator;
    typedef std::reverse_iterator<const_iterator> const_reverse_iterator;



     //for header vector<pair<itr,unsindINT) header
    list<value_type> data;


    square_list() {}
    ~square_list(){}

    bool empty(){
        if(this->begin() == nullptr && this->end() == nullptr)
            return 1;
        else
            return 0;
    }

    /*list<T_>::iterator  begin() {
        return data.begin();
    }
    list<T_>::iterator  end() {
        return data.end();
    }*/
};


int main()
{
    square_list<int> sq_list;
    return 0;
}

【讨论】:

【解决方案2】:

您的模板参数是T_,但您指的是未定义的T。尝试改变

list<T> data<T>;

list<T_> data;

另外,尝试注释掉类声明中的所有内容并进行编译。然后一次取消注释一行,并处理添加每一行后出现的任何错误。

【讨论】:

    【解决方案3】:

    第一个问题就是这一行

    list<T> data<T>;
    

    应该是

    list<T> data;
    

    那些模板参数是不必要的并且在语法上是无效的。此外,您还没有定义模板参数T。你是说T_(还是value_type)?

    此外,您需要 typename 作为 begin()end() 方法的返回类型,因为 value_type 是依赖类型:

    typename list<value_type>::iterator  begin();
    typename list<value_type>::iterator  end();
    

    您甚至可以利用返回类型推导:

    auto begin() -> decltype(data.begin());
    auto end()   -> decltype(data.end());
    

    【讨论】:

    • 你能看到更新吗,因为我评论了~square_list()之后的所有内容{}
    • 不,我有提升测试单元作为我的主要功能,也有许多错误来自 list 数据;在我与您更新后回答行我不知道是什么问题我
    【解决方案4】:
    list<value_type> data;
    

    代码的问题是缺少std::如下:

    std::list<value_type> data;
    

    你也在类定义之前写using namespace std;

    【讨论】:

      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-05
      • 2012-10-04
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多