我正在创建一个读取文件并对该文件中的数据执行某些操作的项目:

名称SurferDataBase.cpp

#ifndef NAMESURFERDATABASE_CPP
#define NAMESURFERDATABASE_CPP
#include "NameSurferDataBase.h"
#include "linked_list.h"
#include <iostream>
#include <list>
#include <cstdlib>
#include <vector>
#include <iostream>
#include <fstream>
#include <string>
#include <ostream>
#include <sstream>
#include <iomanip>
#include <istream>
#include <cstdio>

using namespace std;

NameSurferDataBase::NameSurferDataBase(string filename){
    getNameData(filename);
}

void NameSurferDataBase::getNameData(string filename){
    ifstream input;
    input.open(filename);
    if(!input.is_open()){
        cout << "Not Open";
    }else{
        string temp;
        while(input.is_good()){
            getline(input,temp);
            if(!input.eof()){
                NameSurferEntry entry(temp);
                database.InsertInOrder(entry);
            }
        }
    }
}

NameSurferEntry NameSurferDataBase::findEntry(string name){
    NameSurferEntry temp(name);
    if(database.Search(temp) == true){
        return temp;
   } else{
       cout << "Name not found" << endl;
   }
}
#endif


NameSurferDataBase.h

#ifndef NAMESURFERDATABASE_H
#define NAMESURFERDATABASE_H
#include "NameSurferEntry.h"
#include "linked_list.h"
#include <iostream>
#include <list>
#include <string>

class NameSurferDataBase {
public:
    NameSurferDataBase(string filename);
    void getNameData(string filename);
    NameSurferEntry findEntry(string name);
private:
    linked_list<NameSurferEntry> database;
};
#endif


每当我尝试编译时,我的main代码都会在此行上出现以下错误:

NameSurferDataBase namesdb = NameSurferDataBase("NamesData.txt");


main.cpp:在“ int main()”函数中:
main.cpp:19:67:错误:使用已删除的功能‘NameSurferDataBase :: NameSurferDataBase(NameSurferDataBase &&)”
    NameSurferDataBase namesdb = NameSurferDataBase(“ NamesData.txt”);
                                                                       ^
在main.cpp:5:0包含的文件中:
NameSurferDataBase.h:11:7:注意:“ NameSurferDataBase :: NameSurferDataBase(NameSurferDataBase &&)”被隐式删除,因为默认定义的格式不正确:
 类NameSurferDataBase {
       ^ ~~~~~~~~~~~~~~~~~
NameSurferDataBase.h:11:7:错误:从类型为“ linked_list ”的右值对类型为“ linked_list &”的非常量引用进行了无效的初始化


为什么说我的构造函数格式错误?

最佳答案

您正在构造一个临时NameSurferDataBase并将其移至namesdb。由于使用了linked_list,因此无法生成默认的move构造函数,这很可能会禁止移动。

直接构造namesdb,它应该可以正常工作,例如:

NameSurferDataBase namesdb("NamesData.txt");

09-06 22:57