Код не требует пояснений и включает в себя тестирование пространств имен. Пользователь вводит три числа, которые сохраняются в x y и z, затем все числа умножаются вместе, а затем все делятся друг на друга.
Я получаю эти три ошибки
LNK2005 "int __cdecl Div::doTheMath(int,int,int)" (?doTheMath@Div@@YAHHHH@Z) already defined in Namespacedemo.obj
LNK2005 "int __cdecl Mul::doTheMath(int,int,int)" (?doTheMath@Mul@@YAHHHH@Z) already defined in Namespacedemo.obj
LNK1169 one or more multiply defined symbols found
stdafx.h
#pragma once
#include "Divide.h"
#include "Multiply.h"
#include <iostream>
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
Divide.h
#pragma once
namespace Div
{
int doTheMath(int x, int y, int z)
{
int w = x / y / z;
return w;
}
}
Multiply.h
#pragma once
#pragma once
namespace Mul
{
int doTheMath(int x, int y, int z)
{
int w = x * y * z;
return w;
}
}
Пространство именdemo.cpp
#include "stdafx.h"
int main()
{
int x;
int y;
int z;
//Namespaces are 'Mul' & 'Div'
std::cout << "Please enter 3 numbers" << std::endl;
std::cin >> x;
std::cin >> y;
std::cin >> z;
std::cout << Mul::doTheMath(x, y, z);
std::cout << Div::doTheMath(x, y, z);
return 0;
}
Включение файла заголовка означает, что все, что есть в файле заголовка, логически вставляется в ваш файл .cpp, как если бы оно появилось там, дословно. Следовательно, у вас есть два файла .cpp, которые определяют одну и ту же точную функцию, отсюда сбой связи.
Вставьте полный журнал компиляции. Он содержит информацию, необходимую для ответа на ваш вопрос (например, какой файл был скомпилирован, когда появляется эта ошибка).





Вот как должны выглядеть ваши файлы:
Divide.h
#pragma once
namespace Div
{
int doTheMath(int x, int y, int z);
}
Multiply.h
#pragma once
namespace Mul
{
int doTheMath(int x, int y, int z);
}
Divide.cpp
#include "Divide.h"
namespace Div
{
int doTheMath(int x, int y, int z)
{
int w = x / y / z;
return w;
}
}
Multiply.cpp
#include "Multiply.h"
namespace Mul
{
int doTheMath(int x, int y, int z)
{
int w = x * y * z;
return w;
}
}
Подробное объяснение позже ...
Заголовочные файлы должны иметь объявления, но не должны иметь определений.