【问题标题】:LNK2005 ... already defined in ... .obj [duplicate]LNK2005 ...已在....obj中定义 [重复]
【发布时间】: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 

ma​​in.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;不属于头文件。

标签: c++ visual-studio-2015


【解决方案1】:

第二种方法是正确的。您只需在 .cpp 文件中定义 extern 变量。

添加

int X::var = 0;
int Y::var = 0;
int Z::var = 0;

到 HeaderRealiseOne.cpp 即可解决问题。

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 1970-01-01
    • 2011-12-31
    • 2012-04-25
    • 1970-01-01
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多