1>TEST.obj : error LNK2005: "int a" (?a@@3HA) 已经在 data.obj 中定义

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1>TEST.obj : error LNK2005: "int a" (?a@@3HA) 已经在 data.obj 中定义相关的知识,希望对你有一定的参考价值。

已经困扰我好几天了,具体是这样的:
data.CPP
#include <stdio.h>
#include "data.h"

void add()

c = a + b;
printf("a + b = %d\n", c);
getchar();

data.h

int a = 20;
int b = 10;
int c;
TEST.CPP

#include <stdio.h>
#include "data.h"

void add()

c = a + b;
printf("a + b = %d\n", c);
getchar();

1>------ 已启动生成: 项目: TEST, 配置: Debug Win32 ------
1>TEST.obj : error LNK2005: "void __cdecl add(void)" (?add@@YAXXZ) 已经在 data.obj 中定义
1>TEST.obj : error LNK2005: "int a" (?a@@3HA) 已经在 data.obj 中定义
1>TEST.obj : error LNK2005: "int b" (?b@@3HA) 已经在 data.obj 中定义
1>TEST.obj : error LNK2005: "int c" (?c@@3HA) 已经在 data.obj 中定义
1>c:\users\administrator\documents\visual studio 2013\Projects\TEST\Debug\TEST.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

正确的做法是在cpp文件里定义变量,在.h里用extern声明为外部变量。你的两个cpp都引用了头文件,所以变量会出现重复定义。追问

不好意思,我贴错了,TEST。CPP应该是这样的:
#include
#include "data.cpp"

int main(void)

add();
getchar();

return 0;

不好意思,我贴错了,TEST。CPP应该是这样的:
#include
#include "data.cpp"

int main(void)

add();
getchar();

return 0;

追答

我知道贴错了,而且我也能猜出main怎么写。。不过我回答的跟这些都无关哦
还有main里只要包含.h就可以了,不应该包含cpp

追问

这个我清楚,但是包含.cpp也没有错啊,最让我郁闷的是提示重复定义int a, int b, int c , 明明我只引用了一次啊。

追答

http://bbs.csdn.net/topics/200084086
看三楼的解释

参考技术A 这是因为你的两个源文件都是.cpp的,只要把其中一个改为.c文件就可以了😁 参考技术B 这很可能是因为头文件创建的时候有问题,以Microsoft Visual Studio2010版本为例,有的人创建头文件时是创建c++文件(.cpp)后通过重命名变成头文件(.h)但系统还是默认为cpp文件,因该在创建的时候就选择创建头文件。

windows error LNK2019

参考技术A error LNK2001: 无法解析的外部符号 __imp_htons
error LNK2001: 无法解析的外部符号 __imp_ntohl
error LNK2001: 无法解析的外部符号 __imp_ntohs
error LNK2019: 无法解析的外部符号 in6addr_any
error LNK2001: 无法解析的外部符号 __imp_htonl
error LNK2019: 无法解析的外部符号 in6addr_loopback

error LNK2019: 无法解析的外部符号 D3D11CreateDevice

error LNK2019: 无法解析的外部符号 __imp_timeKillEvent
error LNK2019: 无法解析的外部符号 __imp_timeBeginPeriod
error LNK2019: 无法解析的外部符号 __imp_timeEndPeriod
error LNK2019: 无法解析的外部符号 __imp_timeSetEvent
error LNK2019: 无法解析的外部符号 __imp_timeGetTime

error LNK2019: 无法解析的外部符号 __imp_CertOpenStore
error LNK2019: 无法解析的外部符号 __imp_CertCloseStore
error LNK2019: 无法解析的外部符号 __imp_CertEnumCertificatesInStore
error LNK2019: 无法解析的外部符号 __imp_CertFindCertificateInStore
error LNK2019: 无法解析的外部符号 __imp_CertDuplicateCertificateContext
error LNK2019: 无法解析的外部符号 __imp_CertFreeCertificateContext
error LNK2019: 无法解析的外部符号 __imp_CertGetCertificateContextProperty

error LNK2019: 无法解析的外部符号 InitializeSecurityContextA
error LNK2019: 无法解析的外部符号 AcquireCredentialsHandleA
error LNK2019: 无法解析的外部符号 __imp_FreeCredentialsHandle
error LNK2019: 无法解析的外部符号 CompleteAuthToken
error LNK2019: 无法解析的外部符号 __imp_DeleteSecurityContext

