错误:在'('标记之前的预期构造函数,析构函数或类型转换。即使我有一个构造函数?

时间:2018-03-23 13:36:09

标签: c++ g++

我正在尝试编译我的LineADT.cpp文件,但一直收到此错误:

error: expected constructor, destructor, or type conversion before ‘(’ token
LineT::LineT(PointT::PointT st, MapTypes::CompassT ornt, unsigned int l) {

我的LineADT.cpp:

#include "MapTypes.h"
#include "PointADT.h"
#include "LineADT.h"

LineT::LineT(PointT::PointT st, MapTypes::CompassT ornt, unsigned int l) { //Error 

this->s = st;
this->o = ornt;
this->L = l;

}

我的LineADT.h:

#ifndef LINET_H
#define LINET_H

#include "MapTypes.h"
#include "PointADT.h"


class LineT {

    private:
        PointT s;
        MapTypes::CompassT o;
        unsigned int L;

    public:

        LineT (PointT st, MapTypes::CompassT ornt, unsigned int l);
};

#endif

我的PointADT.h:

#ifndef POINTT_H
#define POINTT_H

class PointT {

    private:
        double xc;
        double yc;

    public:
        PointT (double x, double y);
};

#endif

我的maptypes.h:

#ifndef MAPTYPES_H
#define MAPTYPES_H

class MapTypes {

    public:
        enum CompassT {N, S, E, W};
        enum LandUseT {Recreational, Transport, Agricultural, Residential, Commercial};
        enum RotateT {CW, CCW};
};

#endif

我不明白为什么编译器没有认识到该行是构造函数(至少我认为)。

1 个答案:

答案 0 :(得分:1)

两个问题。

首先:

LineT::LineT(PointT::PointT st, MapTypes::CompassT ornt, unsigned int l) {
//                 ^^^^^^^^

不。

LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l) {

第二:PointT没有默认构造函数,所以你必须初始化它,而不仅仅是稍后再分配它。

LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l)
    : s(st)
    , o(ornt)
    , L(l)
{}

作为一种风格,我还建议使用更清晰,更一致的名称。