我一直在寻找一段时间,最接近答案的事情就在那边
但是我无法让它在我的课堂上发挥作用。
我有一个Table2D.h
包含这个:
std::string toString() const;
std::ostream & operator<<( std::ostream & o, const Table2D<T> & s );
我有一个Table2D.template
包含以下内容的模板类:
template <class T>
std::ostream & :: operator<<( std::ostream & o, const Table2D<T> & s ){
return out << s.toString();
}
当我从 main 调用我的 toString() 函数时,它运行正常。<<
但是,当我使用 a调用运算符时std::cout
,出现以下错误。
Table2D.h(59): error C2804: binary 'operator <<' has too many parameters
Table2D.h(85) : see reference to class template instantiation 'Table2D<T>' being compiled
Table2D.template(100): error C2039: '<<' : is not a member of '`global namespace''
Table2D.h(59): error C2804: binary 'operator <<' has too many parameters
只是让你知道第 59 行包含
for (unsigned y=0; y<m_height; y++) col_ptr[y] = (T) col_ptr_src[y];
如您所见,其中包含 no <<
,因此我不完全确定它指的是什么。
编辑:
从类中删除声明后,我将其在头文件中的条目替换为
template <class T>
std::ostream& operator<<( std::ostream& o, const Table2D<T>& s ) {
return o << s.toString();
}
并得到以下错误:
Table2D.h(60): error C2804: binary 'operator <<' has too many parameters
Table2D.h(89) : see reference to class template instantiation 'Table2D<T>' being compiled
模板文件中的第 89 行包含std::stringstream resultStream;
这是我的 toString 函数的第一行,看起来像这样
template <class T>
std::string Table2D<T> :: toString() const{
std::stringstream resultStream;
for(unsigned i = 0; i< m_height; i++){
for (unsigned j = 0; j < m_width; j++){
resultStream << (*this)[i][j] << "\t";
}
resultStream << endl;
}
return resultStream.str();
}