С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55

Какая может быть причина ошибки компилятора?

18.05.2015, 17:46. Показов 4370. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Не понимаю, что у меня неправильно.
Получаю следующий текст.
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ios:
39,
from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/istr
eam:40,
from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/fstr
eam:40,
from defs.h:6,
from main.cpp:6:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h: In copy c
onstructor ?std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char,
std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:790: error
: ?std::ios_base::ios_base(const std::ios_base&)? is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:47: error: within t
his context
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd: In copy constructo
r ?std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream
<char, std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:81: note: synthesiz
ed method ?std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char,
std::char_traits<char> >&)? first required here
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/streambuf: In copy constru
ctor ?std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf
<char, std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/streambuf:770: error: ?std
::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>
&) [with _CharT = char, _Traits = std::char_traits<char>]? is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:78: error: within t
his context
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd: In copy constructo
r ?std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream
<char, std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:81: note: synthesiz
ed method ?std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_fi
lebuf<char, std::char_traits<char> >&)? first required here
In file included from main.cpp:6:
defs.h: In copy constructor ?PsfFileReader::PsfFileReader(const PsfFileReader&)?:
defs.h:159: note: synthesized method ?std::basic_ifstream<char, std::char_traits<char> >::basic
_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)? first required here
main.cpp: In function ?int main(int, char**)?:
main.cpp:71: note: synthesized method ?PsfFileReader::PsfFileReader(const PsfFileReader&)? firs
t required here
main.cpp:71: error: initializing argument 1 of ?int Analyzer::StepThroughData(PsfFileReader,
PsfFileReader)?
make: *** [main.o] Error 1
Если добавить прототип копи конструктора в объявление, то ошибка пропадает. Но мне непонятно, какой код должен содержать этот копи конструктор и для чего он вообще нужен.

Весь мой код довольно громоздкий, поэтому я постарался его минимизировать, при этом ошибка не воспроизвелась.
Файл pfr.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
35
36
37
38
#include <fstream>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstring>
#include <vector>
#include <stdlib.h>
#include <unistd.h>  // getopt()
#include <map>
#include <list>
 
using namespace std; 
 
class PsfFileReader {
public:
  PsfFileReader(string S1);
//  PsfFileReader(const PsfFileReader&);
    
  void setDataBlock(); // member functions
  void setPrevDataBlock();
//  void setGroupVars();
  void setSVVname(string);
  string getSVVname();
  double getSVVvalue();
  double getPrevSVV();
  int getGroupMode();
  ifstream File;
 
private:
  int GroupMode;
  string SVVname; // name associated with Sweep Variable Value
  double SVVvalue;
  double prevSVV;
  map<string, string> GroupVars;
  map<string, double> DataBlock;
  map<string, double> prevDataBlock;
}; // PsfFileReader
Файл pfr.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
#include "pfr.h"
 
using namespace std; 
 
PsfFileReader::PsfFileReader(string S) {
    
  this->File.open(S.c_str(), ios_base::in);
  if (!this->File.is_open()) { 
    cerr<<"PSFE003 "<<S<<endl;
    return; 
  }
  cout<<"File opened "<<S<<endl;
};
// PsfFileReader::PsfFileReader(const PsfFileReader& PFR) {
//   cout<<"Need to implement PsfFileReader::PsfFileReader(const PsfFileReader&) \n";
//   return(PFR);
// };
 
int main(int argc, char *argv[]){
 
  string fileName1=argv[1];
    PsfFileReader PFR(fileName1);
    
};
Добавлено через 33 минуты
Интересно, что наличие пустого конструктора
C++
1
PsfFileReader::PsfFileReader(const PsfFileReader& PFR) {};
убирает и ошибку компилятора, и ошибку линковки.

Код-то будет при этом работать правильно? Это можно как-то объяснить?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.05.2015, 17:46
Ответы с готовыми решениями:

Cmd при выполнении кода, какая может быть причина
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; //Подключение заголовочного файла библиотеки...

Сайт не работает на телефоне, какая может быть причина?
Собрал кое как из кусков интернет магазин, захожу с мобилки на него, а там он не весь работает... какая может быть причина? кто то...

Не отображается рисунок из файла ресурсов. Какая может быть причина?
Пересмотрел несколько сайтов, где объясняется, как подключать файл ресурсов и загружать из него рисунки. С помощью Image Editor создал...

