如何在c++; 我在用Bjarne Stroustrup编写的C++编程原理和实践阅读,我在第204页上,关于CONTXPR,好像我不能使书中的代码例子编译: constexpr double xscale = 10; constexpr double yscale = 0.8; constexpr Point scalePoint(Point p) { return{ xscale * p.x, yscale * p.y }; }
Point是一个包含两个成员x y和一个构造函数的类:如何在c++; 我在用Bjarne Stroustrup编写的C++编程原理和实践阅读,我在第204页上,关于CONTXPR,好像我不能使书中的代码例子编译: constexpr double xscale = 10; constexpr double yscale = 0.8; constexpr Point scalePoint(Point p) { return{ xscale * p.x, yscale * p.y }; },c++,C++,Point是一个包含两个成员x y和一个构造函数的类: class Point { double x; double y; Point(double inX, double inY) : x(inX),y(inY) { } }; 我得到的错误是: Error (active) function "scalePoint" (declared at line 13) was previously not declared co
class Point
{
double x;
double y;
Point(double inX, double inY)
: x(inX),y(inY)
{
}
};
我得到的错误是:
Error (active)
function "scalePoint" (declared at line 13) was previously not declared constexpr
正如评论员Bo正确指出的,您也必须创建Point constexpr的构造函数。Constexpr函数只能调用其他Constexpr函数 此外,在类点中只有私有成员。因此,函数scalePoint()无法访问p.x,p.y,并且无法创建点的实例作为返回值,因为构造函数是私有的 指向结构或添加“public:”语句:
struct Point
{
double x;
double y;
constexpr Point(double inX, double inY)
: x(inX),y(inY)
{
}
};
这为我编译。正如评论员Bo正确指出的那样,您也必须创建Point constexpr的构造函数。Constexpr函数只能调用其他Constexpr函数 此外,在类点中只有私有成员。因此,函数scalePoint()无法访问p.x,p.y,并且无法创建点的实例作为返回值,因为构造函数是私有的 指向结构或添加“public:”语句:
struct Point
{
double x;
double y;
constexpr Point(double inX, double inY)
: x(inX),y(inY)
{
}
};
这是为我编译的。您从哪里得到的错误?请尝试创建并向我们展示,包括如何调用函数。如果返回
点
,您可能还需要创建构造函数constexpr
。该错误听起来好像您发布的代码之外的某个地方有一个scalePoint
的原型,该原型声明没有constexpr
。大多数编译器都会告诉您之前的声明在哪里。读下去!你从哪里得到的错误?请尝试创建并向我们展示,包括如何调用函数。如果返回点
,您可能还需要创建构造函数constexpr
。该错误听起来好像您发布的代码之外的某个地方有一个scalePoint
的原型,该原型声明没有constexpr
。大多数编译器都会告诉您之前的声明在哪里。读下去!