Несколько определений `GamepadControll :: GamepadControll () ' - PullRequest
0 голосов
/ 25 декабря 2009

Я получил это сообщение об ошибке:

множественное определение `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 не определен .. Разве я не могу запустить только класс без mainfiles, как в Java? Вот весь проект затмения: http: /ul.to/m37d2z

Ответы [ 2 ]

2 голосов
/ 25 декабря 2009

В большинстве случаев ошибки с многозначно определяемыми символами обычно связаны с включением кода в две разные единицы компиляции.

Вы уверены, что не включаете 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

Если это не один из этих двух случаев, лучше всего предоставить полные сведения о вашей ситуации. Это означает каждый исходный файл (включая основной), используемые вами команды компиляции и компоновки, а также среду (например, gcc3 в Linux, Code :: Blocks в Windows).

0 голосов
/ 25 декабря 2009

Из этого примера кода, кажется, нет ошибки. Ошибка может быть множественным определенным конструктором GamepadControll.

Пожалуйста, найдите конструктор в базе кода и найдите несколько экземпляров, определенных

GamepadControll::GamepadControll()

Другая возможность: проверить, определен ли конструктор в заголовочном файле (хотя это не выглядит так из примера кода)

...