13
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.05.2015, 17:55
В приведенном коде ошибки нет, а вот там, куда объект класса передается по значению — ожидается конструктор копирования, о чем нам и сообщают:
Цитата Сообщение от rotciv Посмотреть сообщение
main.cpp:71: note: synthesized method ?PsfFileReader::PsfFileReader(const PsfFileReader&)? firs
t required here
main.cpp:71: error: initializing argument 1 of ?int Analyzer::StepThroughData(PsfFileReader,
PsfFileReader)?
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.05.2015, 17:55
Цитата Сообщение от rotciv Посмотреть сообщение
Код-то будет при этом работать правильно?
Вероятно, нет.
Цитата Сообщение от rotciv Посмотреть сообщение
Весь мой код довольно громоздкий, поэтому я постарался его минимизировать, при этом ошибка не воспроизвелась.
Что поделать, но без полного кода сложно диагностировать проблему.
По логу видно, что есть некая функция StepThroughData, в которую PsfFileReader передается по значению, поэтому здесь необходим копиконструктор. Но вот почему компилятор не устроил автоматически сгенерированный конструктор - вопрос, на который можно ответить только имея полный код перед глазами.
1
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.05.2015, 17:57
Цитата Сообщение от DrOffset Посмотреть сообщение
Но вот почему компилятор не устроил автоматически сгенерированный конструктор
У класса один из мемберов — типа ifstream, а потоки не копируются по дефолту.
1
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.05.2015, 19:16
Цитата Сообщение от 0x10 Посмотреть сообщение
У класса один из мемберов — типа ifstream, а потоки не копируются по дефолту.
Телепатия в ход пошла? Я тоже мог предположить (например насчет ссылки в качестве поля класса). Но лучше когда автор сам скажет.
0
 Аватар для SmittWesson
236 / 196 / 21
Регистрация: 04.06.2014
Сообщений: 1,309
18.05.2015, 19:23
Не-а. Не скажет. Давно завис.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
18.05.2015, 19:25
Цитата Сообщение от DrOffset Посмотреть сообщение
Телепатия в ход пошла?
Да почему. Первый фрагмент кода, 28 строка: ifstream File;
2
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
18.05.2015, 22:11
Цитата Сообщение от 0x10 Посмотреть сообщение
Да почему. Первый фрагмент кода, 28 строка: ifstream File;
А ты глазастый
Я не заметил. В паблике переменные не ожидал увидеть.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
18.05.2015, 22:25
Лучший ответ Сообщение было отмечено rotciv как решение

Решение

Цитата Сообщение от rotciv Посмотреть сообщение
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:790: error
: ?std::ios_base::ios_base(const std::ios_base&)? is private
Получается попытка скопировать частные данные.
Цитата Сообщение от rotciv Посмотреть сообщение
main.cpp:71: error: initializing argument 1 of ?int Analyzer::StepThroughData(PsfFileReader,
PsfFileReader)?
Может быть, попробовать использовать ссылки?
C++
1
int Analyzer::StepThroughData(PsfFileReader&, PsfFileReader& );
или
C++
1
int Analyzer::StepThroughData( const PsfFileReader&, const PsfFileReader& );
1
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
19.05.2015, 03:41
Цитата Сообщение от Alex5 Посмотреть сообщение
Получается попытка скопировать частные данные.
Попытка вызвать приватный конструктор копирования.
1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
19.05.2015, 10:40
Цитата Сообщение от rotciv Посмотреть сообщение
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:790: error
: ?std::ios_base::ios_base(const std::ios_base&)? is private
Цитата Сообщение от 0x10 Посмотреть сообщение
Попытка вызвать приватный конструктор копирования.
Верно, здесь конструктор копирования.

Добавлено через 12 минут
Ошибка доступа к частным данным возникает в VS2008.
error C2248: std::basic_ios<_Elem,_Traits>::basic_ios : невозможно обратиться к private член, объявленному в классе "std::basic_ios<_Elem,_Traits>"

Сообщение диагностики возникло в созданной компилятором функции "std::basic_ifstream<_Elem,_Traits>::bas ic_ifstream(const std::basic_ifstream<_Elem,_Traits> &)"
C++
1
2
3
4
5
6
7
8
9
10
11
struct A
{
    ifstream f;
};
 
 
int main()
{
    A a;
    A b(a);
}
0
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
19.05.2015, 12:26  [ТС]
Воспроизвелась ошибка! Я не догадался сам, что это с передачей в функцию связано.
Чуток изменился файл pfr.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
#include "pfr.h"
 
using namespace std; 
 
