1

我有以下类和相应的头文件:

#ifndef ORDER_H_
#define ORDER_H_

#include "Side.h"

using namespace std;

class Order {
public:
    int _id;
       Side _side;
       int _ackedPrc;
       int _ackedQty;
       int _requestedPrc;
       int _requestedQty;
       int _filledQty;

       Order(){
           _id = -1;
           _side = BID;
           _ackedPrc = -1;
           _ackedQty = 0;
           _requestedPrc = 0;
           _requestedQty = 0;
           _filledQty = 0;
       }
       void cancel(){
           _requestedQty = 0;
       }
       void amend(int prc, int qty){
           _requestedPrc = prc;
           _requestedQty = qty;
       }
       void amended(){
           _ackedPrc = _requestedPrc;
           _ackedQty = _requestedQty;
       }
       void acked(){
           amended();
       }
       void onFill(int fillQty){
           _filledQty += fillQty;
       }
       int filledQty(){
           return _filledQty;
       }
       int prc(){
           return _requestedQty;
       }
       int remainingQty(){
           return _requestedQty - _filledQty;
       }
       int id(){
           return _id;
       }
       Side side(){
           return _side;
       }
       bool pendingMod(){
           return _ackedPrc != _requestedPrc || _ackedQty != _requestedQty;
       }

};
#endif

#ifndef ORDER_H_
#define ORDER_H_
#include "Side.h"

class Order {
public:
    int _id;
    Side _side;
    int _ackedPrc;
    int _ackedQty;
    int _requestedPrc;
    int _requestedQty;
    int _filledQty;

    Order();
    void cancel();
    void amend(int prc, int qty);
    void amended();
    void acked();
    void onFill(int fillQty);
    int filledQty();
    int prc();
    int remainingQty();
    int id();
    Side side();
    bool pendingMod();
};

#endif /* ORDER_H_ */

当我尝试实例化此对象时,我在我的 Mac 上的 CDT/Eclipse 中收到符号未找到错误。但是,我可以轻松地实例化项目中的任何其他类,所以我很确定我的问题在于 Order 类:

int main() {
   Order o;//This gives me an error
//   OrderBook ob; But this works
//   QuoteBook qb; And this works
    return 0;
}

谁能发现我的问题?我一直在想,我的声明在某处与我的定义不符,但我不知道如何。(是的,我是 C++ 新手。请原谅任何违反最佳实践的行为。)

谢谢

4

1 回答 1

1

一个Java程序员有机会吗?从您的代码来看,您实际上已经两次声明了该类。Order在 C++ 中,您通常声明一个类,然后在其中定义成员变量和函数。实际上,您可以像第一次声明一样声明和定义Order,但除非代码非常简短,否则这通常不是好的做法。无论如何,我建议您的标题应如下所示:

#ifndef ORDER_H_
#define ORDER_H_
#include "Side.h"

class Order {
public:
    int _id;
    Side _side;
    int _ackedPrc;
    int _ackedQty;
    int _requestedPrc;
    int _requestedQty;
    int _filledQty;

    Order();
    void cancel();
    void amend(int prc, int qty);
    void amended();
    void acked();
    void onFill(int fillQty);
    int filledQty();
    int prc();
    int remainingQty();
    int id();
    Side side();
    bool pendingMod();
};

#endif /* ORDER_H_ */

这仍然包含包含保护,因此它只会在任何编译单元中包含一次。现在您的 cpp 文件(其中包含定义)应该看起来像这样:

#include <Order.hpp>

Order::Order(){
    _id = -1;
    _side = BID;
    _ackedPrc = -1;
    _ackedQty = 0;
    _requestedPrc = 0;
    _requestedQty = 0;
    _filledQty = 0;
}
void Order::cancel(){
    _requestedQty = 0;
}
void Order::amend(int prc, int qty){
    _requestedPrc = prc;
    _requestedQty = qty;
}
void Order::amended(){
    _ackedPrc = _requestedPrc;
    _ackedQty = _requestedQty;
}
void Order::acked(){
    amended();
}
void Order::onFill(int fillQty){
    _filledQty += fillQty;
}
int Order::filledQty(){
    return _filledQty;
}
int Order::prc(){
    return _requestedQty;
}
int Order::remainingQty(){
    return _requestedQty - _filledQty;
}
int Order::id(){
    return _id;
}
Side Order::side(){
    return _side;
}
bool Order::pendingMod(){
    return _ackedPrc != _requestedPrc || _ackedQty != _requestedQty;
}

请注意,我显然根本没有对此进行测试。需要注意的主要事情是,这里是您的 Order 类函数的主体。请注意,名称必须在 Order 类中限定范围。希望这可以帮助。

于 2012-11-07T01:07:22.780 回答