我有类似以下的内容:
那么header1.h
#include "header2.h"
struct MyStruct
{
int aVariable;
};
class AClass
{
AnotherClass m_anotherClass;
}
header2.h
class AnotherClass
{
AnotherClass(MyStruct & myStruct)
: m_myStruct(myStruct)
{
}
MyStruct & m_myStruct;
};
当我在header1.h中定义它时,我想知道如何在header2.h中访问MyStruct。 我知道我可以将结构的定义移动到header2.h中,但它的意思并不合适。
我想这样做的唯一原因是因为我希望能够获得存储在a_ariable中的数据,该数据在header1.cpp中得到更新。
答案 0 :(得分:3)
您需要在header2.h中添加前向声明。
Unable to start EventDrivenSourceRunner: { source:com.cloudera.flume.source.TwitterSource{name:Twitter,state:IDLE} } - Exception follows.
java.lang.NoSuchMethodError: twitter4j.FilterQuery.setIncludeEntities(Z)Ltwitter4j/FilterQuery;
at com.cloudera.flume.source.TwitterSource.start(TwitterSource.java:139)
at org.apache.flume.source.EventDrivenSourceRunner.start(EventDrivenSourceRunner.java:44)
at org.apache.flume.lifecycle.LifecycleSupervisor$MonitorRunnable.run(LifecycleSupervisor.java:251)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:304)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:178)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
答案 1 :(得分:0)
假设你将header1.h包含在header1.cpp中,你可以将struct定义移动到header2.h中。然后,由于header1.cpp包含header1.h,而header1.h又包含header2.h,header1.cpp也可以访问header2.h中定义的结构和类。
答案 2 :(得分:0)
您可以使用struct MyStruct的前向声明。由于您使用的是引用,因此不需要包含header1.h。如果它们使用结构,那么你将无法在此标题中定义函数内联,因为你需要它的定义。