云梦泽1989 2013-11-25 22:37 采纳率: 100%
浏览 2118
已采纳

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条回答 默认 最新

  • Cshawvi 2013-11-27 01: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;
    }
    /*至少编译是没问题的,希望对你有帮助^-^*/

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

悬赏问题

  • ¥100 二维码被拦截如何处理
  • ¥15 怎么解决LogIn.vue中多出来的div
  • ¥15 优博讯dt50巴枪怎么提取镜像
  • ¥30 在CodBlock上用c++语言运行
  • ¥15 求C6748 IIC EEPROM程序固化烧写算法
  • ¥50 关于#php#的问题,请各位专家解答!
  • ¥15 python 3.8.0版本,安装官方库ibm_db遇到问题,提示找不到ibm_db模块。如何解决?
  • ¥15 TMUXHS4412如何防止静电,
  • ¥30 Metashape软件中如何将建模后的图像中的植被与庄稼点云删除
  • ¥20 机械振动学课后习题求解答
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部