Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在std::multiset(C+;+;)中协调typedef和structs_C++_Struct_Typedef_Multiset - Fatal编程技术网

C++ 在std::multiset(C+;+;)中协调typedef和structs

C++ 在std::multiset(C+;+;)中协调typedef和structs,c++,struct,typedef,multiset,C++,Struct,Typedef,Multiset,我不是一个专业的程序员,所以请毫不犹豫地说出显而易见的事实 我的目标是使用名为currentEvents的std::multiset容器(typedef EventMultiSet)来组织类型为Event的结构列表,并让类Host的成员偶尔向currentEvents添加新的Event结构。结构应该按其成员之一时间进行排序。我不确定我试图做的有多少是合法的;g++编译器报告(在“Host.h”中)“错误:'EventMultiSet'尚未声明。” // Event.h struct Event

我不是一个专业的程序员,所以请毫不犹豫地说出显而易见的事实

我的目标是使用名为
currentEvents
std::multiset
容器(
typedef EventMultiSet
)来组织类型为
Event
的结构列表,并让类
Host
的成员偶尔向
currentEvents
添加新的
Event
结构。结构应该按其成员之一时间进行排序。我不确定我试图做的有多少是合法的;g++编译器报告(在“Host.h”中)“错误:'EventMultiSet'尚未声明。”

// Event.h
struct Event {
  public:

  bool operator < ( const Event & rhs ) const {
  return ( time < rhs.time );
 }

 double time;
 int eventID;
 int hostID;
};

// Host.h
...
void calcLifeHist( double, EventMultiSet * ); // produces compiler error
...
void addEvent( double, int, int, EventMultiSet * ); // produces compiler error

// Host.cpp
#include "Event.h"
...

// main.cpp
#include "Event.h"
...
typedef std::multiset< Event, std::less< Event > > EventMultiSet;
EventMultiSet currentEvents;
EventMultiSet * cePtr = &currentEvents;
...
//Event.h
结构事件{
公众:
布尔运算符<(常数事件和rhs)常数{
返回(时间>EventMultiSet;
事件多集当前事件;
EventMultiSet*cePtr=¤tEvents;
...
主要问题

  • 我应该在哪里包括EventMultiSet typedef
  • 我的EventMultiSet指针显然有问题吗
  • 我的事件结构中的比较函数(理论上)可以吗
  • 事先非常感谢

  • 编译器错误只是因为typedef位于错误的位置,只有main.cpp知道这一点。看起来您可能希望在Event.h中使用它,其他两个都包括

  • 我不确定你到底在问什么——但你可能不想直接问

  • 我看不出它有什么问题-尽管您可能希望提供其他比较(
    
    
  • 编译器错误只是因为typedef位于错误的位置-只有main.cpp知道它。看起来您可能希望它出现在Event.h中,其他两个都包括

  • 我不确定你到底在问什么——但你可能不想直接问


  • 我看不出有什么问题-尽管您可能希望提供其他比较(
    ),因为您征求了“显而易见的”陈述我注意到的一件事是,您没有
    #include
    ,这是编译器了解
    multiset
    是什么所必需的,或者
    #include
    是了解
    less
    的意思所必需的:

    // main.cpp
    #include "Event.h"
    #include <set>
    #include <functional>
    ...
    typedef std::multiset< Event, std::less< Event > > EventMultiSet;
    EventMultiSet currentEvents;
    EventMultiSet * cePtr = &currentEvents;
    
    //main.cpp
    #包括“Event.h”
    #包括
    #包括
    ...
    typedef std::multiset>EventMultiSet;
    事件多集当前事件;
    EventMultiSet*cePtr=¤tEvents;
    
    鉴于您征求了“显而易见”的陈述,我注意到的一件事是您没有
    #include
    ,这是您的编译器了解
    multiset
    是什么所必需的,或者
    #include
    是了解
    less
    的意思所必需的:

    // main.cpp
    #include "Event.h"
    #include <set>
    #include <functional>
    ...
    typedef std::multiset< Event, std::less< Event > > EventMultiSet;
    EventMultiSet currentEvents;
    EventMultiSet * cePtr = &currentEvents;
    
    //main.cpp
    #包括“Event.h”
    #包括
    #包括
    ...
    typedef std::multiset>EventMultiSet;
    事件多集当前事件;
    EventMultiSet*cePtr=¤tEvents;
    
    谢谢。我在Event.h中将typedef行移到了结构定义下,但在Host.h中未声明EventMultiSet时仍会遇到相同的错误。(Host.h不包含Event.h——只有Host.cpp包含。当我在Host.h中包含Event.h时(我不确定应该这样做),我会收到一条关于重新定义“struct Event”的消息).好的,一个严峻的事实是typedef应该只在一个地方,需要它的所有东西都应该包含该文件。当然,对于
    struct Event
    ,情况也是如此。您是否在多个地方(Host.h和Event.h)定义了它。另外,您的所有头文件都有include guard吗?(例如,将Event.h包装在
    #ifdef Event_h..#endif
    )我收到EventMultiSet声明错误,因为我未能将#include添加到Event.h!对此表示抱歉。感谢您建议通过引用传递。我还忘记了Event.h的include卫士。在比较运算符上,请注意,任何具有相同时间的项都可能被洗牌,因为就比较操作而言埃拉托担心,它们是等价的。这可能是个问题,也可能不是,但值得指出。(这取决于排序算法的实现和正在排序的对象的特定内容。在将对象添加到已排序数据结构的情况下,添加与另一个对象具有相同时间戳的对象时,它可能在前面或后面。)所以-如果在具有相同时间戳的事物之间顺序很重要,那么您需要编码更多的信息。好的,抱歉,错误仍然存在:我仍然得到“EventMultiSet”并没有在Host.h中声明,尽管我在Host.cpp中包含了“Event.h”。我被难住了。(DTB:谢谢。现在,在该级别排序是不必要的。)谢谢。我将typedef行移到了Event.h中的struct定义下,但是我仍然得到了关于EventMultiSet未在Host.h中声明的相同错误。(Host.h不包含Event.h--只有Host.cpp包含。当我在Host.h中包含Event.h时,我不确定我是否应该这样做,我会收到一条关于“struct Event”重新定义的消息).好的,一个严峻的事实是typedef应该只在一个地方,需要它的所有东西都应该包含该文件。当然,对于
    struct Event
    ,情况也是如此。您是否在多个地方(Host.h和Event.h)定义了它。另外,您的所有头文件都有include guard吗?(例如,在
    #ifdef Event_h….#endif
    中包装Event.h)我收到EventMultiSet声明错误,因为我未能将#include添加到Event.h!对此表示抱歉。谢谢