Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
0 / 0 / 0
Регистрация: 26.03.2019
Сообщений: 11
1

Массив char в переменной класса

04.09.2020, 13:46. Показов 4974. Ответов 5

Author24 — интернет-сервис помощи студентам
Мне нужно создать простой класс: "Населенный пункт".
Застрял в самом начале из-за условия: – Класс должен содержать одну или более переменную со строковыми данными. Строковые данные должны задаваться только с использованием массива символов (char str1[100] или wchat_t str2[200]).
Не понимаю как правильно использовать масив char. В конструкторе все переменные класса должны быть инициализированы по умолчанию, при инициализации name, coordinates выдает ошибку.

Вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
class HumanSettlement {
private:
    char name[100];
    char coordinates[100];
    int population;
public:
    HumanSettlement() {
        name = { "Name" };
        coordinates = { "Сoordinates" };
        population = 10;
    }
 
};
 
int main() {
 
}
Ошибки:
Ошибка (активно) E0137 выражение должно быть допустимым для изменения левосторонним значением TP1
Ошибка C3863 тип массива "char [100]" является неназначаемым TP1 C:\Users\user\source\repos\TP1\TP1\Source.cpp 10
Строки 10, 11.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.09.2020, 13:46
Ответы с готовыми решениями:

Преобразование текста из переменной string в char массив
Я наверное плохо еще разбираюсь в массивах но мне кажется что для моей задачи надо использовать...

Двумерный динамический массив char переменной длины, realloc()
Доброго времени, коллеги! Пытаюсь по немногу изучать разные языки, попал такую позу: надо...

Запись адреса переменной как массив char (или повторное обращение за выделением памяти)
Здравствуйте формучане, встала такая задача, есть структура определяющая &quot;мой тип&quot;, для нее был...

Массив char является полем класса: как присвоить ему значения?
Товарищи, столкнулся с проблемой. Изначально пишу программу для перегрузки операторов +,- и пр. . В...

5
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,658
04.09.2020, 14:17 2
с массивом char нельзя так инициализировать, зато можно так :
C++
1
2
3
    HumanSettlement():name("Name"),  coordinates("Сoordinates"), population(10)
    {
    };
Добавлено через 1 минуту
вам в помощь набор функций с нуль строками (массив char заканчивающbqcz '\0')
strlen, strcpy, strcat, strcmp ...
1
0 / 0 / 0
Регистрация: 26.03.2019
Сообщений: 11
04.09.2020, 14:30  [ТС] 3
Цитата Сообщение от SmallEvil Посмотреть сообщение
вам в помощь набор функций с нуль строками (массив char заканчивающbqcz '\0')
strlen, strcpy, strcat, strcmp ...
В publick использовать эти функции при инициализации? Если не сложно, простенький пример приведите. Спасибо!

Добавлено через 7 минут
Если сделать таким образом, то выполнится ли условие:
Цитата Сообщение от FelixTI Посмотреть сообщение
Строковые данные должны задаваться только с использованием массива символов (char str1[100] или wchat_t str2[200])
?

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>
 
class HumanSettlement {
private:
    const char* name;
    const char* coordinates;
    int population;
public:
    HumanSettlement() {
        name = { "Name" };
        coordinates = { "Сoordinates" };
        population = 10;
        std::cout << "Class ready";
    }
 
    void getHumanSettlement()
    {
        std::cout << "\nName:" << name;
    }
 
};
 
int main() {
    HumanSettlement a;
    a.getHumanSettlement();
 
}
0
Эксперт CЭксперт С++
5113 / 4552 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
04.09.2020, 14:48 4
FelixTI, можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
 
class HumanSettlement {
private:
    char name[100];
    char coordinates[100];
    int population;
 
public:
    HumanSettlement(const char* _name = "Name", const char* _coordinates = "Coordinates", int _population = 10)
    {
        strcpy(name, _name);
        strcpy(coordinates, _coordinates);
        population = _population;
    }
 
};
 
int main() {
    HumanSettlement hs1{};
    HumanSettlement hs2{ "N", "C", 20 };
}
1
2832 / 2337 / 707
Регистрация: 29.06.2020
Сообщений: 8,658
04.09.2020, 14:49 5
Лучший ответ Сообщение было отмечено FelixTI как решение

Решение

char * и char[100] - разные типы, условия не будет выполнятся, для char[N] не нужнно следить за выделением и освобождением памяти, но нужно следить за длинной записываемых в нее данных.
Цитата Сообщение от FelixTI Посмотреть сообщение
Если не сложно, простенький пример приведите.
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
#include <iostream>
#include <cstring>
 
using namespace std;
 
const int CHRMAX = 100;
class HumanSettlement {
private:
    char name[CHRMAX];
    char coordinates[CHRMAX];
    int population;
 
public:
 
    HumanSettlement():name("Name"),  coordinates("Сoordinates"), population(10){};
 
 
    HumanSettlement(const char * n,  const char * c, int p)
    {
     if (strlen(n)<CHRMAX)
        strcpy(name, n);
     if (strlen(c)<CHRMAX)
        strcpy(coordinates, n);
     population = p;
    };
    void setName(const char* n)
    {
     if (strlen(n)<CHRMAX)
        strcpy(name, n);
    };
    const char * getname() const
    {
     return name;
    };
};
 
int main()
{
 
HumanSettlement a; // инициализация по умолчанию
cout<<a.getname()<<endl;
a.setName("New name"); // задаем новое имя
cout<<a.getname()<<endl;
 
return 0;
}
1
Эксперт С++
8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
04.09.2020, 15:09 6
Если массивы фиксированной длины то стоит написать сеттеры и в них проверять хватает ли длины, если что бросать исключение.
0
04.09.2020, 15:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2020, 15:09
Помогаю со студенческими работами здесь

Как присвоить к новой char переменной другую char переменную с указателем
Как присвоить к новой char переменной другую char переменную с указателем #include&lt;iostream&gt;...

При присваивании символа unicode переменной типа char происходит выход за диапазон переменной
В программе при присваивании символа unicode переменной типа char происходит выход за диапазон...

Увеличение int переменной зная её имя в char переменной
Здравствуйте, у меня есть 23 int переменных b1 b2 b3 .... b23 в неком скрипте я в...

Присвоить переменной char m значиние переменной int i..
Как присвоить переменной char m значиние переменной int i таким образом ? int main() { char...

Конвертация переменной char c в char c[]
Доброго времени суток! Возникла такая проблема при программировании контроллера на языке Си. Есть...

Как полю класса типа char* присвоить значение типа *char
Проблема в строчке 46 (не пинайте сильно за формат кода и за говнокод) #include &quot;stdafx.h&quot; ...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru