Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
#1

error C2248 - C++

02.02.2014, 15:56. Просмотров 441. Ответов 8
Метки нет (Все метки)

Есть програма, которая должна откривать файл в папках, считать его хэш и добавлять в вэктор. Вот она:
File.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#pragma once
 
#include <boost/filesystem.hpp>
#include <fstream>
#include <string>
#include <functional>
 
namespace bfs = boost::filesystem;
 
class File
{
public:
    File() {}
    File(bfs::path Path);
    /*File(File&& obj);*/
    ~File();
 
    void setFilePath(bfs::path p);
    void refresh();
 
    bfs::path getFilePath();
    std::string getFileName();
    std::size_t getFileSize();
    std::size_t getFileHash();
private:
    void fileHash();
    bfs::path filePath;
    std::ifstream file;
    std::size_t fileSize;
    std::size_t hash;
 
    std::hash<std::string> hashing;
    std::string hashName;
};


File.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include "File.h"
 
File::File(bfs::path Path)
    :filePath(Path)
{
    file.open(Path.string(), std::ios::ate);        
    fileHash(); 
}
 
 
File::~File()
{
    file.close();
}
 
void File::setFilePath(bfs::path p)
{
    filePath = p;
}
 
bfs::path File::getFilePath()
{
    return filePath.string();
}
 
std::string File::getFileName()
{
    return filePath.filename().string();
}
 
std::size_t File::getFileSize()
{
    return fileSize;
}
 
void File::fileHash()
{
    fileSize = file.tellg();
    hashName = filePath.filename().string() + std::to_string(fileSize);
    hash = hashing(hashName);
}
 
std::size_t File::getFileHash()
{
    return hash;
}
 
void File::refresh()
{
    file.open(filePath.string(), std::ios::ate);        
    fileHash();
}


main.cpp
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <vector>
#include <memory>
 
#include "File.h"
 
int main(int argc, char** argv)
{
    std::vector<File> fileList;
    bfs::path fPath(bfs::initial_path());
    std::shared_ptr<File> f(new File);
 
    bfs::recursive_directory_iterator dirIt(fPath);
    while(dirIt != bfs::recursive_directory_iterator())
    {
        fileList.push_back(*f);
        
        f->setFilePath(dirIt->path());
        f->refresh();
        
        ++dirIt;
    }
 
    std::cin.get();
 
    return 0;
}


Компилятор дает такую ошыбку:
'std::basic_ifstream<_Elem,_Traits>::basic_ifstream' : cannot access private member declared in class 'std::basic_ifstream<_Elem,_Traits>'
Если я я правильно понял, то при добавлении в вектор, вызиваетса конструктор копирование, и при копировании file возникает ошыбка, так как копи конструктор file находитса в приватной секции.
мув конструктор не помог, копи тожэ, пробывал на поинтэрах та же проблема. Помогите решыть ее. Спасибо
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 15:56     error C2248
Посмотрите здесь:

error C2248 - C++
Привет всем. Из за чего может быть така ошибка error C2248? Пишу в vs 2005, подключил директиву &lt;fstream&gt; (без &quot;.h&quot;) после директив...

error C2248 - C++
Почему я не могу обратиться к private члену? файл 1 #include &lt;iostream&gt; using namespace std; class complex { private: ...

Ошибка C2248 - C++
Здравствуйте, форумчане! Необходимо написать программу рисования гипоциклоиды, я написал все функции расчёта и рисования, однако когда я...

error C4430, error C2143 - C++
error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию error C2143:...

Error C2589 и error C2059 - C++
Не могу никак исправить ошибку в последней сточке #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;algorithm&gt; #include &lt;random&gt;...

Error C4430, error C2065 - C++
main.cpp #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &quot;diophantine.h&quot; using namespace std; void main() { ...

