xxxx没有命名c++类型
xxxx does not name a type C++
我是C/c++的新手,正在努力提高编码技能。我正在写一个最小的代码来计算我在大学学习中使用的公式。这段代码由许多类组成。当我试图构建它时,在类的标题中出现了错误。下面是我的代码:
materials.hpp
#ifndef MATERIALS_HPP
#define MATERIALS_HPP
#include <cmath>
#include <iostream>
using namespace std;
class materials{
public:
double MassNumber, AtomNumber, Density, I, C, a, m, X1, X0, X, delta;
materials();
materials(double, double, double, double, double, double, double, double, double);
~materials();
};
materials Magnesium;
materials Cupper;
materials Alluminium;
materials Plumbo;
materials Water;
#endif // MATERIALS_HPP
这是来源;
materials.cpp
#include "materials.hpp"
#include <cmath>
#include <iostream>
using namespace std;
materials::materials()
{
MassNumber = AtomNumber = Density = I = a = m = C = X1 = X0 = X = delta = 0.0;
}
materials::materials(double a1, double a2, double a3, double a4, double a5, double a6,double a7, double a8, double a9)
{
MassNumber = a1;
AtomNumber = a2;
Density = a3;
I = a4;
C = a5;
a = a6;
m = a7;
X1 = a8;
X0 = a9;
}
Magnesium.materials(23.0, 12.0, 1.738, 156.0, -4.53, 0.0816, 3.62, 3.07, 0.1499);
Cupper.materials(63.0, 29.0, 8.96, 322.0, -4.42, 0.1434, 2.90, 3.28, 0.0254);
Alluminium.materials(26.0, 13.0, 2.70, 166.0, -4.24, 0.0802, 3.63, 3.01, 0.1708);
Plumbo.materials(207.0, 82.0, 11.34, 823.0, -6.20, 0.0936, 3.16, 3.81, 0.3776);
Water.materials(18.0, 10.0, 1.0, 75.0, -3.50, 0.0911, 3.48, 2.80, 0.2400);
和我得到的错误;
materials.cpp:64:1: error: 'Magnesium' does not name a type
Magnesium.materials(23.0, 12.0, 1.738, 156.0, -4.53, 0.0816, 3.62, 3.07, 0.1499
);
^
materials.cpp:66:1: error: 'Cupper' does not name a type
Cupper.materials(63.0, 29.0, 8.96, 322.0, -4.42, 0.1434, 2.90, 3.28, 0.0254);
^
materials.cpp:68:1: error: 'Alluminium' does not name a type
Alluminium.materials(26.0, 13.0, 2.70, 166.0, -4.24, 0.0802, 3.63, 3.01, 0.1708
);
^
materials.cpp:70:1: error: 'Plumbo' does not name a type
Plumbo.materials(207.0, 82.0, 11.34, 823.0, -6.20, 0.0936, 3.16, 3.81, 0.3776);
^
materials.cpp:72:1: error: 'Water' does not name a type
Water.materials(18.0, 10.0, 1.0, 75.0, -3.50, 0.0911, 3.48, 2.80, 0.2400);
^
make: *** [materials.o] Error 1
我在Linux上的GCC 4.9.0和Windows上的GCC 4.8.1的MinGW上尝试它。我读过其他关于它的文章,但我没能做到。为什么会出现这些错误?
你应该去找一本很好的介绍c++中类是如何工作的书。
问题是,你试图做某种奇怪的两部分结构,首先声明materials Magnesium;
然后尝试显式调用
Magnesium.materials(23.0, 12.0, 1.738, 156.0, -4.53, 0.0816, 3.62, 3.07, 0.1499);
但是构造函数在c++中不这样工作!
你应该这样做:
materials Magnesium(23.0, 12.0, 1.738, 156.0, -4.53, 0.0816, 3.62, 3.07, 0.1499);
这里不是解释类构造细节的地方,但我可以肯定地说,您应该对此做更多的研究。
如果您希望这些全局变量可以在其他源文件中访问:
在头文件中修改为:
extern materials Magnesium;
extern materials Cupper;
extern materials Alluminium;
extern materials Plumbo;
extern materials Water;
在源文件中修改为:
materials Magnesium(23.0, 12.0, 1.738, 156.0, -4.53, 0.0816, 3.62, 3.07, 0.1499);
materials Cupper(63.0, 29.0, 8.96, 322.0, -4.42, 0.1434, 2.90, 3.28, 0.0254);
materials Alluminium(26.0, 13.0, 2.70, 166.0, -4.24, 0.0802, 3.63, 3.01, 0.1708);
materials Plumbo(207.0, 82.0, 11.34, 823.0, -6.20, 0.0936, 3.16, 3.81, 0.3776);
materials Water(18.0, 10.0, 1.0, 75.0, -3.50, 0.0911, 3.48, 2.80, 0.2400);
如果您不希望在其他源文件中访问这些全局变量:
从头文件中删除:
materials Magnesium;
materials Cupper;
materials Alluminium;
materials Plumbo;
materials Water;
在源文件中修改为:
static materials Magnesium(23.0, 12.0, 1.738, 156.0, -4.53, 0.0816, 3.62, 3.07, 0.1499);
static materials Cupper(63.0, 29.0, 8.96, 322.0, -4.42, 0.1434, 2.90, 3.28, 0.0254);
static materials Alluminium(26.0, 13.0, 2.70, 166.0, -4.24, 0.0802, 3.63, 3.01, 0.1708);
static materials Plumbo(207.0, 82.0, 11.34, 823.0, -6.20, 0.0936, 3.16, 3.81, 0.3776);
static materials Water(18.0, 10.0, 1.0, 75.0, -3.50, 0.0911, 3.48, 2.80, 0.2400);
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 我应该使用什么来代替void作为变体中的替代类型之一
- 类中的字符串不命名类型