better_call_Soul 2018-10-10 03:05 采纳率: 33.3%
浏览 809
已采纳

C++将类成员函数显式内联为何出现LINK2019错误?

出现错误:
图片说明

 抄的C++primer的代码,删去第二个重载的get函数的显式声明的inline后能正常运行,不删显式LINK2019错误:

Screen.h

 #pragma once
#include<iostream>
#include<string>
using namespace std;
class Screen {
    typedef string::size_type pos;//using ...=... also ok!
private:
    pos height{}, width{}, cursor{};
    string contents{};
    mutable size_t access_ctr{};//最好显示的初试化他,否则有的编译器不识别
public:
    Screen() = default;
    Screen(pos ht, pos wd, char c) :height{ ht }, width{ wd }, contents(ht*wd, c){
    }
    char get() const {
        return contents[cursor];
    }//隐式内联

    //下一句显式内联出现了错误

    inline char get(pos r, pos c) const;
    Screen &move(pos r, pos c);

    void some_member() const;
    size_t get_access_ctr() const {
        return access_ctr;
    }
};

Screen.cpp

 #include<iostream>
#include"Screen.h"
using namespace std;
Screen &Screen::move(pos r, pos c) {
    pos row = r * width;
    cursor = row + c;
    return *this;
}
char Screen::get(pos r,pos c) const{
    pos row = r*width;
    return contents[row + c];
}
void Screen::some_member() const {
    access_ctr++;
}

main.cpp

 #include<iostream>
#include"Screen.h"
using namespace std;
#include<string>
void main() {
    typedef string::size_type pos;
    Screen my_screen;
    char ch=my_screen.get();
    ch = my_screen.get(static_cast<pos>(0),static_cast<pos>(0) );
    my_screen.some_member();
    cout << my_screen.get_access_ctr() << endl;
    system("pause");
}   
  • 写回答

3条回答 默认 最新

  • 杀意已决 2018-10-10 03:42
    关注

    应该是调用的时候没找到实现,把实现也放到头文件里应该就过了。

    补充:你犯了个错,在cpp里实现时把关键字inline丢了,加上即可。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥30 Matlab打开默认名称带有/的光谱数据
  • ¥50 easyExcel模板 动态单元格合并列
  • ¥15 res.rows如何取值使用
  • ¥15 在odoo17开发环境中,怎么实现库存管理系统,或独立模块设计与AGV小车对接?开发方面应如何设计和开发?请详细解释MES或WMS在与AGV小车对接时需完成的设计和开发
  • ¥15 CSP算法实现EEG特征提取,哪一步错了?
  • ¥15 游戏盾如何溯源服务器真实ip?需要30个字。后面的字是凑数的
  • ¥15 vue3前端取消收藏的不会引用collectId
  • ¥15 delphi7 HMAC_SHA256方式加密
  • ¥15 关于#qt#的问题:我想实现qcustomplot完成坐标轴
  • ¥15 下列c语言代码为何输出了多余的空格