Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
WLF
1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 109
1

Инициализация полей структуры в конструкторе по-умолчанию класса

30.03.2019, 13:23. Показов 1786. Ответов 5
Метки нет (Все метки)

Всем привет!
StudentsList.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <vector>
#pragma once
 
class StudentsList
{
public:
    StudentsList();
    ~StudentsList();
    void ShowAll() const;
 
private:
    struct Student
    {
        std::string name;
        int age;
        double stipend;
    };
    std::vector<Student> Students;
};

StudentsList.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "StudentsList.h"
#include <string>
#include <iostream>
 
StudentsList::StudentsList()
{
    Student.name = "";
    Student.age = 0;
    Student.stipend = 0.0;
}
 
 
StudentsList::~StudentsList()
{
}
 
 
void StudentsList::ShowAll() const
{
    std::cout << "Списочег:\n" << std::endl;
}

MSVC17 выдаёт ошибки:
Код
Severity	Code	Description	Project	File	Line	Suppression State
Error (active)	E0040	expected an identifier	ClassDemo2	D:\Archives\YandexDisk\src\Visual Studio\ClassDemo2\ClassDemo2\StudentsList.cpp	7	
Error (active)	E0415	no suitable constructor exists to convert from "const char [1]" to "StudentsList::Student"	ClassDemo2	D:\Archives\YandexDisk\src\Visual Studio\ClassDemo2\ClassDemo2\StudentsList.cpp	7	
Error (active)	E0040	expected an identifier	ClassDemo2	D:\Archives\YandexDisk\src\Visual Studio\ClassDemo2\ClassDemo2\StudentsList.cpp	8	
Error (active)	E0415	no suitable constructor exists to convert from "int" to "StudentsList::Student"	ClassDemo2	D:\Archives\YandexDisk\src\Visual Studio\ClassDemo2\ClassDemo2\StudentsList.cpp	8	
Error (active)	E0040	expected an identifier	ClassDemo2	D:\Archives\YandexDisk\src\Visual Studio\ClassDemo2\ClassDemo2\StudentsList.cpp	9	
Error (active)	E0415	no suitable constructor exists to convert from "double" to "StudentsList::Student"	ClassDemo2	D:\Archives\YandexDisk\src\Visual Studio\ClassDemo2\ClassDemo2\StudentsList.cpp	9
Почему?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2019, 13:23
Ответы с готовыми решениями:

Инициализация шаблонного класса(В конструкторе класса после двоеточия вновь имя класса)
Всем доброго времени суток! Пытаюсь разобраться как работает приведенный мной код. Конкретно,...

Инициализация объектов класса в конструкторе другого класса
У меня есть класс Subscriber,в котором есть несколько объектов другого класса Date,мне нужно,чтобы...

Инициализация перемнных класса в конструкторе
Есть ли разница между Constructor():var_1(VAL), var_2(VAL) {} и Constructor() { var_1 = VAL;...

Инициализация в конструкторе или теле класса ?
Вопрос я думаю достаточно нубский, но google не помог. например есть класс public class Point...

__________________

Записывайтесь на профессиональные курсы C++ разработчиков
5
4043 / 2294 / 956
Регистрация: 07.02.2019
Сообщений: 5,984
30.03.2019, 14:24 2
Цитата Сообщение от WLF Посмотреть сообщение
Почему?
Потому что Student это описание структуры, а не именованный объект, но вы пытаетесь инициализировать.
0
WLF
1 / 2 / 0
Регистрация: 06.12.2013
Сообщений: 109
30.03.2019, 16:41  [ТС] 3
Цитата Сообщение от zayats80888 Посмотреть сообщение
Потому что Student это описание структуры, а не именованный объект, но вы пытаетесь инициализировать.
Не понимаю... Можно пример доступа к полям структуры в классе?
0
4043 / 2294 / 956
Регистрация: 07.02.2019
Сообщений: 5,984
30.03.2019, 17:02 4
Лучший ответ Сообщение было отмечено WLF как решение

Решение

Цитата Сообщение от WLF Посмотреть сообщение
Можно пример доступа к полям структуры в классе?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
lass StudentsList
{
public:
    StudentsList();
    ~StudentsList();
    void ShowAll() const;
 
private:
    struct Student
    {
        std::string name;
        int age;
        double stipend;
    } st;
    std::vector<Student> Students;
};
StudentsList::StudentsList()
{
    st.name = "";
    st.age = 0;
    st.stipend = 0.0;
}
Добавлено через 3 минуты
Только я не понимаю зачем вам это нужно
1
1354 / 992 / 314
Регистрация: 28.07.2012
Сообщений: 2,750
30.03.2019, 17:09 5
Цитата Сообщение от WLF Посмотреть сообщение
C++
1
2
3
4
5
6
struct Student
{
    std::string name;
    int age;
double stipend;
};
Предположу, что нужно было что-то такое:
C++
1
2
3
4
5
6
struct Student
{
    std::string name;
    int age = 0;
    double stipend = 0.0;
};
0
бах-бах и в продакшен!
2622 / 1383 / 487
Регистрация: 23.09.2014
Сообщений: 4,229
Записей в блоге: 4
30.03.2019, 17:12 6
Цитата Сообщение от WLF Посмотреть сообщение
Можно пример доступа к полям структуры в классе?
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
class StudentsList
{
public:
    StudentsList();
    ~StudentsList();
    void ShowAll() const;
 
private:
    struct Student
    {   Student() : name(""),
                    age(0),
                    stipend(0.0)
        {}
 
        std::string name;
        int age;
        double stipend;
    } ;
    std::vector<Student> Students;
    void ShowAll()
    {   std::cout << "Списочег:\n";
        for(size_t i = 0; i < Students.size   (); ++i)
        {   std::cout << "|----------------:"<< "\n";
            std::cout << i                   << "\n";
            std::cout << Students[i].name    << "\n";
            std::cout << Students[i].age     << "\n";
            std::cout << Students[i].stipend << "\n";
 
        }
    }
};
StudentsList::StudentsList()
{   Student studemt;
    Students.push_back (studemt);
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.03.2019, 17:12

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Инициализация вектора статическим массивом в конструкторе класса
Доброго всем времени суток!Помогите разобраться.Есть класс.Нужно вектор заполнить из статического...

Создание динамического массива и его инициализация в конструкторе класса
A1uk, ПравилаИзначальное название темы: &quot;Помогите исправить код&quot;. Доброго времени суток. Помоги...

Инициализация полей структуры
Всем, привет. Такой вопрос, при написании вот такого кода в c# struct a { } int main() { ...

Инициализация всех полей структуры
Всем привет. struct sFoo { int a; char b; struct {


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

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

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