c++ - `GamepadControll::GamepadControll()'的多重定义

标签 c++ linker definition

我收到此错误消息:

multiple definition of `GamepadControll::GamepadControll()'

在沮丧了几个小时之后,我将代码缩减为:

GamepadControll.h:

#ifndef GAMEPADCONTROLL_H_
#define GAMEPADCONTROLL_H_

#include <iostream>

class GamepadControll {
public:
    GamepadControll();
    virtual ~GamepadControll();
};

#endif /* GAMEPADCONTROLL_H_ */

游戏 handle 控制.cpp:

#include "GamepadControll.h"

GamepadControll::GamepadControll() {
    std::cout << "Hello, I work!" << std::endl;
}

GamepadControll::~GamepadControll() {
    // TODO Auto-generated destructor stub
}

但我只是收到此错误消息!

//编辑: Main 未定义。我不能像在 Java 中那样只运行一个没有主文件的类吗?这是整个 eclipse 项目:http:/ul.to/m37d2z

最佳答案

大多数多重定义符号错误情况往往是由将代码包含到两个不同的编译单元中引起的。

您确定没有将 GamepadControl.cpp 包含到您的其他源文件中吗?

例如,您的文件和 main.cpp 都持有:

#include "GamepadControll.h"
int main (void) { return 0; }

g++ main.cpp GamepadControll.cpp 没有错误。如果我将第一行更改为:

#include "GamepadControll.cpp"

并使用相同的命令编译,我得到:

/tmp/ccbu52oq.o: In function `GamepadControll::GamepadControll()':
GamepadControll.cpp:(.text+0x0): multiple definition of
    `GamepadControll::GamepadControll()'

我能想到的唯一其他可能性是,如果您明确包含代码文件两次。使用上面的 main.cpp 的无错误版本,我仍然在使用时遇到错误:

g++ main.cpp GamepadControll.cpp GamepadControll.cpp

如果这两种情况都不是,您最好的办法是提供您的情况的完整详细信息。这意味着每个源文件(包括主文件)、您正在使用的编译和链接命令以及环境(例如,Linux 下的 gcc3,Windows 上的 Code::Blocks)。

关于c++ - `GamepadControll::GamepadControll()'的多重定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1961086/

相关文章:

objective-c - 关于 Objective C,便利方法的定义是什么?

c - 使用 Makefile 重新定义问题

c++ - 使用 CPP REST SDK 忽略 CERTIFICATE_ERROR

c++ - 如何将 lapack 与 CMake 和 Visual 2013 链接起来?

c++ - BeginPath Textout EndPath 绘制反转文本

c++ - 链接OpenCV库时出错

c++ - 将一个 DLL 链接到另一个 DLL 的正确步骤

memory - AOF代表什么?

c++ - 在 Qt 应用程序中包含 adb

c++ - 为什么会有 bool switch 语句的编译器警告?