error LNK2019: 无法解析的外部符号 MoInitMediaType
error LNK2019: 无法解析的外部符号 MoFreeMediaType

error LNK2019: 无法解析的外部符号 CLSID_CWMAudioAEC

error LNK2019: 无法解析的外部符号 IID_IMediaObject
error LNK2019: 无法解析的外部符号 IID_IMediaBuffer

error LNK2019: 无法解析的外部符号 IID_ICreateDevEnum
error LNK2019: 无法解析的外部符号 IID_IBaseFilter
error LNK2019: 无法解析的外部符号 IID_IAMExtDevice
error LNK2019: 无法解析的外部符号 IID_IAMStreamConfig
error LNK2019: 无法解析的外部符号 IID_IAMVideoControl
error LNK2019: 无法解析的外部符号 IID_IGraphBuilder
error LNK2019: 无法解析的外部符号 IID_IMemInputPin
error LNK2019: 无法解析的外部符号 IID_IPin
error LNK2019: 无法解析的外部符号 IID_IMemAllocator
error LNK2019: 无法解析的外部符号 IID_IEnumMediaTypes
error LNK2019: 无法解析的外部符号 IID_IEnumPins

error LNK2019: 无法解析的外部符号 __imp_RegQueryValueExW
error LNK2019: 无法解析的外部符号 __imp_RegCloseKey
error LNK2019: 无法解析的外部符号 __imp_RegOpenKeyExW
error LNK2019: 无法解析的外部符号 __imp_DeregisterEventSource
error LNK2019: 无法解析的外部符号 __imp_RegisterEventSourceW
error LNK2019: 无法解析的外部符号 __imp_ReportEventW
error LNK2019: 无法解析的外部符号 __imp_CryptAcquireContextW
error LNK2019: 无法解析的外部符号 __imp_CryptReleaseContext
error LNK2019: 无法解析的外部符号 __imp_CryptDestroyKey
error LNK2019: 无法解析的外部符号 __imp_CryptSetHashParam
error LNK2019: 无法解析的外部符号 __imp_CryptGetProvParam
error LNK2019: 无法解析的外部符号 __imp_CryptGetUserKey
error LNK2019: 无法解析的外部符号 __imp_CryptExportKey
error LNK2019: 无法解析的外部符号 __imp_CryptDecrypt
error LNK2019: 无法解析的外部符号 __imp_CryptCreateHash
error LNK2019: 无法解析的外部符号 __imp_CryptDestroyHash
error LNK2019: 无法解析的外部符号 __imp_CryptSignHashW
error LNK2019: 无法解析的外部符号 __imp_CryptEnumProvidersW

error LNK2019: 无法解析的外部符号 __imp_CreateRectRgn
error LNK2019: 无法解析的外部符号 __imp_GetRgnBox
error LNK2019: 无法解析的外部符号 __imp_DeleteObject
error LNK2001: 无法解析的外部符号 __imp_DeleteObject
error LNK2019: 无法解析的外部符号 __imp_GetCurrentObject
error LNK2019: 无法解析的外部符号 __imp_GetObjectW
error LNK2019: 无法解析的外部符号 __imp_CreateCompatibleDC
error LNK2001: 无法解析的外部符号 __imp_CreateCompatibleDC
error LNK2019: 无法解析的外部符号 __imp_SelectObject
error LNK2001: 无法解析的外部符号 __imp_SelectObject
error LNK2019: 无法解析的外部符号 __imp_BitBlt
error LNK2001: 无法解析的外部符号 __imp_BitBlt
error LNK2019: 无法解析的外部符号 __imp_DeleteDC
error LNK2001: 无法解析的外部符号 __imp_DeleteDC
error LNK2019: 无法解析的外部符号 __imp_GetDeviceCaps
error LNK2001: 无法解析的外部符号 __imp_GetDeviceCaps
error LNK2001: 无法解析的外部符号 __imp_GetDeviceCaps
error LNK2019: 无法解析的外部符号 __imp_CreateDIBSection

以上是关于1>TEST.obj : error LNK2005: "int a" (?a@@3HA) 已经在 data.obj 中定义的主要内容,如果未能解决你的问题,请参考以下文章

error LNK2019: 无法解析的外部符号

了解 Visual Studio 2010 中的此错误 (LNK 2019)

error LNK2001: 无法解析的外部符号

error LNK2019: 无法解析的外部符号 WinMain,error LNK2001: 无法解析的外部符号 WinMain

fatal error LNK _X

1>LINK : fatal error LNK1104: 无法打开文件“strmiids.lib”