为什么编译器没有名为“list”的字段?

时间:2015-07-07 04:51:15

标签: c++

我只是编写一个代码来获取一个可以访问的列表,代码就在这里。

Select col1, col2, sum(col3) sumval, count(col4) countval
into #Table
From Table
Group by col1,col2

select CAST('Concat ( col1,col2, "sum")' AS VARCHAR(50)) Key, sumval
from #Table    
UNION ALL 
select CAST('Concat (col1,col2, " count")' AS VARCHAR(50)), countval
from #Table

和.cpp在这里:

MyList.h

#ifndef MYLIST_H
#define MYLIST_H

#include <list>
#include <initializer_list>
using namespace std;

template<class T>
class MyList:public list<T>
{
private:
  T result;

public:
  MyList();
  MyList(initializer_list<T> li);
  T operator [](int i);
};

#endif // MYLIST_H

但是当我用它进行测试时,它有些不对劲。有关它的错误信息在这里: enter image description here

那么为什么会出错呢?我怎么能解决这个问题呢?提前谢谢。

2 个答案:

答案 0 :(得分:2)

您必须在构造函数的mem-initializers中指定list<T>。例如

template<class T>
MyList<T>::MyList():list<T>()
{

}

template<class T>
MyList<T>::MyList(initializer_list<T> li):list<T>(li){

}

虽然第一个构造函数可以写得更简单

template<class T>
MyList<T>::MyList()
{

}

或者它可以在类定义中定义,如

MyList() = default;

答案 1 :(得分:1)

您必须在.h文件中定义构造函数:

MyList<T>::MyList() {};

MyList<T>::MyList(initializer_list<T> li):List<T>(Li) {};