一个unresolved external的问题

acqy 2006-08-01 10:33:22
我的代码如下:
// ------------ test.h
#ifndef __TEST_H
#define __TEST_H

#ifdef __cplusplus
extern "C" {
#endif

class Test
{
protected:
unsigned short mp_port;
public:
virtual unsigned short GetPort();
virtual void SetPort(unsigned short port);
}

#ifdef __cplusplus
}
#endif

#endif

// ------------- test.cpp
#include "test.h"
unsigned short Test::GetPort()
{
return mp_port;
}

void Test::SetPort (unsigned short port)
{
mp_port = port;
}

现在的问题是:链接后仅在SetPort函数上出现unresolved external的错误,而GetPort函数却没有问题。
如果将SetPort函数更名为其它的名称,例如FF或者任何名称,就可以编译通过
如果将SetPort的实现搬到.h文件中,同样也可以编译通过。
请问高手,这是什么原因呢?
...全文
238 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
acqy 2006-08-02
  • 打赏
  • 举报
回复
我用的是C++。
acqy 2006-08-01
  • 打赏
  • 举报
回复
和分号没有关系。我本身代码是加了分号的。
我用的是VS.NET 2003,建立的工程是Win32 DLL。
sinall 2006-08-01
  • 打赏
  • 举报
回复
“;”?

class Test
{
protected:
unsigned short mp_port;
public:
virtual unsigned short GetPort();
virtual void SetPort(unsigned short port);
};
jigangwang 2006-08-01
  • 打赏
  • 举报
回复
不知道lz用什么编译器啊
我用dev c++没有错误啊

只是lz类定义的结尾是否忘记了分号呢?
jixingzhong 2006-08-01
  • 打赏
  • 举报
回复
C 又不支持 类的,
把 Test 类 extern "C" 也没有用 ...

导出一个 可以操作这个类类型的函数就可以了 ...
jixingzhong 2006-08-01
  • 打赏
  • 举报
回复
我这里问题多多啊 ...
jixingzhong 2006-08-01
  • 打赏
  • 举报
回复
函数重名了?
sharpdew 2006-08-01
  • 打赏
  • 举报
回复
extern "C++"
snowbirdfly 2006-08-01
  • 打赏
  • 举报
回复
和分号没有关系。我本身代码是加了分号的。
我用的是VS.NET 2003,建立的工程是Win32 DLL。
那你是不是建错工程了~~
你新建Win32 Console Application~~~
bluesea_2000 2006-08-01
  • 打赏
  • 举报
回复
你把有关extern "C" 的注释掉
一般这种问题可能和C++的name Decoration有关
如果你的函数是以C语言编译的,那你调用声明的时候前面要加上extern "C";如果是在C++方式编译的,那么加上extern "C++"(当然这个是默认的,可以不写)

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