我必须制作一个节目,其中显示了孩子出生时的name
,surname
和year
。一切运作良好,friend
函数除外,它必须访问private
/ protected
变量birth_year
并显示0
,如果他的birth_year
}大于2007
,否则显示1
。
以下是代码:
#include <iostream>
#include <string.h>
using namespace std;
class child{
protected:
char name[20],surname[20];
int birth_year;
public:
child(char*,char*,int);
getyear();
show();
friend void itsolder();
};
child::child(char* n, char* p, int a)
{
strcpy(name,n);
strcpy(surname,p);
birth_year=a;
}
child::getyear()
{
return birth_year;
}
child::show()
{
cout << "Name: " << name << endl;
cout << "Surname: " << surname << endl;
cout << "Year of birth: " << birth_year << endl;
}
void itsolder(child&year)
{
if (year.birth_year>2007)
cout << "0" << endl;
else
cout << "1" << endl;
}
int main()
{
child c1("Richard", "John", 1997);
c1.show();
cout << c1.getyear() << endl;
itsolder(c1.birth_year)
return 0;
}
以下是错误:
int child::birth_year
是protected
; friend
函数以及我将其调用的位置main()
; child&
int
类型的引用无效
醇>
答案 0 :(得分:2)
friend void itsolder();
的声明与
void itsolder(child&year)
{
if (year.birth_year>2007)
cout << "0" << endl;
else
cout << "1" << endl;
}
将其更改为friend void itsolder(child&);
并相应地传递参数:
itsolder(c1);
答案 1 :(得分:0)
我同意@StoryTeller在他的回答中写的内容,但除此之外,您的程序自C++11
起无效。字符串文字的类型为const char[n]
,它会衰减为const char*
,但默认情况下,g++
和clang++
等编译器会出于向后兼容性的原因接受此代码。如果使用-pedantic-errors
命令行选项,则会出现编译器错误。
除此之外,还缺少getyear()
和show()
成员函数的返回类型。您必须明确指定每个函数的返回类型。
查看实时演示here。 观察编译器提供的警告:
g++ -O2 -std=c++11 -Wall -Wextra main.cpp && ./a.out
main.cpp: In function 'int main()':
main.cpp:53:37: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
child c1("Richard", "John", 1997);
^
main.cpp:53:37: warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
所以你的正确代码应该是this。