I'm beginner C++ programmer, and I have no idea how to fix this code. I found the reason of problem on Stack OverFlow, but I didn't find the solution for my case.
Error list
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; }
At first, I thought I need to add extern
before int var
in all namespaces:
namespace X
{
extern int var;
void print();
}
namespace Y
{
extern int var;
void print();
}
namespace Z
{
extern int var;
void print();
}
but it caused another problem:
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
Please, help to fix it.
Thanks!