LNK2005 . .已经在.obj中定义
LNK2005 ... already defined in ... .obj
我是一个初学者c++程序员,我不知道如何修复这些代码。我在Stack OverFlow上找到了问题的原因,但我没有找到适合我的解决方案。
错误列表
LNK2005 "int X::var" (?var@X@@3HA) already defined in HeaderRealiseOne.obj
LNK2005 "int Y::var" (?var@Y@@3HA) already defined in HeaderRealiseOne.obj
LNK2005 "int Z::var" (?var@Z@@3HA) already defined in HeaderRealiseOne.obj
LNK1169 one or more multiply defined symbols found
main.cpp
#include "HeaderInterfaceOne.h"
int main()
{
X::var = 7;
X::print();
using namespace Y;
var = 9;
print();
{
using Z::var;
using Z::print;
var = 11;
print();
}
print();
X::print();
cout << endl;
system("pause");
return 0;
}
HeaderInterfaceOne.h
#pragma once
#include <iostream>
using namespace std;
namespace X
{
int var;
void print();
}
namespace Y
{
int var;
void print();
}
namespace Z
{
int var;
void print();
}
HeaderRealiseOne.cpp
#include "HeaderInterfaceOne.h"
void X::print() { cout << "X = " << X::var << endl; }
void Y::print() { cout << "Y = " << Y::var << endl; }
void Z::print() { cout << "Z = " << Z::var << endl; }
起初,我认为我需要在所有命名空间的int var
之前添加extern
:
namespace X
{
extern int var;
void print();
}
namespace Y
{
extern int var;
void print();
}
namespace Z
{
extern int var;
void print();
}
但是它引起了另一个问题:
LNK2001 unresolved external symbol "int X::var" (?var@X@@3HA)
LNK2001 unresolved external symbol "int X::var" (?var@X@@3HA)
LNK2001 unresolved external symbol "int Y::var" (?var@Y@@3HA)
LNK2001 unresolved external symbol "int Y::var" (?var@Y@@3HA)
LNK2001 unresolved external symbol "int Z::var" (?var@Z@@3HA)
LNK2001 unresolved external symbol "int Z::var" (?var@Z@@3HA)
LNK1120 3 unresolved externals
请帮忙修理一下。
谢谢!
第二种方法是正确的。您只需要在.cpp文件中定义extern
变量。
int X::var = 0;
int Y::var = 0;
int Z::var = 0;
到HeaderRealiseOne.cpp将解决这个问题
相关文章:
- float* 已在 Gameobject.obj 中定义
- 为什么定义复制构造函数会给我错误:无法将类型 'obj&' 的非常量左值引用绑定到类型为"obj"的右值?
- C++ LNK 2005 错误"已在 .obj 中定义
- "... already defined in *.obj"但我没有在同一范围内两次定义任何变量
- 已经在 .obj 中定义,即使有 #ifndef #define #endif
- 需要的具体示例.错误:已经定义的.OBJ 一个或多个多个定义的符号
- Main.Obj中已经定义的主要
- 变量已在 .obj 中定义;这是怎么回事?
- 已在 ConsoleApplication1.obj 中定义
- DllMain 已在 dllmain.obj 中定义
- 已在main.obj中定义了双精度
- 错误LNK2005结构已在.obj文件中定义
- 已经在main.obj中定义了
- 变量已在 .obj 中定义,但没有循环包含
- 成员函数已在.obj(visual studio)中定义
- 链接器错误: /* 项实例 */ 已在项.obj 中定义
- 错误 11 错误 LNK2005:已在 MyForm.obj 中定义"class cv::Mat imageOutput" (?imageOutput@@3VMat@cv@@A)
- 错误 LNK2005:"class Player m_player"已在 Game.obj 中定义
- 已经定义了 Obj?链接错误
- LNK2005错误,已在main.obj中定义