gpt4 book ai didi

c++ - g++ header 包括 : still doesn't find definition

转载 作者:行者123 更新时间:2023-11-30 01:32:59 25 4
gpt4 key购买 nike

晚上好:)

我正在研究 g++ 和 makefile。我已经到了这一点:

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 文件中,因此我可以通过调用启动/停止来启动它。

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++ 及其处理 header 的方式所缺少的东西,请指出正确的方向!

编辑 - 找到解决方案:

呸!我现在觉得很蠢。正在搞乱 boost::asio 并且有点忘记我仍然把它留在我的标题顶部的某个地方:使用 boost::asio::ip::tcp;

假设有一个 boost::asio::ip::tcp::bar 函数 :D

好吧,还是谢谢你!

最佳答案

Was messing around with boost::asio and kind of forgot I still left this on top of my headers somewhere: using boost::asio::ip::tcp;

Let's just say there's a boost::asio::ip::tcp::bar function

Dan Saks explains你应该对你的类名进行 typedef 的一些原因,即使它看起来是多余的。

好吧,你遇到过现实生活中的情况,在这种情况下,对类进行类型定义可能会帮助你更容易地找到你的问题:

 class bar {
// ...
};
typedef class bar bar;

如果已经声明了名为 bar() 的函数,则生成这条更有意义的消息:

In file included from C:\temp\foo.h:4,
from C:\temp\test.cpp:4:
C:\temp\bar.h:7: error: `typedef class bar bar' redeclared as different kind of symbol
C:\temp\test.cpp:1: error: previous declaration of `void bar(int)'
C:\temp\bar.h:7: error: declaration of `typedef class bar bar'

关于c++ - g++ header 包括 : still doesn't find definition,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/670541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com