2015-12-15 45 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對象,所以當你調用它們時你會得到一個編譯器錯誤。