こんばんは :)
私はg ++とメイクファイルをいじっています。私はこの点に到達しました:
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
私は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 をいじっていましたが、これをヘッダーのどこかに残していたことを忘れていました: using boost::asio::ip::tcp;
boost::asio::ip::tcp::bar 関数があるとしましょう:D
ああ、とにかくありがとう!