【发布时间】:2016-10-29 07:13:06
【问题描述】:
背景
我有一个非模板类,称为library 和一个模板类library_file,旨在为不同的文件类型(如std::fstream 或QFile 等)提供一个模板参数F保存/加载library。
假设
所以我在library 的定义之前提出了library_file 的前向声明,并在最后一个中提出了朋友声明。因为,由于library_file 包含library,否则我将进入依赖圈。
问题
朋友声明失败
在 /Users/markus/Entwicklung/cmake_Spielwiese/library.cpp:4 包含的文件中: /Users/markus/Entwicklung/cmake_Spielwiese/library.h:12:12:错误:C++ 需要所有声明的类型说明符 朋友库文件; ~~~~~~ ^ /Users/markus/Entwicklung/cmake_Spielwiese/library.h:12:12: 错误:好友只能是类或函数 产生 2 个错误。代码
/*! @file library.h
* */
#ifndef CMAKE_CPP_SPIELWIESE_LIBRARY_H
#define CMAKE_CPP_SPIELWIESE_LIBRARY_H
template <typename F>
class library_file;
class library {
template <typename F>
friend library_file;
};
#endif //CMAKE_CPP_SPIELWIESE_LIBRARY_H
/*! @file library_file.h
* */
#ifndef CMAKE_CPP_SPIELWIESE_LIBRARY_FILE_H
#define CMAKE_CPP_SPIELWIESE_LIBRARY_FILE_H
#include "library.h"
template <typename F>
class library_file {
F file;
library l;
};
#endif //CMAKE_CPP_SPIELWIESE_LIBRARY_FILE_H
/*! @file main.cpp
* */
#include <fstream>
#include "library.h"
#include "library_file.h"
int main() {
library_file<std::fstream> f;
return 0;
}
/*! @file library.cpp
* */
#include "library.h"
【问题讨论】:
标签: c++ oop templates c++11 c++14