晚上好 :)
我在玩 g++ 和 makefile。我已经到了这一点:
富.h:
#ifndef _FOO_H_
#define _FOO_H_
#include "bar.h"
class foo {
private:
bar something;
public:
bool start();
bool stop();
};
#endif // _FOO_H_
Foo.h 最终包含在我的主 cpp 文件中,因此我可以通过调用 start/stop 来启动。
void somewhere() {
foo* hihi = new foo;
hihi->start();
delete hihi;
}
然后是bar.h:
#ifndef _BAR_H_
#define _BAR_H_
class bar {
};
#endif // _BAR_H_
但是 g++ 似乎不喜欢它:
g++ (some_flags) -c main.cpp
In file included from main.cpp:2:
foo.h:8: error: ‘bar’ does not name a type
我正在使用makefile,并尝试了以下组合:
main.o: main.cpp foo.h bar.h
尽管我认为我不应该在这里添加 bar.h,但不应该将它包含在 foo.h 中就足够了吗?
为了澄清,这大致是它现在的设置方式(是的,我知道这可以以更有效的方式完成):
main.o: main.cpp foo.h
$(CC) $(CFLAGS) -c main.cpp
foo.o: foo.h foo.cpp
$(CC) $(CFLAGS) -c foo.cpp
bar.o: bar.h bar.cpp
$(CC) $(CFLAGS) -c bar.cpp
这是怎么回事?我认为这是我对 g++ 及其处理标头的方式所缺少的东西,请指出正确的方向!
编辑 - 找到解决方案:
嗬!我现在觉得很傻。正在搞乱 boost::asio 并且有点忘了我仍然把它留在我的标题顶部的某个地方:使用 boost::asio::ip::tcp;
假设有一个 boost::asio::ip::tcp::bar 函数:D
哦,好吧,还是谢谢!