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

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

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

При потсроении пишет что конструктор либо недоступен либо объявлен как explicit - C++

21.02.2014, 15:24. Просмотров 406. Ответов 6
Метки нет (Все метки)

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
53
54
55
56
57
58
59
60
61
62
63
64
/*Все обьекты содержимые в контейнерах без проблем выводятся через потоковые итераторы и алгоритм copy. Но когда речь идет о собственных структурах происходит проблемка. При потсроении пишет что конструктор либо недоступен либо объявлен как explicit. Конкретно при запуске не работает строка где вызывается алгоритм copy.*/
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#include <map>
#include <iterator>
#include <string>
using namespace std;
class Student
{
private:
    string name;
    int group;
    double mark;
public:
    Student ()
    {    }
    Student(Student& a)
    {
        name=a.name;
        group=a.group;
        mark=a.mark;
    }
    Student(string name1,int group1,double mark1)
    {
        name=name1;
        group=group1;
        mark=mark1;
    }
    ~Student()
    {    }
    friend ostream& operator<<(ostream& s,Student& a)
    {
        s<<a.name<<endl;
        s<<a.group<<endl;
        s<<a.mark<<endl;
        return s;
    }
    friend istream& operator>>(istream& s,Student& a)
    {
        s>>a.name;
        s>>a.group;
        s>>a.mark;
        return s;
    }
    Student& operator=(Student& b)
    {
        name=b.name;
        group=b.group;
        mark=b.mark;
        return *this;
    }
};
int main()
{
    ifstream myfile;
    myfile.open("List.txt");
    vector<Student> vec;
    istream_iterator<Student> studit(myfile);
    istream_iterator<Student> end_of_stream;
    copy(studit,end_of_stream,back_inserter(vec));
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 15:24     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit
Посмотрите здесь:
При изменении каких либо данных программа либо вылетает, либо просто не изменяет данные C++
Что-то интересное. Или программа, которая принимает либо 1, либо 2 числа C++
C++ две прямые либо паралельны либо совпадают либо не существуют
C++ Можно ли передать в функцию либо вектор, либо список, если да, то как?
Найти либо максимум, либо минимум для трех задаваемых чисел C++
Проверка открытия файла либо работает, либо уходит в бесконечность C++
Никак не могу найти ошибку, должен сосздать матрицу либо из звездочеку либо из пробелов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
1644 / 1272 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
21.02.2014, 21:08     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit #2
конструктор копии должен принимать константную ссылку
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
21.02.2014, 23:56     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit #3
как и оператор присваивания
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.02.2014, 00:10     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit #4
... которые можно было и не писать вовсе.
дефолтные делают то же, что и самодельные.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 10:49     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit #5
Цитата Сообщение от igorrr37 Посмотреть сообщение
конструктор копии должен принимать константную ссылку
В общем случае это не так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct C
{
    C() { }
    C( C& ) { std::cout << "non-const copy ctor\n"; }
    C( const C& )   { std::cout << "const copy ctor\n"; }
};
 
int main() {
    
    C c;
    const C cc;
    C c1 = c; // non-const
    C c2 = cc; // const 
 
    return 0;
}
C++11 12.8/2:
A non-template constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments
DU
1482 / 1058 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2014, 21:28     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit #6
алгоритмы предъявляют некоторые требования к типам, которыми они манипулируют.
в нашем случае это наличие копи-конструктора с константной ссылкой или мув копи конструктора
и хз чего еще.
а наличие в классе не шаблонного копи-конструктора, который скажем принимает X& отрубает генерацию
дефолтных конструкторов копирования с другими сигнатурами (const X&, volatile X& or const volatile X&).

вот и получается ошибка. если этот пример немного модифифировать, то получится как раз такая
же ошибка как у ТС:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
struct C
{
    C() { }
    C( C& ) { std::cout << "non-const copy ctor\n"; }
    //C( const C& )   { std::cout << "const copy ctor\n"; }
};
 
int main() {
    
    C c;
    const C cc;
    //C c1 = c; // non-const
    C c2 = cc; // const 
 
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 21:50     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit
Еще ссылки по теме:
C++ По условию вывести сумму либо чётных, либо нечётных разрядов заданного шестизначного числа
Сделать либо так, чтобы в файл записывались рандомные матрица и вектор, либо из файла считывать C++
C++ Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду
Вывести в алфавитном порядке слова, которые присутствуют либо в первой строке, либо во второй, но не в обеих сразу. C++
C++ Что конкретно означает оператор . (точка) при вызове каких либо функций?

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
26.02.2014, 21:50     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit #7
Цитата Сообщение от Tulosba Посмотреть сообщение
В общем случае это не так
как и это не так:
Цитата Сообщение от retmas Посмотреть сообщение
как и оператор присваивания
Yandex
Объявления
26.02.2014, 21:50     При потсроении пишет что конструктор либо недоступен либо объявлен как explicit
Ответ Создать тему
Опции темы

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