#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;
}
我在visual studio中遇到了2个链接错误:
错误1错误LNK2019:未解析的外部符号“void __cdecl 函数_main
中引用的f(A类&amp;)“(?f @@ YAXAAVA @@@ Z)错误2错误LNK2001:未解析的外部符号“private:static int A :: x“(?x @ A @@ 0HA)
请帮助解决这些错误
答案 0 :(得分:1)
静态成员变量只存在一次,并在类的对象之间共享。由于静态成员变量不是单个对象的一部分,因此必须显式定义静态成员。通常,显式定义放在类的源文件(cpp)中:
头文件:
class A
{
static int x;
};
源文件:
int A::x = 0; // <- explicitly definition and initialization
答案 1 :(得分:0)
您需要在类声明后添加int A::x;
。
您可以看到以下链接:http://www.learncpp.com/cpp-tutorial/811-static-member-variables/
答案 2 :(得分:0)
第一个错误:
您声明friend void f(A &a);
,表示f
是需要访问A
成员的非成员函数。
但是,您仍然在类中定义f
,使其成为成员函数。要解决此链接器错误,您应该将函数f
移到类外。