Thi*_*ruG 1 c++ struct compiler-errors
我是C++的新手.我有这个代码来创建一个结构,以显示mutableC++ 中关键字的用法.
#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;
}
Run Code Online (Sandbox Code Playgroud)
但是在编译时我收到以下错误消息:
error: variable const main()::circle c1 has initializer but incomplete type
Run Code Online (Sandbox Code Playgroud)
错误在于c1该行const struct circle c1 = {2.0};.任何人都可以在这里指出我的错误.
您没有定义名为的结构circle,您定义了一个名为的变量circle.此变量不能用作类型.
您应该例如struct circle { ... };将结构定义为类型.然后你可以做到
const circle c1 = { 2.0 };
c1.radius = 7;
std::cout << c1.getArea() << '\n';
Run Code Online (Sandbox Code Playgroud)
还有一些其他问题,最值得注意的是你没有声明getArea函数,const这意味着你不能在const对象上调用它.
当您将名称放在定义circle末尾的右大括号后面时struct,您将声明一个变量.
把它放在单词后面的开头struct,以声明一个类型.
即
struct circle
{
// ...
};
Run Code Online (Sandbox Code Playgroud)
在其他新闻中:
你需要声明getArea()的const是能够把它叫做一个const实例,即double getArea() const.
你return 0;最后不需要,因为这是默认值main.其他功能没有此类默认值.main很特别.
为了使用cout不合格(你似乎想要),你可以using namespace std;在代码的开头添加; 它通常放在包含之后.
mutable通常不用于允许外部代码将对象的一部分视为非常const.
相反,它被用作设备,const当对象看起来是const外部代码时,更容易让类实现具有一些非状态.这就是所谓的逻辑常量.例如,对象可能会缓存昂贵计算的结果,即使它是const.
在C++中,17及更高版本mutable也可以应用于lambda表达式,在这里它产生一个可以改变其状态的lambda(捕获值).