C ++ - проблема класса - PullRequest
       2

C ++ - проблема класса

1 голос
/ 22 января 2011

В: http://www.learncpp.com/cpp-tutorial/82-classes-and-class-members/

Существует следующая программа (я сделал несколько небольших модификаций):

#include <iostream>

class Employee
{
public:
    char m_strName[25];
    int m_id;
    double m_wage;

    //set the employee information
    void setInfo(char *strName,int id,double wage)
    {
        strncpy(m_strName,strName,25);
        m_id=id;
        m_wage=wage;
    }

    //print employee information to the screen
    void print()
    {
        std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<wage<<std::endl;
    }
};

int main()
{
    //declare employee
    Employee abder;
    abder.setInfo("Abder-Rahman",123,400);
    abder.print();
    return 0;
}

Когда я пытаюсь его скомпилировать, я получаю следующее:

alt text

И почему здесь используется указатель? void setInfo(char *strName,int id,double wage)

Спасибо.

Ответы [ 6 ]

5 голосов
/ 22 января 2011

Вы должны будете включить заголовок, который объявляет функцию strncpy. Так что добавь

#include <cstring> 

в начале.

И имя члена m_wage, но вы использовали его как wage в своей функции print.

Изменение

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<wage<<std::endl;

до

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<m_wage<<std::endl;
                                                         ^^^^^^
1 голос
/ 22 января 2011

1.

strncpy(m_strName,strName,25);

Вам нужно #include <cstring> (где объявлен strncpy).

2

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<wage<<std::endl;

должно быть

std::cout<<"Name: "<<m_strName<<"id: "<<m_id<<"wage: $"<<m_wage<<std::endl;

3

void setInfo(char *strName,int id,double wage)

можно установить на

void setInfo(const char *strName,int id,double wage)

чтобы избавиться от предупреждения g ++ 4.x.x.

1 голос
/ 22 января 2011

Ошибка в том, что strncpy объявлен в заголовочном файле cstring.

Указатель используется, потому что вы работаете со строками C, которые являются массивами символов.Массивы в Си используются через указатели.И strncpy использует два указателя на char (массивы символов) для выполнения процесса копирования.

1 голос
/ 22 января 2011

Относительно последнего предупреждения / сообщения об ошибке - первый параметр функции-члена setInfo() должен быть объявлен как const char*. Обычный char* представляет указатель на изменяемый символьный массив, строковый литерал которого "Abder-Rahman" не является.

1 голос
/ 22 января 2011

Вам нужно:

#include <string>
#include <iostream>
#include <string.h>
1 голос
/ 22 января 2011

Добавить

#include <string.h>

И изменить заработную плату на m_wage в строке 19.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...