如何在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++; 我在用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

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 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
。大多数编译器都会告诉您之前的声明在哪里。读下去!