一个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文件中,同样也可以编译通过。
请问高手,这是什么原因呢?
...全文
211 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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++"(当然这个是默认的,可以不写)
  • 打赏
  • 举报
回复
发帖
C++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2006-08-01 10:33
社区公告
暂无公告