我创建了两个完全相同的类 X 和 Y,并在它们之间互相使用指针。下面是 X.h 的代码,Y.h 与所有 X 和 Y 互换。然而,在我的 Connect 方法中出现了一个错误(错误 C2027:使用未定义的类型“Y”)。在 X.h 中,我已经前向声明了类 Y,但它不知道 Y 有一个名为 SetXPointer 的方法。因此,我还需要前向声明这个方法,对吗?
如果我尝试这样做(在 class Y; 下添加一行 Y::SetXPointer(X* pX_in);),我会得到编译器错误 C2761:“void Y :: SetXPointer(X *)”:不允许成员函数重声明。有没有办法在类 X 中使用类 Y 的公共方法?
如果我尝试这样做(在 class Y; 下添加一行 Y::SetXPointer(X* pX_in);),我会得到编译器错误 C2761:“void Y :: SetXPointer(X *)”:不允许成员函数重声明。有没有办法在类 X 中使用类 Y 的公共方法?
// X.h
#pragma once
#include "Y.h"
// Forward declaration
class Y;
class X
{
public:
X(void) : data(24) {};
~X(void) {};
int GetData() { return data; }
void SetYPointer(Y* pY_in) { pY = pY_in; }
Y* GetYPointer() { return pY; }
void Connect(Y* Y_in) { pY = Y_in; Y_in->SetXPointer(this); }
private:
int data;
Y *pY;
};
inline
函数必须放在其类所在的头文件中。否则,实现它们的编译单元将不会为它们生成链接器符号,因为它期望编译器将它们内联。其他任何编译单元都不会知道内联,因此会生成对永远不可用的符号的引用。 - MvG