I'm getting 238 LNK2005 errors and I have no idea what to do. They're all similar to this one:
Error LNK2005 "class wxString binary::add" (?add@binary@@3VwxString@@A) already defined in app.obj C:\Users\giorg\Desktop\Visual Studio\wxWidgetsTest\wxWidgetsTest\expandMenu.obj 1 ikeCalculator
These are the two interested files.
ops.h
#pragma once
#include "wx/wx.h"
#include <cmath>
#include <map>
namespace binary {
extern const wxString add, sub, mul, div;
}
namespace unary {
extern const wxString sqrt, sin, cos, tan, arcsin, arccos, arctan;
}
namespace constant {
extern const wxString pi, light_speed, avogadro_number, atomic_mass_unit, planck, gas, gravity_acceleration, golden_ratio;
}
namespace calc
{
extern const std::map < wxString, std::function<long double(long double, long double)> > binary;
extern const std::map < wxString, std::function<long double(long double)> > unary;
extern const std::map < wxString, long double > constant;
}
bool isBinary(wxString needle);
bool isUnary(wxString needle);
bool isConstant(wxString needle);
ops.cpp
#include "ops.h"
namespace binary {
const wxString add(L"+"), sub(L"-");
const wxString mul(L"\u00D7"), div(L"\u00F7");
const wxString pow(L"^");
}
namespace unary {
const wxString sqrt(L"\u221A");
const wxString sin(L"sin"), cos(L"cos"), tan(L"tan");
const wxString arcsin(L"arcsin"), arccos(L"arccos"), arctan(L"tan");
}
namespace constant {
const wxString pi(L"\u03C0");
const wxString light_speed(L"c");
const wxString avogadro_number(L"N\u1D00");
const wxString atomic_mass_unit(L"u");
const wxString planck(L"h");
const wxString gas(L"R");
const wxString gravity_acceleration(L"g");
const wxString golden_ratio(L"\u03D5");
}
namespace calc
{
const std::map < wxString, std::function<long double(long double, long double)> > binary
{
{binary::add, [](long double a, long double b) { return a + b; }},
{binary::sub, [](long double a, long double b) { return a - b; }},
{binary::mul, [](long double a, long double b) { return a * b; }},
{binary::div, [](long double a, long double b) { return a / b; }},
{binary::pow, [](long double a, long double b) { return pow(a, b); }}
};
const std::map < wxString, std::function<long double(long double)> > unary
{
{unary::sqrt, [](long double n) { return sqrt(n); }},
{unary::sin, [](long double n) { return sin(n * 3.14159265359 / 180); }}, //trasformazione da rad a gradi
{unary::cos, [](long double n) { return cos(n * 3.14159265359 / 180); }},
{unary::tan, [](long double n) { return tan(n * 3.14159265359 / 180); }},
{unary::arcsin, [](long double n) { return asin(n) * 180 / 3.14159265359; } }, //trasformazione da rad a gradi
{unary::arccos, [](long double n) { return acos(n) * 180 / 3.14159265359; } },
{unary::arctan, [](long double n) { return atan(n) * 180 / 3.14159265359; } }
};
const std::map < wxString, long double > constant
{
{constant::pi, 3.14159265359},
{constant::light_speed, 299792458},
{constant::avogadro_number, 6.02214086 * pow(10, 23)},
{constant::atomic_mass_unit, 1.67 * pow(10, -27)},
{constant::planck, 6.626 * pow(10, -34)},
{constant::gas, 8.314},
{constant::gravity_acceleration, 9.80665},
{constant::golden_ratio, 1.6180339887}
};
}
bool isBinary(wxString needle)
{
return (calc::binary.count(needle));
}
bool isUnary(wxString needle)
{
return (calc::unary.count(needle));
}
bool isConstant(wxString needle)
{
return (calc::constant.count(needle));
}
My Visual Studio Solution: