【发布时间】:2019-02-28 17:30:56
【问题描述】:
我想这可能是一个概念问题,但我找不到任何解决方法。我是 C++ 新手,但我遇到了包含问题(我在 Windows 10 上使用 Visual Studio 2017)。我创建了这些类:
- 着色器
- 材质
- 网格
它们中的每一个都分别带有它们的 .h 和 .cpp 文件。他们每个人的.h看起来像这样:
Shader.h
#pragma once
class Shader
{
public:
//Default constructor
private:
//Some stuff
}
Material.h
#pragma once
#include "Shader.h"
class Material
{
public:
Material(Shader s);
private:
//Some stuff
}
Mesh.h
#pragma once
#include "Material.h"
class Mesh
{
public:
Mesh(Material m);
private:
//Some stuff
}
问题出现在Mesh.cpp中,当我写这个时:
Mesh.cpp
#include "stdafx.h"
#include "Mesh.h"
Mesh::Mesh(Material mat)
{
}
如果我这样写,Visual Studio 会给我这个错误(在构造函数的第一个括号中标记为红色):
“材料”类不存在默认构造函数
为什么假设我仅通过在 Mesh 类的标头中包含 Material.h 来定义 Material 类构造函数?如果我只是删除构造函数并尝试在例如 Main.cpp 中创建 Mesh 类型的对象,则会出现另一个问题。 如果我这样做(让 Mesh 使用默认构造函数):
Mesh m = Mesh();
编译器说:
Mesh::Mesh 的默认构造函数不能被引用——它是一个 删除功能
我不知道该做什么或要搜索什么。希望我给了你必要的信息来帮助我,在此先感谢!
【问题讨论】:
-
一旦你这样做
Mesh(Material m);,编译器会自动删除默认构造函数。复制构造函数和赋值运算符照常生成。 -
Mesh() = default;- iff 编译器生成的默认构造函数适用于您的目的。 -
感谢您的回答!我回家后试试看
标签: c++ visual-studio constructor compiler-errors header-files