《Essential C++》笔记四、采用关键字inline带来的错误

在学习《Essential C++》第四章做4.1、4.2练习题时,出现错误“error LNK2019: 无法解析的外部符号 "public: bool __thiscall Stack::push(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)" (?push@Stack@@QAE_NABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z),该符号在函数 _main 中被引用D:\c\C++ learning\C++ learning\4.1.objC++ learning

查了下代码,发现问题出现在关键字inline上,返回去重新看了inline的使用,发现忽略了“inline函数常常定义在头文件中”,也就是说,我将内联函数定义在“Stack.cpp”文件中,而非“Stack.h”。删除关键字“inline”即可解决问题。

出现这一错误,主要是因为在每个调用点上,编译器都需要取得其定义,因而必须将其定义在头文件中。

对于不属于类的函数来说,如果想将其定义为内联函数,但又又不想将内联函数写在头文件中,可以采用以下方法(方法来自百度百科:inline http://baike.baidu.com/link?url=37FG8wzzfZcxxjGbXaMZivrwhtaucBnllpIjJ6d_36efvu3IJUxkOaGI9M3xp5XkXcKAVdDl0Bq402Ou492uua):
定义一个头文件,这里命名为“Someinline.h”,其内容为:

#ifndef SOMEINLINE_H
#define SOMEINLINE_H
#include "Stack.cpp"//源文件扩展名根据编译器而定
#endif

inline Type Example(void);
//其他函数的声明

在CPP文件中,加入:

#include"SomeInline.h"
Type Example(void)
{
//..........
}
//...............其他函数的定义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值