VS2005碰到的无法解析问题?????急?? 在线等待~!~

dazhuaye 2008-04-02 07:46:06
———————————LessThan.h————————————
#ifndef LESSTHAN_H
#define LESSTHAN_H
#pragma once

class LessThan{
public:
LessThan(int val)
:_val(val){}
int comp_val()const { return _val;}
void comp_val(int nval) { _val = nval; }

bool operator()(int _value)const;
private:
int _val;
};
#endif
————————————LessThan.cpp————————
#include "LessThan.h"

inline bool LessThan::
operator()(int value) const
{
return value < _val;
}
——————————————main.cpp————————
#include<iostream>
#include<vector>
#include"LessThan.h"
using std::cout;
using std::endl;

int count_less_than(const vector<int>&vec, int comp)
{
LessThan lt(comp);

int count=0;
for(int ix=0; ix<vec.size(); ++ix)
if( lt(vec[ix]) )
++count;
return count;
}
int main()
{
int ia[16]={17,12,44,9,18,45,6,14,23,67,9,0,27,55,8,16};
vector<int>vec(ia, ia+16);
int comp_val=20;

cout<<"Number of elements less than"
<<comp_val<<"are"
<<count_less_than(vec, comp_val)<<endl;
}
——————————————问题如下——————————
在VS2005下,上面编译回出现一个问题:
Main.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall LessThan::operator()(int)const " (??RLessThan@@QBE_NH@Z),该符号在函数 "int __cdecl count_less_than(class std::vector<int,class std::allocator<int> > const &,int)" (?count_less_than@@YAHABV?$vector@HV?$allocator@H@std@@@std@@H@Z) 中被引用
D:\Program_shou2005\Essential-4.9\Debug\Essential-4.9.exe : fatal error LNK1120: 1 个无法解析的外部命令

我的解决是:把.cpp中的operator()(int value) const修改到.h里。 此问题解决了!且输出答案`!`

问个问题:为什么不能分开编译了? 这几天一连都出现这样的问题!`纳闷得很`!`谁给我解决解决






...全文
123 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dazhuaye 2008-04-02
  • 打赏
  • 举报
回复
疑问被星羽给的帖子揭开了~!`

谢谢各位!`
dazhuaye 2008-04-02
  • 打赏
  • 举报
回复
回5楼的!~
我正是在C++PRIMER里看到的!`所以就很有疑问~!
如8楼所说一样,是由编译器决定的。
如果是由编译器决定的,是不是可以有相关的设置来改变inline只可以在头文件或可以在头文件及文本文件任意定义呢? 原因是VS2005 我之前在其他的类的文本文件中定义inline函数,没有碰到这个问题。但是这几天使用inline连续碰到不能在文本文件中定义。就觉得很纳闷。 所以就有如上怀疑。
hastings 2008-04-02
  • 打赏
  • 举报
回复
in不inline,由编译器决定.
星羽 2008-04-02
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
呃,在你使用inline函数前得看到这个函数的实现,不然就错.
taodm 2008-04-02
  • 打赏
  • 举报
回复
要么别用inline,要么放头文件里。
《C++ Primer》书后索引表里找答案。
dazhuaye 2008-04-02
  • 打赏
  • 举报
回复
1楼说得不对吧`!`
inline函数不是必须定义在头文件吧 建议定义在头文件中吧! 定义在头文件的原因是怕文本文件重复定义inline函数。

但是1 2楼的答案是对的~!`我又有新的问题了???

我之前有把inline函数定义在文本文件下的,且能通过编译,且输出正确的答案。

为什么在这里不行呢???请再者解答一下,谢谢~!~
hityct1 2008-04-02
  • 打赏
  • 举报
回复
ding
  • 打赏
  • 举报
回复
将inline去掉
fallinleave 2008-04-02
  • 打赏
  • 举报
回复
内联函数是必须放在头文件里
inline函数的特征是在调用的地方插入相应函数的代码,所以编译之后的目标文件里是没有inline函数体的,因为在要调用的地方它都已经用相应的语句替换掉了

大多数情况下,在使用类的时候,只需要头文件和目标文件(没有cpp文件),所以如果将inline函数写在cpp文件里将导致我们找不到相对应的函数体。

相关推荐
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-04-02 07:46
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下