C++ class & friend visual studio link 错误

C++ class & friend visual studio link error

 #include <iostream>

    using namespace std;

    class A
    { 
        static int x; 
        int y; 

     private: 
        friend void f(A &a); 

     public: 
     A() 
     { 
          x=y=5; 
     } 

     A(int xx,int yy) 
     { 
        x=xx; 
        y=yy; 
     } 

     //static void getVals(int &xx, int &yy); 
     void getVals(int *xx, int *yy) 
     { 
        *xx=x; 
        *yy=y; 
     } 

     void f(A &a) 
     { 
        int x,y; 
        a.getVals(&x,&y); 
        cout << a.x << "; " <<a.y << endl; 
      } 
    }; 

    int main() 
    { 
        A a1; 
        A a2(3,8); 

        f(a1); 
        f(a2); 

        return 0;
    } 

我有 2 个 link 错误 visual studio:

Error 1 error LNK2019: unresolved external symbol "void __cdecl f(class A &)" (?f@@YAXAAVA@@@Z) referenced in function _main

Error 2 error LNK2001: unresolved external symbol "private: static int A::x" (?x@A@@0HA)

请帮助解决这些错误

您需要在 class 声明后添加 int A::x;。 你可以看到这个 link : http://www.learncpp.com/cpp-tutorial/811-static-member-variables/

静态成员变量只存在一次,在class的对象之间共享。因为静态成员变量不是单个对象的一部分,所以您必须显式定义静态成员。通常显式定义放在class:

的源文件(cpp)中

头文件:

class A
{ 
  static int x;
};

源文件:

int A::x = 0; // <- explicitly definition and initialization

对于第一个错误:

您声明了 friend void f(A &a);,表明 f 是一个需要访问 A 成员的 non-member 函数。

但是,您仍然在class 中定义f,使其成为一个成员函数。要解决此链接器错误,您应该将函数 f 移动到 class.

之外