我的问题类似于this one,但我无法想象如何在日食中修复它。
在eclipse上编译一个小程序时,我有一种奇怪的行为。当我在标题的末尾包含.cpp文件(并删除.cpp中的.h的包含)时,它会编译,否则不会。
我想要包含的课程是在一个单独的项目中,该项目是正确链接的。
以下是一个例子:
在项目来源
中文件myclass.h
#ifndef MYCLASS_H_
#define MYCLASS_H_
namespace lol
{
class myclass{ public // definitions... }
}
//#include myclass.cpp //**works when I uncomment this**
#endif
文件myclass.cpp
#include "myclass.h" // ** does not work unless I include my .cpp (unity build like) **
// and I don't want to include .cpp files
namespace lol{ // not funny
myclass::myclass(){
} //code ... code
}
在其他项目中 mainFile.cpp
#include "myclass.h" // works only if I include myclass.cpp at the end of myclass.h
using namespace lol;
int main(){
myclass obj = myclass(); // gives undefined reference to lol::myclass::myclass()
}
我可以通过构建makefile来解决这个问题,这是我喜欢的解决方案,但遗憾的是我需要使用eclipse。
有什么建议吗?
谢谢!
答案 0 :(得分:1)
您在包含文件的末尾缺少“#endif”。
改为使用“#pragma once”。
// .h file
#pragma once
namespace lol
{
class foo {};
}
// end of file
请参阅我对编译单元和管道here的解释。
答案 1 :(得分:0)
我想说如果从eclipse自动生成文件生成中看到你的.cpp
它将它作为源(翻译单元)并将其添加到源列表中。
如果要包含内联定义(一次),则应使用不同的文件扩展名(例如.tcc
,.icc
)。
您还可以尝试将其从项目的资源配置中排除(右键单击.cpp
,选择“资源配置 - >从构建中排除”。)
另一种选择是将项目类型更改为“Makefile项目”并自行维护makefile。