我发现错误消息已弃用从字符串常量转换为' char *'
我在这里尝试做的是分配" First"," Last"到cfoo1并使cfoo2等于cfoo1。最后,将cfoo1和cfoo2显示为标准输出。
#include <iostream>
#include <cstring>
#include "cfoo.h"
using namespace std;
CFoo :: CFoo(char first[], char last[]){
m_first[BUF] = first[BUF];
m_last[BUF] = last[BUF];
}
void CFoo :: WriteFoo(){
cout << m_first[BUF] << ", " << m_last[BUF];
}
#ifndef CFOO_HEADER
#define CFOO_HEADER
#include <iostream>
#include <cstring>
using namespace std;
const int BUF = 256;
class CFoo{
public:
CFoo(char first[], char last[]);
void WriteFoo();
private:
char m_first[BUF];
char m_last[BUF];
};
#endif
#include <iostream>
#include "cfoo.h"
using namespace std;
int main(){
CFoo foo1("Jong", "Yoon");
CFoo foo2 = foo1;
cout << "foo1 = ";
foo1.WriteFoo();
cout << endl;
cout << "foo 2 = ";
foo2.WriteFoo();
cout << endl;
return 0;
}
答案 0 :(得分:1)
有两个问题:
使用字符串文字(类型为char const*
)来调用期望char[]
的函数。
尝试分配给char
数组。
修正:
将构造函数更改为:
CFoo(char const* first, char const* last);
将其实施更改为:
CFoo(char const* first, char const* last)
{
// Make sure to copy at most BUF-1 characters
// to m_first and m_last.
m_first[0] = '\0'
strncat(m_first, first, BUF-1);
m_last[0] = '\0'
strncat(m_last, last, BUF-1);
}
您还需要更改CFoo::WriteFoo()
的实现以使用整个字符串
void CFoo::WriteFoo()
{
cout << m_first << ", " << m_last;
}
此外,
访问m_first[BUF]
或m_last[BUF]
是一个错误,因为访问这些数组的有效索引的最大值为BUF-1
。