工具:VS2019
背景:想创建一个C++动态链接库,里面需要用到Point类,但是虽然MFC项目里有CPoint类,但是C++动态链接库里面没有现成的Point类,所以,我准备自己仿照MFC中CPoint类的定义重新写一个,结果第一步就报了如题的错误,

代码如下:
/////XXXABC.h
#pragma once
#include <iostream>
using namespace std;
typedef struct tagPOINT
{
LONG x;
LONG y;
} POINT;
class Point
{
double X;
double Y;
public:
Point(); //创建一个未初始化的点
Point(double X_Position, double Y_Position); //创建一个已知坐标的点
Point(POINT pointer); //由另一个点创造
public:
double getX();
double getY();
void setX(double X_Value);
void setY(double Y_Value);
double distance(Point p);
};
因为一般情况下,类中不能定义本身类型的成员(PS:之所以说一般情况,是因为看见有人的类中就定义了本身类型的成员,但是我这个菜鸟不会,所以暂时先不研究人家是怎么实现的,先用最基本的方法),这样的话,我的类中的第三个构造函数“由另一个点创造点”就没法实现。所以就有了前面的struct,这样,我的那个构造函数中就可以用"POINT“了,但就是这样还是报了C2011的错。
//看着不是什么大错,我想着这个问题或许可以解决
我也上网找了一下资料,说把上面代码中类定义部分放到namespace{&n

博客作者在创建C++动态链接库时遇到问题,尝试仿照MFC的CPoint类定义自己的Point类。由于类中不能直接包含自身类型成员,作者使用结构体解决构造函数问题,但遇到重定义错误。删除结构体定义后,发现VS2019未报错,原来系统已有POINT结构体定义。作者最终决定删除自定义结构体,直接使用内置的POINT,并成功编译。此过程让作者发现并理解了命名冲突的问题。
最低0.47元/天 解锁文章
1196

被折叠的 条评论
为什么被折叠?



