很急,帮帮我好吗?为什么我的程序会有如下链接错误呢?
为什么我的程序会有如下链接错误呢?
我是个初学者,自己派生了一个类:
····························
·····························
····························
typedef struct XYZ
{
double x,y,z;
}XYZ,*PXYZ;
typedef struct XY
{
double x,y;
}XY,*PXY;
class M
{
public:
M (PXYZ pxyz);
M (PXYZ pxyz,PXY pxy);
~ M();
void Run1();
void Run_2();
void GetDate(PXYZ pxyz);
private:
PXYZ xyz;
PXY xy;
};
M::M (PXYZ pxyz)
{
xyz=pxyz;
}
void M::Run1()
{
xyz->y = (xyz->x)*2;
xyz->z = xyz->y*4;
}
M::M(PXYZ pxyz,PXY pxy)
{
xyz = pxyz;
xy = pxy;
}
void M::GetDate(PXYZ pxyz)
{
pxyz = xyz;
}
void M::Run_2()
{
xyz->x = xy->x;
xyz->y = xy->y;
}
M::~M()
{
}
···································
····································
·····································
报错为:
--------------------Configuration: exp_2 - Win32 Debug--------------------
Linking...
exp_2Dlg.obj : error LNK2005: "public: __thiscall M::M(struct XYZ *)" (??0M@@QAE@PAUXYZ@@@Z) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run1(void)" (?Run1@M@@QAEXXZ) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: __thiscall M::M(struct XYZ *,struct XY *)" (??0M@@QAE@PAUXYZ@@PAUXY@@@Z) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: void __thiscall M::GetDate(struct XYZ *)" (?GetDate@M@@QAEXPAUXYZ@@@Z) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run_2(void)" (?Run_2@M@@QAEXXZ) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: __thiscall M::~M(void)" (??1M@@QAE@XZ) already defined in exp_2.obj
Debug/exp_2.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
exp_2.exe - 7 error(s), 0 warning(s)
问题点数:0、回复次数:18Top
1 楼huzht()回复于 2003-01-04 16:33:15 得分 0
为什么我的程序会有如下链接错误呢?
我是个初学者,自己派生了一个类,
typedef struct XYZ
{
double x,y,z;
}XYZ,*PXYZ;
typedef struct XY
{
double x,y;
}XY,*PXY;
class M
{
public:
M (PXYZ pxyz);
M (PXYZ pxyz,PXY pxy);
~ M();
void Run1();
void Run_2();
void GetDate(PXYZ pxyz);
private:
PXYZ xyz;
PXY xy;
};
M::M (PXYZ pxyz)
{
xyz=pxyz;
}
void M::Run1()
{
xyz->y = (xyz->x)*2;
xyz->z = xyz->y*4;
}
M::M(PXYZ pxyz,PXY pxy)
{
xyz = pxyz;
xy = pxy;
}
void M::GetDate(PXYZ pxyz)
{
pxyz = xyz;
}
void M::Run_2()
{
xyz->x = xy->x;
xyz->y = xy->y;
}
M::~M()
{
}Top
2 楼huzht()回复于 2003-01-04 16:34:30 得分 0
我是个初学者,自己派生了一个类:
typedef struct XYZ
{
double x,y,z;
}XYZ,*PXYZ;
typedef struct XY
{
double x,y;
}XY,*PXY;
class M
{
public:
M (PXYZ pxyz);
M (PXYZ pxyz,PXY pxy);
~ M();
void Run1();
void Run_2();
void GetDate(PXYZ pxyz);
private:
PXYZ xyz;
PXY xy;
};
M::M (PXYZ pxyz)
{
xyz=pxyz;
}
void M::Run1()
{
xyz->y = (xyz->x)*2;
xyz->z = xyz->y*4;
}
M::M(PXYZ pxyz,PXY pxy)
{
xyz = pxyz;
xy = pxy;
}
void M::GetDate(PXYZ pxyz)
{
pxyz = xyz;
}
void M::Run_2()
{
xyz->x = xy->x;
xyz->y = xy->y;
}
M::~M()
{
}Top
3 楼huzht()回复于 2003-01-04 16:37:07 得分 0
--------------------Configuration: exp_2 - Win32 Debug--------------------
Linking...
exp_2Dlg.obj : error LNK2005: "public: __thiscall M::M(struct XYZ *)" (??0M@@QAE@PAUXYZ@@@Z) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run1(void)" (?Run1@M@@QAEXXZ) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: __thiscall M::M(struct XYZ *,struct XY *)" (??0M@@QAE@PAUXYZ@@PAUXY@@@Z) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: void __thiscall M::GetDate(struct XYZ *)" (?GetDate@M@@QAEXPAUXYZ@@@Z) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run_2(void)" (?Run_2@M@@QAEXXZ) already defined in exp_2.obj
exp_2Dlg.obj : error LNK2005: "public: __thiscall M::~M(void)" (??1M@@QAE@XZ) already defined in exp_2.obj
Debug/exp_2.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
exp_2.exe - 7 error(s), 0 warning(s)
Top
4 楼ixMind(路在何方)回复于 2003-01-04 16:41:19 得分 0
函数体的重复定义
不知道你的文件是如何组织的?Top
5 楼hnyyy(前进)回复于 2003-01-04 16:44:07 得分 0
因为你的这个类被编译了多次。
如果是MFC程序大致这样就可以了。
头文件中只做声明并使用#pragma once
#pragma once
class M
{
public:
M (PXYZ pxyz);
M (PXYZ pxyz,PXY pxy);
~ M();
void Run1();
void Run_2();
void GetDate(PXYZ pxyz);
private:
PXYZ xyz;
PXY xy;
};
在.cpp中
#include "stdafx.h"
#include "xxx.h"//头文件
M::M (PXYZ pxyz)
{
xyz=pxyz;
}
void M::Run1()
{
xyz->y = (xyz->x)*2;
xyz->z = xyz->y*4;
}
M::M(PXYZ pxyz,PXY pxy)
{
xyz = pxyz;
xy = pxy;
}
void M::GetDate(PXYZ pxyz)
{
pxyz = xyz;
}
void M::Run_2()
{
xyz->x = xy->x;
xyz->y = xy->y;
}
M::~M()
{
}
Top
6 楼huzht()回复于 2003-01-04 16:44:16 得分 0
给我个邮箱我把工程传给你 好吗?
Top
7 楼huzht()回复于 2003-01-04 16:46:39 得分 0
我的结构体和类的定义和说明及实现都在一个头文件内Top
8 楼huzht()回复于 2003-01-04 16:49:16 得分 0
用win32 console application 正常运行
可我把它加到一个基于对话框的程序中
就出现啦 这种错误!
帮帮我好吗?Top
9 楼jishiping(JSP 季世平)回复于 2003-01-04 16:50:40 得分 0
重复定义啊。将上面的结构定义写在头文件(*.h或者*.hpp)里,而函数的实现部分写在另一个 cpp 文件里。Top
10 楼huzht()回复于 2003-01-04 16:54:33 得分 0
不管用啊
我还是传给你
帮帮我好吗?Top
11 楼huzht()回复于 2003-01-04 17:00:41 得分 0
:\保存文件\试验工程\exp_2\exp.cpp(45) : fatal error C1010: unexpected end of file while looking for precompiled header directive
出这个错 我该怎么办?
Top
12 楼wangweicai(关外才子)回复于 2003-01-04 17:10:29 得分 0
1,你同样的内容贴了好几遍,有病!
2,同样的问题出在程序上,更说明你有病!
3,你最好把整个程序推翻,重做!
4,还有构造函数最好有且只有两个:
缺省构造函数和拷贝构造函数,并且两个函数都要重写;
析构函数最好也重写。Top
13 楼wangweicai(关外才子)回复于 2003-01-04 17:14:14 得分 0
最后,告诉你,结构定义时前后名称不要相同。
typedef tagXYZ
{
double x,y,z;
}XYZ, *PXYZ;
typedef tagXY
{
double x,y;
}XY, *PXY;Top
14 楼wangweicai(关外才子)回复于 2003-01-04 17:16:16 得分 0
对不起:
忘了struct 了
呵呵呵呵
^_^ ^_^Top
15 楼huzht()回复于 2003-01-04 17:24:55 得分 0
我的IE有问题,只能看到第一行,所以我粘的是什么我也不知道
好像机子有病毒,好慢呀Top
16 楼huzht()回复于 2003-01-04 17:29:59 得分 0
我把结构定义和类分开了,可出现了新问题:
--------------------Configuration: exp_2 - Win32 Debug--------------------
Compiling resources...
Compiling...
StdAfx.cpp
Compiling...
exp_2.cpp
exp_2Dlg.cpp
exp.cpp
d:\保存文件\试验工程\exp_2\exp.cpp(60) : fatal error C1010: unexpected end of file while looking for precompiled header directive
Generating Code...
Error executing cl.exe.
exp_2.exe - 1 error(s), 0 warning(s)
Top
17 楼huzht()回复于 2003-01-04 17:31:42 得分 0
我不知道上面粘的你们能不能看见,我只能看见第一行,但你们的我却都能看见
Top
18 楼arvid_gs(west)回复于 2003-01-04 18:15:13 得分 0
废话Top




