论坛: 编程破解 标题: 求助:VC++编程问题 复制本贴地址    
作者: shuihan [shuihan]    论坛用户   登录
在用VC++编程时插入了一个类老是有连接问题,请高人帮忙解决一下啊
--------------------Configuration: canvas - Win32 Debug--------------------
Linking...
canvasFrame.obj : error LNK2005: "public: __thiscall BodyNode::BodyNode(void)" (??0BodyNode@@QAE@XZ) already defined in canvasApp.obj
canvasFrame.obj : error LNK2005: "public: __thiscall BodyNode::BodyNode(class CPoint,struct BodyNode *,struct BodyNode *)" (??0BodyNode@@QAE@VCPoint@@PAU0@1@Z) already defined in canvasApp.obj
canvasFrame.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall CSnakeBody::~CSnakeBody(void)" (??1CSnakeBody@@UAE@XZ)
canvasFrame.obj : error LNK2001: unresolved external symbol "public: __thiscall CSnakeBody::CSnakeBody(void)" (??0CSnakeBody@@QAE@XZ)
Debug/canvas.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

canvas.exe - 5 error(s), 0 warning(s)


地主 发表时间: 04-02-06 22:13

回复: TomyChen [quest]   版主   登录
好像是类模版?对不?
把函数做成内联函数应该行得通。


B1层 发表时间: 04-02-07 10:15

回复: shuihan [shuihan]   论坛用户   登录
不是啊斑竹
就是一个普通的类
加进去后连接就出问题了

编译没问题

再帮帮忙啊

谢谢

B2层 发表时间: 04-02-07 10:20

回复: TomyChen [quest]   版主   登录
帖上代码看看吧...
连接错误,说是重复定义,看看是不是全局变量重复定义。
最好是看代码吧

B3层 发表时间: 04-02-07 12:03

回复: shuihan [shuihan]   论坛用户   登录
哦好的麻烦斑竹了啊

没有定义全局变量

头文件:

// SnakeBody.h: interface for the CSnakeBody class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_SNAKEBODY_H__2E1CF707_7B8A_4098_8DF5_9D30051E128E__INCLUDED_)
#define AFX_SNAKEBODY_H__2E1CF707_7B8A_4098_8DF5_9D30051E128E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//define snakenode
struct BodyNode
{
CPoint nodeposition;
BodyNode *back;
BodyNode *next;
//construct
BodyNode();
BodyNode(CPoint pt,BodyNode *blink,BodyNode *nlink);
};

BodyNode::BodyNode()
{}
BodyNode::BodyNode(CPoint pt,BodyNode *blink,BodyNode *nlink)
{
nodeposition=pt;
back=blink;
next=nlink;
}

class CSnakeBody 
{
public:
bool Find(CPoint x);
void RemoveTail();
void AddHead(const CPoint &x);
CSnakeBody();
virtual ~CSnakeBody();

private:
BodyNode* tail;
BodyNode* head;
};

#endif // !defined(AFX_SNAKEBODY_H__2E1CF707_7B8A_4098_8DF5_9D30051E128E__INCLUDED_)



// SnakeBody.cpp: implementation of the CSnakeBody class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "canvasr.h"
#include "SnakeBody.h"

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSnakeBody::CSnakeBody()
{
head=tail=NULL;

}

CSnakeBody::~CSnakeBody()
{

}

void CSnakeBody::AddHead(const CPoint &x)
{
if(head==NULL)
{
head=new BodyNode(x,NULL,NULL);
tail=head;
}
else
{
BodyNode* newnode;
newnode=new BodyNode(x,NULL,head);
head->back=newnode;
head=newnode;
}
}



void CSnakeBody::RemoveTail()
{
tail=tail->back;
delete tail->next;
tail->next=NULL;

}

bool CSnakeBody::Find(CPoint x)
{
for(BodyNode* i=head;i!=NULL;i=i->next)
{
if(x==i->nodeposition)
return true;
}
return false;

}



B4层 发表时间: 04-02-08 11:22

回复: jhkdiy [jhkdiy]   版主   登录
程序有点像C语言里的链表数据结构,我是乱猜得,打搅了。

B5层 发表时间: 04-02-08 23:49

回复: 286 [unique]   版主   登录
估计是你在写#include语句时位置放的不合适。
头文件与CPP文件本身没问题。
把#include "SnakeBody.h"语句放到合适的位置就行了。一般放到CPP文件名,而不要放到H文件头。或者直接放到stdafx.h中。



B6层 发表时间: 04-02-09 09:30

回复: TomyChen [quest]   版主   登录
奇怪,用...VC直接建一个新类,可以通过编译,测试通过。
但是把类保存下来,放到其他工程中,就不可用。。。
楼上的方法也试过了,对了,VC SP5都打过补丁了。。。
我也想不明白

B7层 发表时间: 04-02-09 14:42

回复: leonshoh [leonshoh]   论坛用户   登录
知道了,你的是重复定义了,在H文件里面加一条预处理指令

#pragma once

OK,就搞定了

B8层 发表时间: 04-02-11 13:02

回复: TomyChen [quest]   版主   登录
#if !defined(AFX_SNAKEBODY_H__2E1CF707_7B8A_4098_8DF5_9D30051E128E__INCLUDED_)
#define AFX_SNAKEBODY_H__2E1CF707_7B8A_4098_8DF5_9D30051E128E__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

这不已经有了吗...

B9层 发表时间: 04-02-11 15:02

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号