变量具有初始值设定项,但不完整的类型C++
variable has initializer but incomplete type C++
我是C++新手。我有这段代码来创建结构,以显示mutable
关键字在C++中的用法。
#include <iostream>
using namespace std;
int main()
{
struct
{
mutable double radius;
double PI = 3.142;
double getArea()
{
return (PI * radius * radius);
}
} circle;
const struct circle c1 = {2.0};
circle.radius = 7;
cout << "Area is " << circle.getArea() << endl;
return 0;
}
但是我在编译时收到以下错误消息:
error: variable const main()::circle c1 has initializer but incomplete type
错误在行const struct circle c1 = {2.0};
c1
。谁能在这里指出我的错误。
你没有定义一个名为 circle
的结构,而是定义一个名为 circle
的变量。此变量不能用作类型。
你应该做例如 struct circle { ... };
将结构定义为类型。然后你可以做
const circle c1 = { 2.0 };
c1.radius = 7;
std::cout << c1.getArea() << 'n';
还有其他一些问题,最值得注意的是,您没有将getArea
函数声明为 const
这意味着您无法在const
对象上调用它。
当您将名称circle
放在struct
定义末尾的右大括号之后时,您正在声明一个变量。
把它放在开头,在单词 struct
之后,以声明一个类型。
即
struct circle
{
// ...
};
在其他新闻中:
您需要将
getArea()
声明为const
才能在const
实例上调用它,即double getArea() const
.您不需要最后的
return 0;
,因为这是main
的默认值。其他函数没有这样的默认值。main
很特别。为了使用
cout
非限定的(正如你似乎想要的那样(,你可以在代码的开头添加using namespace std;
;它通常放在包含之后。
mutable
通常不用于允许外部代码将对象的部分视为始终非const
。
相反,它被用作一种设备,当对象似乎const
外部代码时,它也可以更轻松地让类实现具有一些非const
状态。这就是所谓的逻辑恒定性。例如,对象可能会缓存昂贵计算的结果,即使它const
。
在 C++17 及更高版本中,mutable
也可以应用于 lambda 表达式,其中它产生可以更改其状态(捕获的值(的 lambda。
- 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作为变体中的替代类型之一
- 类中的字符串不命名类型