Visual Studio 链接器错误:多次指定对象

时间:2021-06-29 09:23:58

标签: c++ linker wxwidgets symbols

我收到 238 个 LNK2005 错误,我不知道该怎么办。它们都与这个相似:

<块引用>

错误 LNK2005 "class wxString binary::add" (?add@binary@@3VwxString@@A) 已经在 app.obj C:\Users\giorg\Desktop\Visual Studio\wxWidgetsTest\wxWidgetsTest\expandMenu.obj 1 ikeCalculator

这是两个感兴趣的文件。

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));
}

我的 Visual Studio 解决方案:

My Visual Studio Solution

0 个答案:

没有答案