【发布时间】:2016-09-12 06:04:03
【问题描述】:
我是初学者 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
请帮忙修复它。
谢谢!
【问题讨论】:
-
另外
using namespace std;不属于头文件。