Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么编译器compain没有名为“的字段?”;列表“;?_C++ - Fatal编程技术网

C++ 为什么编译器compain没有名为“的字段?”;列表“;?

C++ 为什么编译器compain没有名为“的字段?”;列表“;?,c++,C++,我只是写了一个代码来创建一个可随机访问的列表,代码就在这里 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: MyLis

我只是写了一个代码来创建一个可随机访问的列表,代码就在这里

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
MyList.h
#ifndef MYLIST_H
#定义MYLIST_H
#包括
#包括
使用名称空间std;
模板
类MyList:公共列表
{
私人:
T结果;
公众:
MyList();
MyList(初始值设定项列表li);
T算子[](inti);
};
#endif//MYLIST\u H
.cpp在这里:

MyList.cpp

#include "mylist.h"

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

}

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

}

template<class T>
T MyList<T>::operator [](int i){
    auto temp = this->begin();
    for(int num=0;num!=i;++num){
        temp++;
    }
    return *temp;
}
MyList.cpp
#包括“mylist.h”
模板
MyList::MyList():list()
{
}
模板
MyList::MyList(初始值设定项\列表li):列表(li){
}
模板
T MyList::运算符[](int i){
自动温度=此->开始();
for(int num=0;num!=i;++num){
temp++;
}
返回*温度;
}
但是当我用它做测试的时候,它有点不对劲。关于它的错误信息如下:


那么,为什么这是错误的,我如何才能解决这个问题呢?提前感谢。

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

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

MyList::MyList(初始值设定项_list li):list(li){};
必须在.h文件中定义构造函数:

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

MyList::MyList(初始值设定项_list li):list(li){};
必须在.h文件中定义构造函数:

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

MyList::MyList(初始值设定项_list li):list(li){};
必须在.h文件中定义构造函数:

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

MyList::MyList(初始值设定项_list li):list(li){};
您必须在构造函数的mem初始值设定项中指定
列表。比如说

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

}

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

}

您必须在构造函数的mem初始值设定项中指定
list
。比如说

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

}

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

}

您必须在构造函数的mem初始值设定项中指定
list
。比如说

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

}

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

}

您必须在构造函数的mem初始值设定项中指定
list
。比如说

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

}

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

}


不要在标准容器中使用继承,而是使用组合。这个错误是你犯的更根本错误的一个挡箭牌。模板化C++类不能在CPP文件中定义成员,必须在头文件中定义它们。每个
T
必须编译成不同的类。。。cpp文件在不知道T的情况下无法编译,并且您使用的代码
MyList
(并提供
T
)没有可使用的实现。此外,还有其他评论者的好建议。另外,我建议不要为链接列表支持的内容创建操作符[]。看起来对一些根本不具备随机访问能力的东西具有随机访问能力,这是造成性能问题的一个好办法。@bhamlin,这不相关;如果将定义移动到头文件中,则会出现相同的错误。您确实需要使用
std::vector
而不是
std::list
不要使用继承,而是使用标准容器的组合。对于您犯下的更根本的错误,该错误是一个危险的信号。模板化C++类不能在CPP文件中定义成员,必须在头文件中定义它们。每个
T
必须编译成不同的类。。。cpp文件在不知道T的情况下无法编译,并且您使用的代码
MyList
(并提供
T
)没有可使用的实现。此外,还有其他评论者的好建议。另外,我建议不要为链接列表支持的内容创建操作符[]。看起来对一些根本不具备随机访问能力的东西具有随机访问能力,这是造成性能问题的一个好办法。@bhamlin,这不相关;如果将定义移动到头文件中,则会出现相同的错误。您确实需要使用
std::vector
而不是
std::list
不要使用继承,而是使用标准容器的组合。对于您犯下的更根本的错误,该错误是一个危险的信号。模板化C++类不能在CPP文件中定义成员,必须在头文件中定义它们。每个
T
必须编译成不同的类。。。cpp文件在不知道T的情况下无法编译,并且您使用的代码
MyList
(并提供
T
)没有可使用的实现。此外,还有其他评论者的好建议。另外,我建议不要为链接列表支持的内容创建操作符[]。看起来对一些根本不具备随机访问能力的东西具有随机访问能力,这是造成性能问题的一个好办法。@bhamlin,这不相关;如果将定义移动到头文件中,则会出现相同的错误。您确实需要使用
std::vector
而不是
std::list
不要使用继承,而是使用标准容器的组合。对于您犯下的更根本的错误,该错误是一个危险的信号。模板化C++类不能在CPP文件中定义成员,必须在头文件中定义它们。每个
T
必须编译成不同的类。。。cpp文件在不知道T的情况下无法编译,并且您使用的代码
MyList
(并提供
T
)没有可使用的实现。此外,还有其他评论者的好建议。另外,我建议不要为链接列表支持的内容创建操作符[]。看起来对一些根本不具备随机访问能力的东西具有随机访问能力,这是造成性能问题的一个好办法。@bhamlin,这不相关;如果将定义移动到头文件中,则会出现相同的错误。在第二种情况下,确实需要使用
std::vector
而不是
std::list
,这无助于将
li
作为参数传递给
std::list
,而不是将
li
作为参数传递给
std::list
在第二种情况下,不利于将
li
作为参数传递给
std::list
,在第二种情况下,不利于将
li
作为参数传递给
std::list