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

extern 的一点有关问题

2012-05-09 
extern 的一点问题在一个目标文件中声明extern void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum)该

extern 的一点问题
在一个目标文件中声明
extern void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

该文件包含了函数TributaryNum定义的头文件

连接的时候出现两个错误:
fatal error LNK1120: 1 unresolved externals
error LNK2019: unresolved external symbol \"void \_\_cdecl TributaryNum(unsigned short,unsigned char)\" (?TributaryNum@@YAXGE@Z) referenced in function \"public: unsigned char \_\_cdecl CPM8316Driver::ReadERR1(unsigned \_\_int64)\" (?ReadERR1@CPM8316Driver@@QAAE\_K@Z)



找不出错误的原因,求救

[解决办法]
我也遇到了关于extern的问题,写的和你一样的方式,如果是int型变量就可以,写成一个类对象就不可以,为什么呢?
[解决办法]
2.cpp中是不是漏掉了返回值 void?
TributaryNum(UINT16 bAddr, UINT8 bTributaryNum)
{
}
==》
void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum)
{
}


[解决办法]
直接在头文件和.CPP文件中都不加extern试试
[解决办法]
2个CPP在同一个工程里么?
1.CPP如果使用了2.CPP中的TributaryNum函数,链接的时候又没有找到2.CPP编译出来的目标文件,肯定就链接错误了。
[解决办法]
1.cpp
#include "2.h"

// extern void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

把这行去掉,你不是已经 #include "2.h"了吗
[解决办法]

探讨
引用:
vc6 是有臭虫的 我也遇到过的

vs2005

[解决办法]
1.cpp
#include "2.h"

extern void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

2.h
void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

2.cpp
TributaryNum(UINT16 bAddr, UINT8 bTributaryNum)
{
}

你是这样的?
2.cpp 包含了这个么?
#include "2.h"

这个应该和extern 没关系啊.
还有 ,如果像你这样用..根本不需要 extern 你不是包含了2.h么
[解决办法]
探讨

对了,函数TributaryNum是文件2的成员函数,该不会是这个原因吧?

[解决办法]
探讨
也就是这样子:

1.cpp
#include "2.h"

extern void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

2.h
void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

2.cpp
TributaryNum(UINT16 bAddr, UINT……

[解决办法]
说错了
1.cpp
#include "2.h"

TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

1.cpp就可以直接用函数了
[解决办法]
你函数定义在了头文件里,2.cpp包含了头文件,就可以直接用了,不需要加extern~
[解决办法]
直接在2.cpp中定义,
void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum)
{
}
删除在2.h的定义,
之后在1.cpp:
#include "2.h"
extern void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);


[解决办法]
探讨

1.cpp
#include "2.h"

extern void TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

然后在文件1.cpp中使用该函数。

2.h
void 2::TributaryNum(UINT16 bAddr, UINT8 bTributaryNum);

2.cpp
void 2::Tributary……

------解决方案--------------------


我觉得可能是在函数定义中没有在CPP文件中声明返回值类型。在C++中是不允许这样的,而在C中如果不写返回值累心个,将默认为返回int。
[解决办法]
如果仅考虑函数,不考虑类的话,这应该和编译顺序有关

热点排行
Bad Request.