我正在编写一个代码来声明一个类的成员函数作为朋友,但我收到错误。 代码是
#include<iostream>
class Vect;
class Coordinate {
float x;
float y;
public:
Coordinate(float a,float b):x(a),y(b){}// constructor
Coordinate():x(0),y(0){};//constructor
display()
{
std::cout<<"\nx:"<<x<<" "<<"y:"<<y;
}
friend Vect::add(Coordinate B);
};
class Vect {
public:
add(Coordinate A)
{
std::cout<<A.x;
}
};
确切的错误是
无效使用不完整类型'类Vect'|和前瞻性声明 'class Vect'|
答案 0 :(得分:2)
class Y; //forward declaration of class Y
class X
{
public:
int getmark(Y);
};
class Y
{
int mark;
public:
Y() {}
friend int X::getmark(Y);
};
int X::getmark(Y obj) {
cin >> obj.mark;
return obj.mark;
}
int main()
{
X a;
Y b;
a.getmark(b);
}
首先,当创建对象a(类X)时,为了将Y参数声明为X :: getmark(),必须使用类Y的前向声明。
创建对象b(类Y)不会成为问题,因为编译器知道存在类X(对于友元函数)。
然后,只需通过对象a。
调用函数getmark()注意:必须在声明类Y之后声明函数getmark(),否则编译器会将类Y视为不完整类型。
答案 1 :(得分:1)
你可以用这个:
class Vect;
class Coordinate
{
public:
Coordinate(float a = 0f, float b = 0f) :x(a), y(b) {}// constructor
float x;
float y;
void display()
{
std::cout << "\nx:" << x << " " << "y:" << y;
}
friend int add(Coordinate B);
};
class Vect
{
friend int add(Coordinate B);
public:
};
int add(Coordinate B)
{
std::cout << B.x << std::endl;
return B.x;
}