我收到错误信息“C2143:语法错误:缺少';'在Track.h中的“*”之前
我相信这是由于“缺少”的类定义。

这些是3个头文件:

Topics.h,程序包级别的头文件,其中包含所有其他内容:

#ifndef Topics_H
#define Topics_H

#include <oxf\oxf.h>
#include "Request.h"
#include "TDPoint.h"
#include "Track.h"
#include "TrackReport.h"

#endif

然后是TDPoint(如“3DPoint”中所述),它简单地定义了一个具有3个long属性的类:
#ifndef TDPoint_H
#define TDPoint_H

#include <oxf\oxf.h> // Just IBM Rational Rhapsody's Framework
#include "Topics.h"

class TDPoint {
    ////    Constructors and destructors    ////

public :

    TDPoint();

    ~TDPoint();

    ////    Additional operations    ////

long getX() const;
void setX(long p_x);
long getY() const;
void setY(long p_y);
long getZ() const;
void setZ(long p_z);

    ////    Attributes    ////

protected :

    long x;
    long y;
    long z;};

#endif

但是问题出在这里,在标记的行中:
#ifndef Track_H
#define Track_H

#include <oxf\oxf.h> // Just IBM Rational Rhapsody's Framework
#include "Topics.h"
#include "TDPoint.h"

class Track {

public :

    ////    Operations     ////

    std::string getId() const;

    void setId(std::string p_id);

    TDPoint* getPosition() const; // <--- This line, the first line to use TDPoint, throws the error

    ////    Attributes    ////

protected :

    std::string id;

    TDPoint position;

public :

     Track();
     ~Track();
};

#endif

我的猜测是,编译器(MS VS2008/MSVC9)根本不知道类“TDPoint”。但是,即使在与“Track”相同的头文件中定义类,或者使用诸如“class TDPoint”之类的前向声明(然后抛出错误:undefined class)也无济于事。
该代码是从Rhapsody自动生成的,如果有任何区别的话。

但是也许错误完全是另外一回事?

最佳答案

Topics.h包括TDPoint.hTrack.hTDPoint.h包括Topics.h
Track.h包括Topics.hTDPoint.h
感觉就像是一个循环包含...您应该向前声明您的类以解决该问题,或者修改Topics.h以使其不具有循环性。

09-04 07:24