`GamepadControll :: GamepadControll()'的多个定义

时间:2009-12-25 12:17:19

标签: c++ linker definition

我收到此错误消息:

  

“GamepadControll :: GamepadControll()”的多重定义

经过几个小时的沮丧后,我将代码缩减为:

GamepadControll.h:

#ifndef GAMEPADCONTROLL_H_
#define GAMEPADCONTROLL_H_

#include <iostream>

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

#endif /* GAMEPADCONTROLL_H_ */

GamepadControl.cpp:

#include "GamepadControll.h"

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

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

但我收到此错误消息!

//编辑: Main没有定义..我不能只运行没有像java这样的mainfile的类吗?这是整个日食项目:http:/ul.to/m37d2z

2 个答案:

答案 0 :(得分:2)

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

您确定没有将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)。

答案 1 :(得分:0)

从此示例代码中,似乎没有错误。错误可能是多个定义的构造函数GamepadControll

请在代码库中搜索构造函数,并找到定义的任何多个实例

GamepadControll::GamepadControll()

其他可能性:检查你是否在头文件中定义了构造函数(虽然看起来不是示例代码中的情况)