我决定将必要的代码剪切到显示此错误所需的最低限度。我有一个存在于hc_list.h文件中的STL列表包装模板类。整个代码如下:
// hc_list.h file
#ifndef HC_LIST_H
#define HC_LIST_H
#include <cstdlib>
#include <list>
template <typename T>
class hcList
{
private:
std::list<T> selfList ; // a single internal STL list to hold the values
public:
hcList(void) {} ;
~hcList(void){} ;
// The error occurs on the line below
template <typename U> friend std::ostream& operator<<(std::ostream &, const hcList<U> &) ;
} ;
#endif // HC_LIST_H
此代码包含在main.cpp文件中,其中主要功能如下:
// main.cpp file
#include <iostream>
#include "hc_list.h"
int main()
{
std::cout << "Begin Test" << std::endl;
return 0;
}
此代码在输入CodeBlocks项目时将按原样编译,出现0错误或警告。但是,然后我包含另一个cpp文件并尝试包含列表标题,如下所示:
// anyNamedFile.cpp file
#include "hc_list.h"
当我将任何cpp文件包含到项目中时,我收到编译器错误:
error: expected initializer before '&' token
我不明白我做错了什么,可以真正使用一些帮助。
答案 0 :(得分:1)
您的头文件使用std::ostream
,(在&
之前),但不包含任何可能声明它的标头。
尝试添加
#include <iosfwd>
在你的标题中。