bool __cdecl func (void) уже определен в func.obj - PullRequest
0 голосов
/ 26 января 2012

Я получаю

error LNK2005: "bool __cdecl hasLogin(void)" (?hasLogin@@YA_NXZ) already defined in B.obj

ошибку.func объявляется в B.cpp файле и вызывается из A.cpp файла.B.cpp включено в A.cpp.Google говорит, что не стоит включать cpp в другие cpp.Если я скопирую / вставлю func в A.cpp, проблем не будет.Как правильно решить проблему tsis?

PS Я новичок в c ++, так что простите, если вопрос дамп.

Ответы [ 3 ]

5 голосов
/ 26 января 2012

Создайте файл заголовка с именем B.h и добавьте следующее объявление функции:

#ifndef _B_HEADER_
#define _B_HEADER_

bool hasLogin(void);

#endif

Вместо #include "B.cpp" в A.cpp используйте #include "B.h".

4 голосов
/ 26 января 2012

Обычно вы должны объявлять ваши классы / функции в файлах .h (заголовок) и реализовывать их в файлах .cpp.Как правило, хорошей идеей является добавление include guard в ваши файлы .h, поэтому включение их несколько раз не является проблемой.Таким образом, ваши файлы .cpp могут включать любой файл .h без каких-либо конфликтов.

Пример;test.h

#ifndef TEST_H
#define TEST_H

class test {
    public:
        void bop();
}

bool hasLogin();

#endif

и соответствующий файл .cpp

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

void test::bop() {
    std::cout << "bop" << std::endl;
}

bool hasLogin() {
    return false;
}
1 голос
/ 26 января 2012

напишите #pragma один раз в .cpp //. H, где появляется ошибка, иногда это позволяет избежать ошибки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...