Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

21.02.2014, 15:24. Просмотров 435. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.02.2014, 15:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При потсроении пишет что конструктор либо недоступен либо объявлен как explicit (C++):

При изменении каких либо данных программа либо вылетает, либо просто не изменяет данные - C++
Добрый вечер. Только недавно начал заниматься С++. И вот возникли проблемы. При изменении каких либо данных. Программа либо вылетает(Qt),...

Что-то интересное. Или программа, которая принимает либо 1, либо 2 числа - C++
Программа - консольное приложение, в качестве параметров при вызове принимает одно или два целых числа. Как это реализовать на C++? Проще...

две прямые либо паралельны либо совпадают либо не существуют - C++
Д даны числа a1, b1, c1, a2, b2, c2. Напечатать координаты точки пересечения прямых, описываемых уравнениями a1x+b1y=c1 и a2x+b2y=c2, либо...

Можно ли передать в функцию либо вектор, либо список, если да, то как? - C++
Можно ли передать в функцию либо вектор, либо список, если да, то как?

Найти либо максимум, либо минимум для трех задаваемых чисел - C++
Написать программу, которая находит максимум, либо минимум для трех задаваемых чисел. Вопрос: не могу понять что за минимум и максимум...

Проверка открытия файла либо работает, либо уходит в бесконечность - C++
string A=Enterway('t');//функция ввода адреса файла fstream str(A.c_str(), ios::in ); for(;;){ if (!str){ cout &lt;&lt; &quot;ERROR!!! Файл...

6
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
21.02.2014, 21:08 #2
конструктор копии должен принимать константную ссылку
0
retmas
Жарю без масла
864 / 746 / 168
Регистрация: 13.01.2012
Сообщений: 1,702
21.02.2014, 23:56 #3
как и оператор присваивания
0
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.02.2014, 00:10 #4
... которые можно было и не писать вовсе.
дефолтные делают то же, что и самодельные.
0
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 10:49 #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
1
DU
1484 / 1130 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
26.02.2014, 21:28 #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;
}
0
castaway
Эксперт С++
4915 / 3023 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
26.02.2014, 21:50 #7
Цитата Сообщение от Tulosba Посмотреть сообщение
В общем случае это не так
как и это не так:
Цитата Сообщение от retmas Посмотреть сообщение
как и оператор присваивания
0
26.02.2014, 21:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 21:50
Привет! Вот еще темы с ответами:

По условию вывести сумму либо чётных, либо нечётных разрядов заданного шестизначного числа - C++
Пользователь вводит шестизначное число. Если сумма четных разрядов больше суммы нечетных разрядов этого числа, вывести сумму четных...

Никак не могу найти ошибку, должен сосздать матрицу либо из звездочеку либо из пробелов - C++
#include &lt;iostream&gt; #include &lt;cmath&gt; #include &lt;ctime&gt; using namespace std; int main(){ char a; int zvezd,probel,b; int...

Либо удваивая одиночные, либо заменяя сдвоенные одним символом, привести строку к заданному виду - C++
Помогите решить эту задачу, я написал решение, но оно получилось огромным (73 строчки), непонятным и страшным. Это пятая задача из...

Сделать либо так, чтобы в файл записывались рандомные матрица и вектор, либо из файла считывать - C++
ребят есть вот прога, она заполняет рандомами матрицу и вектор и перемножает. И есть соответственно проги для чтения из файла или записи в...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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