PsfFileReader::PsfFileReader(string S) {
    
  this->File.open(S.c_str(), ios_base::in);
  if (!this->File.is_open()) { 
    cerr<<"PSFE003 "<<S<<endl;
    return; 
  }
  cout<<"File opened "<<S<<endl;
};
// PsfFileReader::PsfFileReader(const PsfFileReader& PFR) {
//   cout<<"Need to implement PsfFileReader::PsfFileReader(const PsfFileReader&) \n";
//   return(PFR);
// };
 
int StepThroughData(PsfFileReader PFR, PsfFileReader PFR2) {
   cout<<endl;
};
 
int main(int argc, char *argv[]){
 
  string fileName1=argv[1];
  PsfFileReader PFR(fileName1);
  PsfFileReader PFR2(fileName1);
  StepThroughData(PFR, PFR2);
};
Добавлено через 4 минуты
Лог теперь такой.
In file included from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/ios:39,
from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/istream:40,
from /usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/fstream:40,
from pfr.h:5,
from pfr.cpp:1:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h: In copy constructor ?std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/bits/ios_base.h:790: error: ?std::ios_base::ios_base(const std::ios_base&)? is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:47: error: within this context
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd: In copy constructor ?std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:81: note: synthesized method ?std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)? first required here
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/streambuf: In copy constructor ?std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/streambuf:770: error: ?std::basic_streambuf<_CharT, _Traits>::basic_streambuf(const std::basic_streambuf<_CharT, _Traits>&) [with _CharT = char, _Traits = std::char_traits<char>]? is private
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:78: error: within this context
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd: In copy constructor ?std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)?:
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../include/c++/4.4.7/iosfwd:81: note: synthesized method ?std::basic_filebuf<char, std::char_traits<char> >::basic_filebuf(const std::basic_filebuf<char, std::char_traits<char> >&)? first required here
In file included from pfr.cpp:1:
pfr.h: In copy constructor ?PsfFileReader::PsfFileReader(const PsfFileReader&)?:
pfr.h:19: note: synthesized method ?std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const std::basic_ifstream<char, std::char_traits<char> >&)? first required here
pfr.cpp: In function ?int main(int, char**)?:
pfr.cpp:28: note: synthesized method ?PsfFileReader::PsfFileReader(const PsfFileReader&)? first required here
pfr.cpp:28: error: initializing argument 1 of ?int StepThroughData(PsfFileReader, PsfFileReader)?
Добавлено через 10 минут
Цитата Сообщение от Alex5 Посмотреть сообщение
Может быть, попробовать использовать ссылки?
C++
1
int Analyzer::StepThroughData(PsfFileReader&, PsfFileReader& );
Это - помогло.
При нижеследующем описании функции StepThroughData, ошибка пропадает.
C++
1
int StepThroughData(PsfFileReader& PFR, PsfFileReader& PFR2)
Всем огромное спасибо!
0
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2223 / 1425 / 420
Регистрация: 16.05.2013
Сообщений: 3,642
Записей в блоге: 6
19.05.2015, 12:33
Смею предположить, что у вас в классе PsfFileReader есть поле File которое является потоком. При прередаче объекта данного класса в функцию int StepThroughData(PsfFileReader PFR, PsfFileReader PFR2); вызывается конструктор копирования. Однако вы не удосужились его написать и он генерируется по умолчанию, что в данном случае приводит к генерации кода приводящего к копированию полей класса. Однако поле File является потоком и для него конструктор копий закрыт. Пишите свой конструктор копий для класса PsfFileReader или передавайте параметр по ссылке.
1
0 / 0 / 0
Регистрация: 04.03.2015
Сообщений: 55
19.05.2015, 13:06  [ТС]
И Вы правы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.05.2015, 13:06
Помогаю со студенческими работами здесь

Ошибки линкера, в чем может быть причина?
Решил сделать простенький графический иньерфейс в среде Qt для лабораторной работы по полиморфизму основной виджет: заголовок ...

Некоректно отображается User control. В чём может быть причина ошибки?
Ниже прикрепил два скрина. Первый - это то, как должен выглядеть контрол, второй - как он выглядит при добавлении на форму. (там в левом...

В чем может быть причина?
Иногда, после запуска компьютера, минут через 20 начинает что-то происходить. Если я резко двигаю страницу например или в игре резко двигаю...

В чем может быть причина?
Здравствуйте. Для формы базы данных создал вот такой вот обработчик событий: Private Sub Код_должности_AfterUpdate() Dim X As...

В чем может быть причина
Добрый день! Обзавелись вторым провайдером. Предоставляет нам интернет по РРЛ. Проблема заключается в следующем: 1.Подключаю к...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru