bool __cdecl func(void)已在func.obj中定义

时间:2012-01-26 17:13:17

标签: c++ visual-studio-2010 visual-c++

我正在

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

错误。 funcB.cpp文件中声明,并从A.cpp文件中调用。 B.cpp中包含A.cpp。谷歌表示,将cpp纳入另一个cpp并不好。如果我在func中复制/粘贴A.cpp,则没有问题。如何正确解决tsis问题?

PS 我是c ++的新手,所以如果问题是转储请原谅。

3 个答案:

答案 0 :(得分:5)

创建名为B.h的头文件并添加以下函数声明:

#ifndef _B_HEADER_
#define _B_HEADER_

bool hasLogin(void);

#endif

而不是#include "B.cpp"中的A.cpp使用#include "B.h"

答案 1 :(得分:4)

您通常应该在.h(标头)文件中声明您的类/函数,并在.cpp文件中实现它们。将include guards放入.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;
}

答案 2 :(得分:1)

在错误来临的.cpp // .h中写一次#pragma,有时可以避免错误。