首页 > 解决方案 > variable_name的多个定义,这里先定义

问题描述

我尝试创建一个简单的项目,我在其中使用两个变量,这在我的整个项目中都很常见。

但是当我尝试编译时出现以下错误

CMakeFiles\stage.dir/objects.a(utilities.cpp.obj):utilities.cpp:(.bss+0x0): multiple definition of `error'
CMakeFiles\stage.dir/objects.a(main.cpp.obj):main.cpp:(.bss+0x0): first defined here
CMakeFiles\stage.dir/objects.a(utilities.cpp.obj):utilities.cpp:(.bss+0x8): multiple definition of `con'
CMakeFiles\stage.dir/objects.a(main.cpp.obj):main.cpp:(.bss+0x8): first defined here
CMakeFiles\stage.dir/objects.a(utilities.cpp.obj):utilities.cpp:(.bss+0x10): multiple definition of `value'
CMakeFiles\stage.dir/objects.a(main.cpp.obj):main.cpp:(.bss+0x10): first defined here
collect2.exe: error: ld returned 1 exit status

我尝试在多个文件中使用 error 和 con 变量。这是我所有文件的实际代码。

主文件

#include "utilities.h"
#include <iostream>
#include <windows.h>


void connect() {
    int errorStatus = serverConnect (49152,"localhost");
    std::cout << "Error Message:" << errorStatus << std::endl;
    Sleep(1000);
}

实用程序.h

#include "iec61850_client.h"
#include <iostream>

IedClientError error;
IedConnection con;
MmsValue* value;

实用程序.cpp

#include "utilities.h"

int serverConnect(int tcpPort, string hostname) {
    con = IedConnection_create();
    IedConnection_connect(con, &error, hostname.c_str(), tcpPort);
    return error;
}

我试图用上面的代码做的是我在我的utilities.h文件中定义了变量error和con,并包含在utilities.cpp中,虽然我正在使用它,而且我已经在我的main.cpp中包含了utilities.h

我知道发生了什么实用程序.h 已包含在 main.cpp 和实用程序.cpp 中,但如何克服这一点。

制作

set(EXECUTABLES
        main.cpp
        models/utilities.cpp
        )

add_executable(stage ${EXECUTABLES}       )

include_directories(
        ${CMAKE_CURRENT_LIST_DIR}/headers
        ${CMAKE_CURRENT_LIST_DIR}/models
)

标签: c++

解决方案


推荐阅读