我正在尝试编译我的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
我不明白为什么编译器没有认识到该行是构造函数(至少我认为)。
答案 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)
{}
作为一种风格,我还建议使用更清晰,更一致的名称。