C ++ - 类问题

时间:2011-01-22 14:15:29

标签: c++ class pointers

在: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 个答案:

答案 0 :(得分:5)

您必须包含声明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 :(得分:1)

添加

#include <string.h>

并在第19行将工资改为m_wage。

答案 2 :(得分:1)

你需要:

#include <string>
#include <iostream>
#include <string.h>

答案 3 :(得分:1)

关于上一条警告/错误消息 - setInfo()成员函数的第一个参数应声明为const char*。普通char*表示指向可变字符数组的指针,字符串文字"Abder-Rahman"不是。

答案 4 :(得分:1)

错误是因为在cstring头文件中声明了strncpy。

使用指针是因为您使用的是C字符串,它们是char数组。 C中的数组通过指针使用。 strncpy接受char(char数组)的两个指针来执行复制过程。

答案 5 :(得分:1)

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警告。