关于C++中的默认构造函数

david_shar 2006-12-29 08:41:33
我在MathManager.h中定义了Mat4x4类,部分代码如下
//MathManager.h
#include <math.h>
#include <memory.h>
...
class Mat4x4
{
public:
Mat4x4();
Mat4x4(const Mat4x4& mat);
...
};
并在MathManager.cpp中实现

而在另外的一个文件MeshManager.h中引用这个类
//MeshManager.h
#include "MathManager.h"
#include ....

class MeshNode
{
public:
MeshNode();
~MeshNode();
...
private:
Mat4x4 *m_mat;
...
};
在MeshManager.cpp中有
MeshNode::MeshNode():
m_mtlFace(NULL),m_vertex(NULL),m_texvertex(NULL),
m_normal(NULL),m_mat(new Mat4x4())
{
...
}
没有使用预编译头

编译的结果是C2501等,提示说是MeshNode::Mat4x4缺少存储类或者类型存储符。

Mat4x4 *m_mat;
修改为
class Mat4x4 *m_mat以后,没有C2501的错误。但是我在
默认构造函数的初始化列表中的m_mat(new Mat4x4())却提示错误C2512,没有合适的默认构造函数。
请问这是为什么?
我明明是已经提供了默认构造函数的。我在写类的时候第一个函数就默认构造函数,以前还没有出现过这种情况呢。
...全文
171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzheng318 2006-12-30
  • 打赏
  • 举报
回复
构造函数用于对对象的初始化,以前在C中这活是由程序员手工来干的,但显然我们常会忘记去初始化应该初始化的对象或是多次初始化,因而产生错误。所以C++中引入构造函数来自动完成这个工作。构造函数与类同名,无返回值。如果你不自己写一个构造函数,编译器会为你建一个缺省构造函数。如果构造函数有参数,则必须在建对象时提供参数。
david_shar 2006-12-30
  • 打赏
  • 举报
回复
问题已经解决了。我没有把源文件放在同一个地方。放到一个目录下面就好了。
david_shar 2006-12-29
  • 打赏
  • 举报
回复
我的构造函数有函数体的。它负责将矩阵设置为单位矩阵。
mochen5460 2006-12-29
  • 打赏
  • 举报
回复
构造函数没有函数体

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