我正在
error LNK2005: "bool __cdecl hasLogin(void)" (?hasLogin@@YA_NXZ) already defined in B.obj
错误。 func
在B.cpp
文件中声明,并从A.cpp
文件中调用。 B.cpp
中包含A.cpp
。谷歌表示,将cpp
纳入另一个cpp
并不好。如果我在func
中复制/粘贴A.cpp
,则没有问题。如何正确解决tsis问题?
PS 我是c ++的新手,所以如果问题是转储请原谅。
答案 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,有时可以避免错误。