Добрый вечер:)
Я играю с g ++ и makefiles. Я дошел до этой точки:
foo.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
Я использую make-файлы и пробовал сочетание таких вещей, как:
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 ++ мне чего-то не хватает, и то, как он обрабатывает заголовки, укажите мне правильное направление, пожалуйста!
edit - нашел решение:
Doh! Я чувствую себя тупым прямо сейчас.
Возился с boost :: asio и вроде как забыл, я все еще оставил это где-то на верху моих заголовков:
используя boost :: asio :: ip :: tcp;
Скажем так, есть функция boost :: asio :: ip :: tcp :: bar: D
Ну да ладно, все равно спасибо!