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.
之外
#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.