в этой программе меня интересует такая проблема: как получить доступ к построению переменных и я не понимаю ошибок:
gcc struct1En.cc -lstdc++ -o struct1En
struct1En.cc: In member function 'void job::cie::printBuilding()':
struct1En.cc:22: error: 'job' is not a base of 'job::cie'
struct1En.cc: In function 'int main()':
struct1En.cc:48: error: incompatible types in assignment of 'const char [10]' to 'char [20]'
Я читал, что люди используют класс, а не структуру. Но в этом случае я просто хочу знать, почему я не могу добраться до здания переменной и почему ошибка говорит о несовместимости типов при назначении 'const char [10] to' char [20] '
#include <iostream>
struct job {
private:
char name[20];
double salary;
public:
int building;
void initName() {std::cin >> name;}
void initSalary() {std::cin >> salary;}
void printName() {std::cout << "name: " << name << std::endl;}
void printSalary() {std::cout << "Salary: " << salary << std::endl;}
void printBuilding() {std::cout << "Building number : " << building << std::endl;}
struct cie {
char name[20];
int employee;
void printName(){ std::cout << "name: " << cie::name << std::endl;}
void printEmployee() {std::cout << "number of employees : " << employee << std::endl;}
void printBuilding() {std::cout << "Building number: " << this->job::building << std::endl;}
};
};
int main() {
job teacher;
std::cout << "Enter a name: \n";
std::cout << "Name: ";
teacher.initName();
teacher.printName();
std::cout << "Enter a salary: \n";
std::cout << "Salary: ";
teacher.initSalary();
teacher.printSalary();
std::cout << "Enter the number of the building: \n";
std::cout << "Building n°: ";
std::cin >> teacher.building;
teacher.printBuilding();
job::cie educationNationale;
educationNationale.name = "Courriere";
educationNationale.printName();
educationNationale.employee = 200 + 1;
educationNationale.printEmployee();
educationNationale.printBuilding();
return 0;
}
Хорошо, спасибо. Меняю и теперь эта ошибка исчезает при компиляции. void printBuilding (задание aJob) {std :: cout << "Номер здания:" << aJob.building << std :: endl;} and educationNationale.printBuilding (учитель); извините за этот дубликат.
Я до сих пор не понимаю эту ошибку: несовместимые типы при присвоении 'const char [10]' 'char [20]' Почему компилятор говорит const?
Я нахожу начало решения в этом вопросе: stackoverflow.com/questions/5414186/…
Поэтому я меняю код: void initName () {std :: cin >> name;} (в struct cie) и std :: cout << "Введите имя: \ n"; std :: cout << "Имя:"; educationNationale.initName (); educationNationale.printName ();
Когда вы назначаете educationNationale.name = "Courriere"; Имя переменной - это char [20], а "Courriere" - это char [10]. Это отдельные типы. Вероятно, вы захотите использовать std :: string там, где у вас есть char [20]. Введите заголовок #include <string> и замените все вхождения char [20] в ваших классах (элементы имени) на std :: string.
если вам действительно нужно использовать char [20], вы можете использовать memcpy, но это, вероятно, нецелесообразно, поскольку ошибки с ним могут быть дорогостоящими. Этот код работает: char label [20]; memcpy (метка, "Courriere", sizeof ("Courriere")); Но это небезопасно, как если бы вы попытались присвоить имя, которое было длиннее, чем char [20], вы бы записали в разделы памяти, которые находятся за пределами класса (BAD).
Спасибо за объяснение! Я использую std :: string и не использую memcpy, поскольку это, вероятно, нецелесообразно.





Структура внутри структуры - это отдельная структура. Он не получает никакой информации от родительской структуры и не получает доступа ни к одной из ее переменных.