首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问: 这个内联函数错在哪儿

2012-02-22 
请教: 这个内联函数错在哪儿?//----请先看一下代码:----//Test.h#pragma onceclass CTest{int xpublic:CT

请教: 这个内联函数错在哪儿?
// ---- 请先看一下代码: ----
//Test.h
#pragma once
class CTest{
int x;
public:
CTest(void);
~CTest(void);
public:
void SetX(const int xx);
int GetX(void) const;
};

//Test.cpp
#include "Test.h"
CTest::CTest(void){
}
CTest::~CTest(void){
}
inline void CTest::SetX(const int xx){
x=xx;
}
inline int CTest::GetX(void) const{
return x;
}

//Main.cpp
#include "Test.h"
int main(void){
int iValue;
CTest test;
test.SetX(100);
iValue = test.GetX();
}

//-------------------------------------------
以上代码编译通过,但链接通不过.错误提示如下:
正在编译...
Test.cpp
正在链接...
main.obj : error LNK2019: 无法解析的外部符号 "public: int __thiscall CTest::GetX(void)const " (?GetX@CTest@@QBEHXZ),该符号在函数 _main 中被引用
main.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall CTest::SetX(int)" (?SetX@CTest@@QAEXH@Z),该符号在函数 _main 中被引用
F:\Test\Debug\Test.exe : fatal error LNK1120: 2 个无法解析的外部命令

但是将Test.cpp中GetX()与SetX()前的inline 关键字去掉,就可以了.

像SetX()与GetX()这样简单的函数,我想使用内联函数以提高效率,应该不会错吧?但我不知道我哪儿做错了,请高手指点一下,多谢了.


[解决办法]
内联成员函数的定义放在头文件中是强制的,如果你将内联函数的定义放在.cpp文件中并且在其他.cpp文件中调用它,连接器将给出“unresolved external”错误。

调试通过的代码如下:

Test.h:

C/C++ code
class CTest{     int x; public:     CTest(void);     ~CTest(void); public:     inline void SetX(const int xx){         x=xx;     };    inline int GetX(void) const {         return x;     };};
[解决办法]
内联函数定义放在头文件里!
C/C++ code
#include <iostream>using namespace std;#pragma once class CTest{     int x; public:     CTest(void);     ~CTest(void); public:     void SetX(const int xx);     int GetX(void) const; }; inline void CTest::SetX(const int xx){     x=xx; } inline int CTest::GetX(void) const{     return x; } 

热点排行