任何人都可以帮我解决这个问题.. 我想要做的就是复制显示在main函数中初始化的字符数组 我对cpp很新,我无法想出办法
#include<iostream>
using namespace std;
class base1
{
public:
void setname(char *name);
void setpubl(char *publisher);
void setauth(char *author);
char getname();
char getpubl();
char getauth();
private:
char init_name[50], init_publ[50], init_auth[50];
};
void base1::setname(char *name)
{
int i=0;
while(init_name[i] != '\0')
{
init_name[i]=name[i];
i++;
}
}
void base1::setpubl(char *publisher)
{
int j=0;
while(init_publ[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
}
void base1::setauth(char *author)
{
int k=0;
while(init_auth[k] != '\0')
{
init_auth[k]=author[k];
k++;
}
}
const char* base1::getname() const
{
return init_name;
}
const char* base1::getpubl() const
{
return init_publ;
}
const char* base1::getauth() const
{
return init_auth;
}
/*
base1::base1()
{
init_name[0]=0;
init_publ[0]=0;
init_auth[0]=0;
}*/
int main()
{
base1 hello;
char name[]="cpp";
char publisher[]="dreamworks";
char author[]="random";
hello.setname(name);
hello.setpubl(publisher);
hello.setauth(author);
cout<<hello.getname()<<endl;
cout<<hello.getpubl()<<endl;
cout<<hello.getauth()<<endl;
return 0;
}
当我尝试编译它时,它给了我很多错误。有人可以帮我吗。 我正在使用g ++
错误:
copychar.cpp:49:13:错误:'const char * base1 :: getname()const'的原型与类'base1'中的任何一个都不匹配
copychar.cpp:10:6:错误:候选者是:char base1 :: getname()
copychar.cpp:54:13:错误:'const char * base1 :: getpubl()const'的原型与类'base1'中的任何一个都不匹配
copychar.cpp:11:6:错误:候选者是:char base1 :: getpubl()
copychar.cpp:58:13:错误:'const char * base1 :: getauth()const'的原型与类'base1'中的任何一个都不匹配
copychar.cpp:12:6:错误:候选人是:char base1 :: getauth()
当我使用以下代码时,只显示每个字符串的第一个字符
#include<iostream>
using namespace std;
class base1
{
public:
void setname(char *name);
void setpubl(char *publisher);
void setauth(char *author);
char getname();
char getpubl();
char getauth();
private:
char init_name[50], init_publ[50], init_auth[50];
};
void base1::setname(char *name)
{
int i=0;
while(name[i] != '\0')
{
init_name[i]=name[i];
i++;
}
}
void base1::setpubl(char *publisher)
{
int j=0;
while(publisher[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
}
void base1::setauth(char *author)
{
int k=0;
while(author[k] != '\0')
{
init_auth[k]=author[k];
k++;
}
}
char base1::getname()
{
return *init_name;
}
char base1::getpubl()
{
return *init_publ;
}
char base1::getauth()
{
return *init_auth;
}
/*
base1::base1()
{
init_name[0]=0;
init_publ[0]=0;
init_auth[0]=0;
}*/
int main()
{
base1 hello;
char name[]="cpp";
char publisher[]="dreamworks";
char author[]="random";
hello.setname(name);
hello.setpubl(publisher);
hello.setauth(author);
cout<<hello.getname()<<endl;
cout<<hello.getpubl()<<endl;
cout<<hello.getauth()<<endl;
return 0;
}
答案 0 :(得分:1)
您的循环错误,而不是
void base1::setpubl(char *publisher)
{
int j=0;
while(init_publ[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
}
但是
void base1::setpubl(char *publisher)
{
int j=0;
while(publisher[j] != '\0')
{
init_publ[j]=publisher[j];
j++;
}
init_publ[j] = '\0'; // ensure destination string is null terminated
}
您的循环应该检查传递给函数的publisher
字符串的结尾,而不是init_publ
字符串的结尾。这没有多大意义,因为你还没有给那个字符串一个值。
其他循环相同。
另请看这个
char getname();
和这个
const char* base1::getname() const
看到区别?首先你说getname是char
,然后你说它是const char*
和const
。你必须保持一致。第二个是正确的,替换
char getname();
与
const char* getname() const;
与getauth和getpubl相同。
答案 1 :(得分:1)
getter
函数的原型不匹配。
你已经将getters声明为..
char getname();
你实现它就像这样。
const char* base1::getauth() const
使他们的原型相同,就像这样。
const char* getauth() const ;
并像这样实现它。
const char* base1::getauth() const
{
//code here
}
同样适用于所有getter
函数。
答案 2 :(得分:1)
每次必须写东西时都要运行这些步骤。这是提高编程技能的最佳方法 - 来自其他人的好建议和良好的讲座是不够的。
我可以给你一些提示 - 但这对未来有帮助吗,不是那么明显的错误吗?
只有一个提示:char字符串必须以'\0'
结束,复制后你的字符串是否包含最后一个字符?
答案 3 :(得分:0)
char *
参数的setXXX函数可能会改为const char*
。void setname(const char *name);
const
限定符,但定义为const
。char
,但定义正在返回const char*
。const char* getname() const;
while
循环void base1::setname(const char *name) { int i=0; for( ; name[i]!='\0' && i<49; ++i) init_name[i]=name[i]; init_name[i] = '\0'; }
base1::base1() :init_name(), init_publ(), init_auth() {}
答案 4 :(得分:-1)
你必须在论证上做点什么:
void base1::setpubl(char *publisher)
{
int j=0;
while(publisher[j] != '\0')
//...
所有方法都是一样的
答案 5 :(得分:-1)
使用字符串函数,这就是它们的用途(除非这是你的作业,在这种情况下,这不是SO的用途)
但是,您的主要问题是,当您将数据复制到类数组时,当目标数组为空时停止 - 并且在大多数C ++环境中,声明数组不会使用空值初始化它,大多数时候您不会我希望性能命中只是为了填充真实数据的数组。
因此,请复制,直到输入为空字符,或者目标数组已满。