一个vc编译的问题,求教!

zoohoo 2003-12-22 10:13:39
我写了一个c++类,用vc编译没有问题,但是连接的时候报如下的错误:
bcpcdr.obj : error LNK2005: "public: __thiscall COnlineName::COnlineName(char const *)" (??0COnlineName@@QAE@PBD@Z) already defined in absonline.obj
bcpcdr.obj : error LNK2005: "public: __thiscall COnlineName::~COnlineName(void)" (??1COnlineName@@QAE@XZ) already defined in absonline.obj
bcpcdr.obj : error LNK2005: "public: char * __thiscall COnlineName::getString(void)const " (?getString@COnlineName@@QBEPADXZ) already defined in absonline.obj
好像意思是说已经申明过了,但是这个是不可能的呀。
代码如下(非全部代码,只是节选了一部分用到的代码):
absonline.h
class COnlineName
{
public:
// constructor
COnlineName(const char *name);

// destructor
~COnlineName(void);

bool operator < (const COnlineName &other) const
{
bool bRes = false;
if(ACE_OS::strcmp(
m_userAccounts, other.m_userAccounts) < 0)
bRes = true;
return bRes;
}

char *getString(void) const;

private:
char m_userAccounts[const_user_accounts_len + 1];
}; // class COnlineName
absonline.cpp
///////////////////////////////////////////////////////////
// begin class COnlineName
///////////////////////////////////////////////////////////
// constructor
COnlineName::COnlineName(const char *name)
{
ACE_OS::memcpy(
this->m_userAccounts, name, const_user_accounts_len);
this->m_userAccounts[const_user_accounts_len] = 0;
}

// destructor
COnlineName::~COnlineName(void)
{
}

char *COnlineName::getString(void) const
{
return (char *)this->m_userAccounts;
}
///////////////////////////////////////////////////////////
// end class COnlineName
///////////////////////////////////////////////////////////
...全文
33 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
EricTangHL 2003-12-22
  • 打赏
  • 举报
回复
wow
hq1978 2003-12-22
  • 打赏
  • 举报
回复
加入编译指令 /FORCE:MULTIPLE
在project->settings->link中加/FORCE:MULTIPLE链接指令,就可以解决该问题
zoohoo 2003-12-22
  • 打赏
  • 举报
回复
头文件有用可能重用的关系,这是什么意思呀?thx
我把头文件的内容写到下面,大家帮忙看看,非常感谢,我用的是sgi的stl

/*+============================================================================
File: absonline.h
Summary: This file defines some function for saving
absolute users' online number

History:
2003-12-20 V1.0
Start it by zoohoo@163.com
============================================================================+*/
#ifndef __ABS_ONLINE_H_
#define __ABS_ONLINE_H_

#include /**/ "ace/OS.h"
#include /**/ <map.h>
#include /**/ "config.h"

#if defined(ABS_ONLINE)
class COnlineName
{
public:
// constructor
COnlineName(const char *name);

// destructor
~COnlineName(void);

bool operator < (const COnlineName &other) const
{
bool bRes = false;
if(ACE_OS::strcmp(
m_userAccounts, other.m_userAccounts) < 0)
bRes = true;
return bRes;
}

char *getString(void) const;

private:
char m_userAccounts[const_user_accounts_len + 1];
}; // class COnlineName

typedef map<COnlineName, int> COnlineMap;

class CAbsOnline
{
public:
// constructor
CAbsOnline(void);

// destructor
~CAbsOnline(void);

// added online number
void add(const char *name);

// remove an online number
// false: can't find number or onlinenumber is zero
bool remove(const char *name);

int getNumber(const char *name);

void print(void);

private:
COnlineMap m_map;
COnlineMap::iterator m_iter;

// defined static public function
public:
static inline void Create(void);
static void Destroy(void);

static void Add(const char *name);
static bool Remove(const char *name);
static int GetNumber(const char *name);
static void Print(void);

}; // class CAbsOnline

#endif // ABS_ONLINE
#endif // !__ABS_ONLINE_H_
easyrock 2003-12-22
  • 打赏
  • 举报
回复
看起来好像是bcpcdr.cpp #include了 absonline.cpp这个文件??
easyrock 2003-12-22
  • 打赏
  • 举报
回复
重载operator<没关系,因为是inline的
看来另有原因
888atao 2003-12-22
  • 打赏
  • 举报
回复
是不是你的头文件有用可能重用的关系呀
888atao 2003-12-22
  • 打赏
  • 举报
回复
UP
zoohoo 2003-12-22
  • 打赏
  • 举报
回复
答easyrock ,我在头文件中,只是重载了一个小于符号,有关系吗?
zoohoo 2003-12-22
  • 打赏
  • 举报
回复
可以肯定所有的cpp都入工程了,还是不行:(
easyrock 2003-12-22
  • 打赏
  • 举报
回复
你是在头文件里面实现的函数?那样的话每个包含该头文件的模块都会产生相应的一份代码,导致上面的连接错误。
Alaex 2003-12-22
  • 打赏
  • 举报
回复
看看有没有把所有源代码的文件添加到工程项目里去?
我几天前也碰到这种情况,就是这个原因!
zoohoo 2003-12-22
  • 打赏
  • 举报
回复
已经写过了,防止被重复编译,不行呀,thx
#ifndef __ABS_ONLINE_H_
#define __ABS_ONLINE_H_
...
#endif // !__ABS_ONLINE_H_

sunlight1234 2003-12-22
  • 打赏
  • 举报
回复
absonline.h中
#ifndef ABSONLINE_H

#define ABSONLINE_H
absonline.h代码
#endif
试试
zoohoo 2003-12-22
  • 打赏
  • 举报
回复
是我自己写程序的问题,解决了。叨扰诸位大侠了,散分!

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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