C++ link2005 error 错误 解决方法汇总(一般重复定义,如果都是不就是 函数定义和实现没有分离)

一般都是重复定义。

可以按照VS给出的信息去找相关的变量或者宏定义,还有函数。

这里需要注意include,不要重复include,不要重复定义宏。

但上述这些,都是很好理解的……

如果大家按照上边说的检查了,还是百思不得其解,那么就看看关于类的函数定义和实现分离的问题吧。

一个兄弟的文章方法类似:http://blog.csdn.net/pang040328/archive/2009/07/07/4328270.aspx(不过说得很简单)

大家留意编译器出现的错误,这种情况一般都是类的函数定义重复。但只有一处定义了,为什么呢?

一般这种情况出现,是因为在h文件中,直接写了类函数的定义,虽然定义不在类中,已经分离出类之外,但还在.h文件中。

解决方法很简单,就把那几个函数放到对应的cpp中,如果没有就建一个。

我的例子:

Connection.h是一个类,其中四个函数定义在类之外,但还在h文件中。

SocketManager是另外一个类,函数实现分离到cpp中。在SocketManager.h引用Connection.h

然后在main那个cpp中,引用SocketManager.h

结果,报错了,正好就是那4个函数。

Connection代码:

 1 //class connection
 2  class Connection
 3 {
 4  public:
 5     Connection(){
 6  /////
 7      }
 8 
 9     ~Connection(){
10  /////
11      }
12 
13     //make connect-socket
14      bool makeConnect(const string &host, const string &service, const string &protocal);
15     bool makeConnect(){
16         return makeConnect(host, service, protocal_type);
17     }
18     //make passive-socket
19      bool makePassive(const string &service, const string &transport, const int qlen);
20     bool makePassive(){
21         return makePassive(service, protocal_type, qlen);
22     }
23 
24     //get protocal
25      string getProtocal(){ return protocal_type; }
26 
27     //get socket type
28      SOCKET_TYPE getSocketType(){ return sock_type; }
29 
30     //get socket
31     SOCKET getSocket(){    return sock; }
32 
33     string getHost(){ return host; }
34     string getService(){ return service; }
35     string getPort(){ return service; }
36     int getQueueLength(){ return qlen; }
37 
38 protected:
39 
40 private:
41     SOCKET passivesock(const string &service, const string &transport, const int qlen);
42     SOCKET connectsock(const string &host, const string &service, const string &transport );
43 
44 private:
45     SOCKET sock;
46     SOCKET_TYPE sock_type;
47     string protocal_type;
48     string host;
49     string service;
50     int qlen;
51     u_short    portbase;
52 };
53 
54 SOCKET Connection::passivesock(const string &serv, const string &tp, const int qlen)
55 {
56 ////
57 }
58 
59 SOCKET Connection::connectsock(const string &h, const string &serv, const string &tp)
60 {
61 //////
62 }
63 bool Connection::makePassive(const string &service, const string &transport, const int qlen){
64 //////
65 }
66 
67 bool Connection::makeConnect(const string &host, const string &service, const string &protocal){
68 ///////
69 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端生活

JDBC(二)通过Statement执行更新操作

数据库连接被用于向数据库服务器发送命令和 SQL 语句,在连接建立后,需要对数据库进行访问,执行 sql 语句

985
来自专栏java达人

Spring aop 的代理机制

Spring aop 是通过代理实现的,代理有静态代理,jdk动态代理和cglib动态代理,代理就像我们生活中的房产中介,你不直接与房主,银行接触,而是通过中介...

592
来自专栏小勇DW3

Mybatis使用动态代理实现拦截器功能

  拦截器顾名思义为拦截某个功能的一个武器,在众多框架中均有“拦截器”。这个Plugin有什么用呢?或者说拦截器有什么用呢?可以想想拦截器是怎么实现的。Plug...

1222
来自专栏Android 研究

APK安装流程详解5——Installer、InstallerConnection和Installd守护进程

因为Installer继承自SystemService,所以我们看下Installer的onStart方法 代码在Installer.java 396行

741
来自专栏蓝天

boost::bind和boost::function使用示例

C++11已支持bind和function,之前的不支持,但可以借助boost达到同样目的。看如下两段代码:

712
来自专栏Golang语言社区

Go中map数据类型3点小知识

1、map数据类型初始化 两种方式:map[string]string{}或make(map[string]string) 2、未初始化的map是nil,它与一...

3115
来自专栏我的博客

GO获取表单元素

1.如果使用Form[“username”]获取表单元素需调用ParseForm(),获取到的是数组 2.如果使用FormValue会自动调用ParseFor...

34515
来自专栏java达人

Spring aop 的代理机制

Spring aop 是通过代理实现的,代理有静态代理,jdk动态代理和cglib动态代理,代理就像我们生活中的房产中介,你不直接与房主,银行接触,而是通过中介...

2009
来自专栏逆向技术

使用互斥体防止程序多开技术

If the function succeeds, the return value is a handle to the mutex object. If t...

932
来自专栏微信公众号:Java团长

Java类加载器详解(下)

这个类中定义了一个加密和解密的算法,很简单的,就是将字节和oxff异或一下即可,而且这个算法是加密和解密的都可以用,很是神奇呀!

1353

扫码关注云+社区