hex_refugeeeee 2021-10-09 20:50 采纳率: 50%
浏览 16
已结题

关于class内定义inline的问题

学习《essential c++》第四章的时候遇到了这样一个问题
这是Triangular_iterator.h

#pragma once
#include<iostream>
#include<string>


class Triangular_iterator
{

public:
    Triangular_iterator(int index) :_index(index - 1) {}
    
    bool operator== (const Triangular_iterator&) const;
    bool operator!=(const Triangular_iterator&) const;
    int operator*()const;
    
    Triangular_iterator& operator++();
    Triangular_iterator operator++(int);

    //inline void check_integrity()const;



private:
    inline void check_integrity()const;
    int _index;
};

这是它的.cpp

#include "Triangular_iterator.h"
#include"Triangular.h"

inline bool Triangular_iterator::
operator==(const Triangular_iterator &rhs)const
{
    return _index == rhs._index;
}

inline bool Triangular_iterator::
operator!=(const Triangular_iterator &rhs)const
{
    return !(*this == rhs);
}

void Triangular_iterator::
check_integrity()const
{
    //if (_index >= Triangular::_max_elems)
    //    throw iterator_overflow();

    if (_index >= Triangular::_elems.size())
        Triangular::gen_elements(_index + 1);
}


int Triangular_iterator::
operator*()const
{
    check_integrity();
    return Triangular::_elems[_index];
}

Triangular_iterator& Triangular_iterator::
operator++()
{
    ++_index;
    check_integrity();
    return *this;
}

Triangular_iterator Triangular_iterator::
operator++(int)
{
    Triangular_iterator tmp = *this;
    ++_index;
    check_integrity();
    return tmp;
}

然后我在main()里面跑检验程序,如果我在Triangular_iterator.cpp中的加上incline就会报无法解析的外部符号,如果去掉就可以正常使用。请问这是为啥?书上都是加了inline的,我加了就报错。
这是我在main里面跑的代码


```c++
Triangular tri(20);
    Triangular::iterator it = tri.begin();
    Triangular::iterator end_it = tri.end();

    cout << "Triangular Series of " << tri.length() << " elements\n";
    /*cout << tri << endl;*/
    while (it != end_it)
    {
        cout << *it << ' ';
        ++it;
    }
    cout << endl;


求解
  • 写回答

1条回答 默认 最新

  • hex_refugeeeee 2021-10-09 20:52
    关注

    这是我在.cpp中加了inline的情况

    #include "Triangular_iterator.h"
    #include"Triangular.h"
    
    inline bool Triangular_iterator::
    operator==(const Triangular_iterator &rhs)const
    {
        return _index == rhs._index;
    }
    
    inline bool Triangular_iterator::
    operator!=(const Triangular_iterator &rhs)const
    {
        return !(*this == rhs);
    }
    
    inline void Triangular_iterator::
    check_integrity()const
    {
        //if (_index >= Triangular::_max_elems)
        //    throw iterator_overflow();
    
        if (_index >= Triangular::_elems.size())
            Triangular::gen_elements(_index + 1);
    }
    
    
    inline int Triangular_iterator::
    operator*()const
    {
        check_integrity();
        return Triangular::_elems[_index];
    }
    
    inline Triangular_iterator& Triangular_iterator::
    operator++()
    {
        ++_index;
        check_integrity();
        return *this;
    }
    
    inline Triangular_iterator Triangular_iterator::
    operator++(int)
    {
        Triangular_iterator tmp = *this;
        ++_index;
        check_integrity();
        return tmp;
    }
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 10月17日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 请问登录成功后如何获得刚刚登录的用户信息SSH项目
  • ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
  • ¥15 jetson nano
  • ¥15 :app:debugCompileClasspath'.
  • ¥15 windows c++内嵌qt出现数据转换问题。
  • ¥20 公众号如何实现点击超链接后自动发送文字
  • ¥15 用php隐藏类名和增加类名
  • ¥15 算法设计与分析课程的提问
  • ¥15 用MATLAB汇总拟合图
  • ¥15 智能除草机器人方案设计