主要是记录自己犯下的一个错误
为了测试待测试类的protected和private函数,我的做法如下:
待测试类:
foo.h
class CFoo
{
private:
void Fun();
private:
int m_iX;
};
foo.cpp
#include <stdio.h>
#include "foo.h"
void CFoo::Fun()
{
printf("call foo::fun\n");
}
测试函数
foo_test.cpp
如果在测试函数中调用private变量,如下
#define protected public
#define private public
#include "foo.h"
int main(int argc, char* argv[])
{
CFoo foo;
foo.m_iX = 1;
printf("foo.m_iX = %d",foo.m_iX);
return 0;
}
程序编译链接没有问题
#define protected public
#define private public
#include "foo.h"
int main(int argc, char* argv[])
{
CFoo foo;
foo.Fun();
return 0;
}
链接时报如下错误
foo_test.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall CFoo::Fun(void)" (?Fun@CFoo@@QAEXXZ),该符号在函数 _main 中被引用
原因是,在foo.obj中CFoo::Fun函数是private,在main函数中是以public形式调用CFoo::Fun,所以 无法解析。
说明在obj文件中成员变量的符号中没有添加访问权限信息,而成员函数的符号中添加了。