2 u012333003 u012333003 于 2013.11.26 14:37 提问

C++模板编程问题,各种报错,但一直找不到错,求大侠们指导,感激不尽

在实现一个C++模板类时出现诸多错误,刚入手模板编程,找错找了大半天,未果,纠结中,求助大神们指导,感激不尽。这是一个类声明,定义部分感觉不会出错,大多也类似,只给出了部分
编译错误报告 语法错误 :1. 缺少“;”(在“<”的前面)——报错行1
2: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int——报错行1(我传入模板实参为int)
template class max_subarray;//前置声明
template std::istream &operator>>(std::istream &is, const max_subarray &target)
{
is >> target.varray.push_back();
return is;
}
template
class max_subarray
{
public:
friend std::istream &operator>> (std::istream &is, const max_subarray &target);//友员
max_subarray() = default;//默认构造函数
报错行1 pair get_index() const;//保存索引对
T get_max_sum() const;//获取器
private:
//工具函数
void set_index(const size_t startIndex,const size_t endIndex);//设置器
void set_max_sum(const T maxSum);//设置器
void find_max_every_subarray(const vector &vArray, const size_t start);
void find_max_subarray(const vector &vArray);
//私有成员
pair index_range;
T &max_sum;
vector varray;
};

//类的定义
template
pair max_subarray::get_index() const
{
return{ first, second };
}

template
T &max_subarray::get_max_sum() const
{
return max_sum;
}

template
void max_subarray::set_index(size_t startIndex, size_t endIndex)
{
index_range.first = startIndex;
index_range.second = endIndex;
}

1个回答

u011493704
u011493704   2013.11.27 17:11
已采纳

我是菜鸟哈!觉得你的代码写的挺乱的,没怎么看懂代码要实现什么。我比较习惯把类模板的成员函数在类里面实现,然后写到头文件里去。至少在代码里,你的定义vector和pair时都没有加上类型参数的,肯定通不过啊。
我简单改了一下:

#include
#include
#include
using namespace std;

template
class max_subarray
{
public:
friend istream &operator>>(istream &is, const max_subarray &target)
{
is >> target.varray.push_back();
return is;
}
max_subarray(){};//默认构造函数
pair get_index() const//获取器
{
return index_range;
}
T get_max_sum() const//获取器
{
return max_sum;
}
private:
//工具函数
void set_index(const size_t startIndex,const size_t endIndex)//设置器
{
index_range.first = startIndex;
index_range.second = endIndex;
}
//void set_max_sum(const T maxSum);//设置器
//void find_max_every_subarray(const vector &vArray,const size_t start);
//void find_max_subarray(const vector &vArray);
//私有成员
pair index_range;
T max_sum;
vector varray;
};

int main()
{
return 0;
}
/*至少编译是没问题的,希望对你有帮助^-^*/

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言代码,求高手解答,为什么没有错误,但是结果不对
#include #include char *cmonth(int month) { char str_month[]={ "Illegal Month" "January" "February" "March" "April" "May" "June" "July" "August" "September" "October" "November"
eclipse项目一直显示有错,但是一直找不到错误在哪里
eclipse项目一直显示有错,但是一直找不到错误在哪里这天在写项目的时候碰到了这么个问题,项目上一直提示着红叉,但不管是文件里还是java buildpath里都找不到报错,然后我就郁闷了。后来给我找到一个解决方案,能查看当前错误是什么: eclipse–>Window–>show View–>Markers,出现一个面板,然后在这个面板里就能查看到底是什么在出错啦。
诺基亚4g考试试卷
只有试卷,求答案,谁会做啊,跪谢大侠们了。
安卓开发遇到项目无法运行提示有错误有红叉但是找不到错误定位的情况
在编译别人的源代码项目运行时,报出"Your project contains errors,please fix them before running your application."的提示框 在项目图标会有个小红叉,但项目代码中却没有任何错误。 以前这种情况一般处理方式有: 方法1.用project->clean; 方法2.删除项目,重新载入项目。 这次用了都不行,查看
求大侠指导
麻烦各位高手帮我个忙,我想将swing 中做好的jtable中的数据导入到一张新的excel表中,jtable和数据库已经联好了,就想多做一个功能,将数据全部放到excel中。 最好有点参考代码,谢谢。
Linux下的C语言编程——计算π的值
 用π/4=1-1/3+1/5-1/7……公式求π的近似值,直到最后一项的绝对值小于10^-7 这个题目不怕大家笑话我写了很久,真的是气。因为我没有给sum赋初值。然后老是打印错误。 下面我附上我的代码 #include int main() { int sign; double f; double m; double sum; sign = 1; m =
8种经典的排序代码 C++
排序算法:插入排序、合并排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、基数排序 没来的及优化过……大侠们有兴趣的话,帮忙优化一下吧~感激不尽~
eclipse项目报错,但是又找不到具体哪个包哪个类出错
办法很简单,只需要选中项目,在project下clean项目就ok啦
Eclipse项目名称报错,但是又找不到任何地方出错
Eclipse项目名上报错问题
求SolidWorks二次开发的模板,感激不尽
如题