读书人

关于类中含友元函数怎样定义头文件的

发布时间: 2012-03-05 11:54:02 作者: rapoo

关于类中含友元函数,怎样定义头文件的问题
--以下为BookData.h文件--
#include <string>
#include "BookList.h "
using namespace std;

#ifndef BOOKDATA_H
#define BOOKDATA_H

const int MaxN = 100000;

class BookData {
friend class BookList;
}

--以下为BookList.h文件--
#include <string>
#include <algorithm>
using namespace std;

#ifndef BOOKLIST_H
#define BOOKLIST_H

class BookData;

class BookList {
private:
int a, b, c;
public:
void list(BookData &book, const string cmd);
};

#endif

将BookList定义为BookData的友元类,需要用到BookList类的定义。
在BookList中的共有函数中又需要用到BookData类的定义。

按照以上的程序写,VS日志如下:
(ClassDesign为主文件)

正在编译...
ClassDesign.cpp
BookData.cpp
正在生成代码...
正在编译资源清单...
正在链接...
ClassDesign.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall BookData::setNotEmpty(void) " (?setNotEmpty@BookData@@QAEXXZ),该符号在函数 "void __cdecl InitDataBase(void) " (?InitDataBase@@YAXXZ) 中被引用
……

(总之就是所有BookData的共有成员函数全部都被提示社么“无法解析的外部符号”,但是编译确实过了)

请高手帮忙,谢谢!

[解决办法]
在BookList的cpp文件包含 BookData.h
BookData.h不要包含BookList.h 改在实现文件中包含.然后将class BookList;放到头文件声明前

读书人网 >C++

热点推荐