error LNK2005

IT_SW_FW 2008-09-11 03:41:07
PLAYVIDEO.obj : error LNK2005: "struct _DDSURFACEDESC ddsd" (?ddsd@@3U_DDSURFACEDESC@@A) already defined in PlayV.obj

要怎样解决?
...全文
137 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hdqqq 2008-09-11
  • 打赏
  • 举报
回复
不是lib重定义了,是两个obj中有重复,PLAYVIDEO.obj PlayV.obj , 估计是你工程中的文件。
IT_SW_FW 2008-09-11
  • 打赏
  • 举报
回复
到底在哪重定义了?唉!想不明白,继续想.呵呵
IT_SW_FW 2008-09-11
  • 打赏
  • 举报
回复
老大们快点啊,我想结帖啦
IT_SW_FW 2008-09-11
  • 打赏
  • 举报
回复
所有人说的都对,用这种方法也可以解决,我就是想知道到底是哪二个.lib重用了?谢谢.
vcPlayer 2008-09-11
  • 打赏
  • 举报
回复
不要在头文件定义变量。在任何一个CPP文件中定义,然后在stdafx.h 中用extern 声明。。。。
IT_SW_FW 2008-09-11
  • 打赏
  • 举报
回复
error:
PlayV.obj : error LNK2005: "struct IMultiMediaStream * pMMStream" (?pMMStream@@3PAUIMultiMediaStream@@A) already defined in PLAYVIDEO.obj
PlayV.obj : error LNK2005: "struct IDirectDrawSurface * pPrimarySurface" (?pPrimarySurface@@3PAUIDirectDrawSurface@@A) already defined in PLAYVIDEO.obj
PlayV.obj : error LNK2005: "struct _DDSURFACEDESC ddsd" (?ddsd@@3U_DDSURFACEDESC@@A) already defined in PLAYVIDEO.obj
PlayV.obj : error LNK2005: "struct HWND__ * hPlayWnd" (?hPlayWnd@@3PAUHWND__@@A) already defined in PLAYVIDEO.obj
PlayV.obj : error LNK2005: "struct IDirectDraw * pDD" (?pDD@@3PAUIDirectDraw@@A) already defined in PLAYVIDEO.obj

Link lib顺序:
Searching Libraries
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\user32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\gdi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\winspool.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\comdlg32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\advapi32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\shell32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\ole32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\oleaut32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\uuid.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\odbc32.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\odbccp32.lib:
Searching C:\mssdk\lib\ddraw.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\MSVCRT.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\OLDNAMES.lib:
Searching C:\mssdk\lib\AMSTRMID.lib:
Searching C:\Program Files\Microsoft Visual Studio\VC98\LIB\kernel32.lib:
Done Searching Libraries

PlayV.h:
#include "ddraw.h"
#include "mmstream.h"
#include "amstream.h"
#include "ddstream.h"

DDSURFACEDESC ddsd;
IDirectDraw *pDD;
IDirectDrawSurface *pPrimarySurface;
IMultiMediaStream *pMMStream;
HWND hPlayWnd;

PlayV.cpp:
#include "PlayV.h"

#pragma comment(lib, "AMSTRMID")

当#include "PlayV.h"加入PLAYVIDEO.CPP时就出错
PLAYVIDEO.CPP:
#include "stdafx.h"
#include "resource.h"
#include "PlayV.h"

我想知道哪二个.lib重复了?请问要怎样修改?
Gavin001 2008-09-11
  • 打赏
  • 举报
回复
有几种可能:
1.显示重复定义,代码中有多处做了定义
2.头文件重复包含,在头文件前加上#pragma once
greatws 2008-09-11
  • 打赏
  • 举报
回复
把定义放在cpp文件里,只在头文件里声明
yyunffu 2008-09-11
  • 打赏
  • 举报
回复
变量重复定义问题。如果头文件需要在多个地方包含,最好放进stdafx.h当中,以防重复包含。
fox000002 2008-09-11
  • 打赏
  • 举报
回复
重定义问题

解决的话,就是头文件中不要直接定义变量,仅做些声明,如

extern struct U_DDSURFACEDESC aaa;

然后在对应的 .cpp 中定义它

struct U_DDSURFACEDESC aaa;

其它需要使用这个变量的位置,要么 include 该头文件,或直接写 extern 声明
hdqqq 2008-09-11
  • 打赏
  • 举报
回复
估计你把这个变量定义到头文件了, 两个文件include这个头文件, 所以有两个全局变量存在,解决办法, 头文件中用extern声明, 在cpp文件中定义。

16,550

社区成员

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

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

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