为什么我不能让这个成员函数成为另一个 class 的好友?
Why can't I make this member function friend of another class?
#ifndef BUTTONS_H
#define BUTTONS_H
class Window;
class Buttons
{
friend int main();
friend void Window::setCloseButtonCaption(string);
public:
Buttons();
Buttons(string, Window&);
~Buttons();
void setCaption(string);
string getCaption();
private:
string caption;
const Window * parentWindow;
};
class Window
{
public:
Window();
Window(int i, int l,int t, int w, int h, Buttons& B): id(i),left(l), top(t), width(w), height(h), closeButton(B){}
~Window(void);
void setleft(int);
void settop(int);
void setw(int);
void seth(int);
int getid() const;
int getleft() const;
int getwidth() const;
int getheight() const;
int getnW() const;
void Print() const;
void setCloseButtonCaption(string);
private:
const int id;
int left;
int top;
int width;
int height;
static int numberOfWindows;
const Buttons closeButton;
};
#endif
代码 运行 很好,直到我将函数 Window::setCloseButtonCaption(string) 设为按钮 class 的友元。我尝试在 class 按钮之前定义 class Window 但它没有改变。
它给了我错误:
-使用未定义的类型'Window'
-参见 'Window'
的声明
顺便说一句,我是初学者,提供详细的解释会很有帮助。非常感谢
对于 class 成员(与自由函数不同)成员声明应该在 friend
声明之前可见。
我通常建议在 Buttons
class 之前定义你的 Window
class 以便能够与它的成员成为朋友.但是,您的 Window
class 需要定义 Buttons
。所以,你有可能的解决方案:
- 在
Window
中通过指针或引用切换到使用Buttons
- 您可以使
Buttons
成为 Window
的内部结构。类似的东西(删节代码)
...
struct Window {
void setCloseButtonCaption(const std::string& caption);
struct Buttons {
friend void Window::setCloseButtonCaption(string);
};
Window(int i, int l,int t, int w, int h, Buttons& B): id(i),left(l), top(t), width(w), height(h), closeButton(B){}
};
#ifndef BUTTONS_H
#define BUTTONS_H
class Window;
class Buttons
{
friend int main();
friend void Window::setCloseButtonCaption(string);
public:
Buttons();
Buttons(string, Window&);
~Buttons();
void setCaption(string);
string getCaption();
private:
string caption;
const Window * parentWindow;
};
class Window
{
public:
Window();
Window(int i, int l,int t, int w, int h, Buttons& B): id(i),left(l), top(t), width(w), height(h), closeButton(B){}
~Window(void);
void setleft(int);
void settop(int);
void setw(int);
void seth(int);
int getid() const;
int getleft() const;
int getwidth() const;
int getheight() const;
int getnW() const;
void Print() const;
void setCloseButtonCaption(string);
private:
const int id;
int left;
int top;
int width;
int height;
static int numberOfWindows;
const Buttons closeButton;
};
#endif
代码 运行 很好,直到我将函数 Window::setCloseButtonCaption(string) 设为按钮 class 的友元。我尝试在 class 按钮之前定义 class Window 但它没有改变。 它给了我错误:
-使用未定义的类型'Window'
-参见 'Window'
的声明顺便说一句,我是初学者,提供详细的解释会很有帮助。非常感谢
对于 class 成员(与自由函数不同)成员声明应该在 friend
声明之前可见。
我通常建议在 Buttons
class 之前定义你的 Window
class 以便能够与它的成员成为朋友.但是,您的 Window
class 需要定义 Buttons
。所以,你有可能的解决方案:
- 在
Window
中通过指针或引用切换到使用 - 您可以使
Buttons
成为Window
的内部结构。类似的东西(删节代码)
Buttons
...
struct Window {
void setCloseButtonCaption(const std::string& caption);
struct Buttons {
friend void Window::setCloseButtonCaption(string);
};
Window(int i, int l,int t, int w, int h, Buttons& B): id(i),left(l), top(t), width(w), height(h), closeButton(B){}
};