为什么我的程序会有如下链接错误呢?我是个初学者,自己派生了一个类:
····························
·····························
····························
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.objexp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run1(void)" (?Run1@M@@QAEXXZ) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: __thiscall M::M(struct XYZ *,struct XY *)" (??0M@@QAE@PAUXYZ@@PAUXY@@@Z) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: void __thiscall M::GetDate(struct XYZ *)" (?GetDate@M@@QAEXPAUXYZ@@@Z) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run_2(void)" (?Run_2@M@@QAEXXZ) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: __thiscall M::~M(void)" (??1M@@QAE@XZ) already defined in exp_2.objDebug/exp_2.exe : fatal error LNK1169: one or more multiply defined symbols foundError executing link.exe.exp_2.exe - 7 error(s), 0 warning(s)

解决方案 »

  1.   

    为什么我的程序会有如下链接错误呢?我是个初学者,自己派生了一个类,
     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()
    {
    }
      

  2.   

    我是个初学者,自己派生了一个类:
     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()
    {
    }
      

  3.   

    --------------------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.objexp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run1(void)" (?Run1@M@@QAEXXZ) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: __thiscall M::M(struct XYZ *,struct XY *)" (??0M@@QAE@PAUXYZ@@PAUXY@@@Z) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: void __thiscall M::GetDate(struct XYZ *)" (?GetDate@M@@QAEXPAUXYZ@@@Z) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: void __thiscall M::Run_2(void)" (?Run_2@M@@QAEXXZ) already defined in exp_2.objexp_2Dlg.obj : error LNK2005: "public: __thiscall M::~M(void)" (??1M@@QAE@XZ) already defined in exp_2.objDebug/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)
      

  4.   

    因为你的这个类被编译了多次。如果是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()
    {
    }
      

  5.   

    用win32 console application 正常运行可我把它加到一个基于对话框的程序中就出现啦 这种错误!帮帮我好吗?
      

  6.   

    重复定义啊。将上面的结构定义写在头文件(*.h或者*.hpp)里,而函数的实现部分写在另一个 cpp 文件里。
      

  7.   

    :\保存文件\试验工程\exp_2\exp.cpp(45) : fatal error C1010: unexpected end of file while looking for precompiled header directive出这个错 我该怎么办?
      

  8.   

    最后,告诉你,结构定义时前后名称不要相同。
    typedef tagXYZ
    {
      double x,y,z;
    }XYZ, *PXYZ;
    typedef tagXY
    {
      double x,y;
    }XY, *PXY;
      

  9.   

    对不起:
    忘了struct 了
    呵呵呵呵
    ^_^  ^_^
      

  10.   

    我把结构定义和类分开了,可出现了新问题:
    --------------------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)