在: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;
}
当我尝试编译它时,我得到以下内容:
而且,为什么这里使用指针? void setInfo(char *strName,int id,double wage)
感谢。
答案 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警告。