声明列表列表时"required from here"错误

"required from here" error declaring a List of Lists

本文关键字:列表 here 错误 from required 声明      更新时间:2023-10-16

我正在尝试以这种方式声明列表:

List_vector<List_vector<int> > multilist;

但日食强调了上述声明并给出了此错误:

从这里需要

部分list_vector实现:

template<class T>
class List_vector: public Linear_list<T, int> {
public:
  typedef typename Linear_list<T, int>::value_type value_type;
  typedef typename Linear_list<T, int>::position position;
  List_vector();
  List_vector(int);
  List_vector(const List_vector<T>&);
  ~List_vector();
private:
    void change_dimension_(T*&, int, int);
    value_type* elements_;
    int length_; // the length of the list
    int array_dimension_; // array's dimension
};

编译器输出:

g++ -O3 -Wall -c -fmessage-length=0 -o multilista.o "..\multilista.cpp" 
In file included from ..multilista.cpp:1:0:
..list_vector.h: In instantiation of 'List_vector<T>::~List_vector() [with T = List_vector<int>]':
..multilista.cpp:16:32: required from here
..list_vector.h:78:5: warning: deleting object of polymorphic class type List_vector<int>' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]
..list_vector.h: In member function 'List_vector<T>::value_type List_vector<T>::read(List_vector<T>::position) const [with T = int; List_vector<T>::value_type = int; List_vector<T>::position = int]':
..list_vector.h:136:1: warning: control reaches end of non-void function [-Wreturn-type]
..list_vector.h: In member function 'List_vector<T>::value_type List_vector<T>::read(List_vector<T>::position) const [with T = List_vector<int>; List_vector<T>::value_type = List_vector<int>; List_vector<T>::position = int]':
..list_vector.h:136:1: warning: control reaches end of non-void function [-Wreturn-type]
g++ -O3 -Wall -c -fmessage-length=0 -o tester.o "..\tester.cpp" 
g++ -o Lista.exe tester.o multilista.o 
In file included from ..multilista.cpp:1:0:
..list_vector.h: In instantiation of 'List_vector<T>::~List_vector() [with T = List_vector<int>]':
..multilista.cpp:16:32:   required from here
..list_vector.h:78:5: warning: deleting object of polymorphic class type 'List_vector<int>' which has non-virtual destructor might cause undefined behaviour [-Wdelete-non-virtual-dtor]

如果您要衍生出Linear_List,则应考虑使destructor虚拟化,就像它所说的那样。不过,这只是一个警告,只有您知道它是否真的需要(没有足够的代码来判断)。

..list_vector.h: In member function 'List_vector<T>::value_type List_vector<T>::read(List_vector<T>::position) const [with T = int; List_vector<T>::value_type = int; List_vector<T>::position = int]':
..list_vector.h:136:1: warning: control reaches end of non-void function [-Wreturn-type]

您尚未粘贴List_vector::read的代码,但是它似乎在做错事:函数中的每个路径都应返回List_vector::value_type(除非抛出异常)这两个。

..list_vector.h: In member function 'List_vector<T>::value_type List_vector<T>::read(List_vector<T>::position) const [with T = List_vector<int>; List_vector<T>::value_type = List_vector<int>; List_vector<T>::position = int]':
..list_vector.h:136:1: warning: control reaches end of non-void function [-Wreturn-type]