2015-12-15 44 views
-2

我得到以下错误:[编译中。其错误是删除功能]

2 IntelliSense: function "std::basic_ifstream<_Elem, _Traits>::basic_ifstream(const std::basic_ifstream<_Elem, _Traits>::_Myt &) [with _Elem=char, _Traits=std::char_traits<char>]" (declared at line 818 of "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\fstream") cannot be referenced -- it is a deleted function c:\Users\varunk\Documents\Visual Studio 2013\Projects\hashmaptest\hashmaptest\hashmaptest.cpp 12 48 hashmaptest 

这里是我的代码显示错误:

// hashmaptest.cpp : Defines the entry point for the console application. 
// 

#include "stdafx.h" 
using namespace std; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 

    Init ini; 
    ifstream file("D:/test.txt", ios::in); 
    ini.filterng_three_addId_on_location_and_time(file); 

    file.close(); 


    // Node shoom = Node ("ram", 14); 
    // myMap.insert(std::make_pair(Node("abc",18), 16)); 
    return 0; 
    } 


    #pragma once 

    #include "targetver.h" 
    #include <stdio.h> 
    #include <tchar.h> 
    #include "stdafx.h" 
    #include <iostream> 
    #include <unordered_map> 
    #include <string> 
    #include<vector> 
    #include<string> 
    #include <bitset> 
    #include <utility> 
    #include <fstream> 
    using namespace std; 

    class FilterKeys 
    { 
     public: 
     FilterKeys(string a, int b) 
     { 
     name = a; 
     time = b; 
     } 
     string name; 
     int time; 

     }; 
     class HashKey 
    { 
    public: 
    size_t operator() (FilterKeys const& key) const 
    { 
     return std::hash<std::string>()(key.name)^
      (std::hash<int>()(key.time) << 1); 

     } 
     }; 

    class EqualTo 
     { 
     public : 
     bool operator()(const FilterKeys& lhs, const FilterKeys& rhs) const 
     { 
     return lhs.name == rhs.name && lhs.time == rhs.time; 
     } 

     }; 
    class Init { 
     unordered_multimap<FilterKeys, int, HashKey, EqualTo> _myMap; 
     public: 
     void filterng_three_addId_on_location_and_time(ifstream file) 
     { 

     string location; 
     int time, addId; 
     if (!file) 
      cerr << "Cant open " << endl; 

     while (file >> location >> time >> addId) 
     { 

      if (_myMap.count(FilterKeys(location, time)) < 3) 
       _myMap.insert(std::make_pair(FilterKeys(location, time),  addId)); 

     } 

    } 
    unordered_multimap<FilterKeys, int, HashKey, EqualTo> getHashMap() 
    { 
     return _myMap; 
    } 

    }; 
+0

什么是错误信息? – xboi209

+2

你的问题是什么?你不只是把你的非工作代码转储到SO上,而且希望得到答案,你知道的。 –

+2

也停止使用更新世的'_tmain'和'_TCHAR'以及其他恐怖。 –

回答

0

错误是告诉你,你不能调用ifstream的拷贝构造函数 - 它没有一个。

你需要改变:

void filterng_three_addId_on_location_and_time(ifstream file) 

void filterng_three_addId_on_location_and_time(ifstream& file) 

这将意味着你传递一个参考文件对象(而不是复印件)。您需要注意,传递参考意味着您在被调用函数中所做的更改将在main中看到。

在其他情况下,您可能想要传递引用,但禁止被调用的函数更改对象。在这种情况下,你可以这样写:

void filterng_three_addId_on_location_and_time(const ifstream& file) 

(一引用为const)。这在这里不起作用,因为所有的输入函数都会修改ifstream对象,所以当你调用它们时你会得到一个编译器错误。