Error X3003: redefinition error - C++
Здравствуйте! Доброго времени суток всем! Помогите пожалуйста решить проблему. Работаю в Visual Studio 2015 Community. Проект собирается...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Xopecc
33 / 28 / 2
Регистрация: 13.09.2013
Сообщений: 250
02.02.2014, 16:02     error C2248 #2
marni,
Если я я правильно понял, то при добавлении в вектор, вызиваетса конструктор копирование, и при копировании file возникает ошыбка, так как копи конструктор file находитса в приватной секции.
мув конструктор не помог, копи тожэ, пробывал на поинтэрах та же проблема. Помогите решыть ее. Спасибо
Напишите по-РУССКИ!!
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
02.02.2014, 16:08  [ТС]     error C2248 #3
Цитата Сообщение от Xopecc Посмотреть сообщение
marni,
Напишите по-РУССКИ!!
Да там есть ошыбки, но я не очень хорошо пишу по-русски, извините(
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 16:11     error C2248 #4
marni, у меня есть подозрение, что ошибка в строке
Цитата Сообщение от marni Посмотреть сообщение
file.open(Path.string(), std::ios::ate);
ибо, в ошибке явно сказано, что данный класс не имеет доступа к приватным полям.
для правильного дебага, запихните хедер и срр файл класса в срр с мейном, запустите и посмотрите на какой строке ошибка.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
02.02.2014, 16:15     error C2248 #5
А в какой строчке ошибка?
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
02.02.2014, 16:35  [ТС]     error C2248 #6
Цитата Сообщение от metaluga145 Посмотреть сообщение
marni
для правильного дебага, запихните хедер и срр файл класса в срр с мейном, запустите и посмотрите на какой строке ошибка.
Програма не запускаетса, ошибку дает на этапе компиляции, все на что указивают ошыбки это на std::ifstream и на то что нет copy-constryctor, на даже когда он был проблема все равно была
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
02.02.2014, 16:40     error C2248 #7
marni, в какой строке ошибка?
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.02.2014, 16:41     error C2248 #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ошибка при попытке засунуть File в вектор т.к. для этого требуется конструктор копирования, а дефолтный
не прокатывает, т.к. std::ifstream, который внутри File не умеет копироваться. только мувиться.

странно что запихивание ifstream в поинтеры не решили проблему. я так понял новый стандарт доступен.
значит можно так:
std::shared_ptr<std::ifstream> file;
но тут нужно понимать, что во всех копиях File они будут ссылаться на один и тот же стрим. Эсли это то, что вам нужно - то ок. Если нет - то нужно описать какое поведение вы хотите. И странно что мув конструкторы и операторы = не помогли. Как пробовали?

вот такое попробуйте:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <fstream>
#include <vector>
 
class File
{
public:
  File()
  {
  }
 
  File(File&& other)
    : m_file(std::move(other.m_file))
  {
  }
 
  File& operator = (File&& other)
  {
    m_file = std::move(other.m_file);
    return *this;
  }
 
private:
  File(const File&);
  File& operator = (const File&);
 
  std::ifstream m_file;
};
 
 
int main()
{
  File file;
  std::vector<File> vec;
  vec.push_back(std::move(file));
  return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.02.2014, 21:10     error C2248
Еще ссылки по теме:

Error C2059: syntax error : ']' - C++
Добрый день. Помогите пожалуйста разобраться с проблемой. Пишу программу, решающую систему линейных уравнений методом Крамера. Затруднение...

Error C2062 и error C2065 - C++
Добрый день, написал программу, но она показывает ошибку. П.С. Я полный чайник=),прошу помощь у знающих. Вот код: #include...

Error LNK1120, Error LNK2019 - C++
Здравствуйте . У меня проблема с кодом . #include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;fstream&gt; ...

[Error] 'error' was not declared in this scope - C++
Вот кусок кода void Token_stream::putback(Token t) { if (full) error(&quot;putback() into a full buffer&quot;); buffer = t; //...

Помогите пожалуйста "error C2143:" и "error C4430:" - C++
Здравствуйте. помогите пожалуйста понять как правильно сделать оъявление вот такой штуки... class bst{ struct et{ et* l; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
marni
2 / 2 / 0
Регистрация: 17.04.2013
Сообщений: 68
02.02.2014, 21:10  [ТС]     error C2248 #9
Цитата Сообщение от metaluga145 Посмотреть сообщение
marni, в какой строке ошибка?
Уже решыл. Там надо было копи конструктор по другому написать. Всем спасибо

Добавлено через 4 часа 20 минут
Цитата Сообщение от DU Посмотреть сообщение
Ошибка при попытке засунуть File в вектор т.к. для этого требуется конструктор копирования, а дефолтный
вот такое попробуйте:
спасибо большое.
Yandex
Объявления
02.02.2014, 21:10     error C2248
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru