C常量结构成员初始化

我班上有一个常量的struct timespec成员.我该如何初始化它?

我得到的唯一疯狂的想法是派生我自己的timespec并给它一个构造函数.

非常感谢!

#include <iostream>

class Foo
{
    private:
        const timespec bar;

    public:
        Foo ( void ) : bar ( 1 , 1 )
        {

        }
};


int main() {
    Foo foo;    
    return 0;
}

Compilation finished with errors: source.cpp: In constructor
‘Foo::Foo()’: source.cpp:9:36: error: no matching function for call to
‘timespec::timespec(int, int)’ source.cpp:9:36: note: candidates are:
In file included from sched.h:34:0,
from pthread.h:25,
from /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/i686-pc-linux-gnu/bits/gthr-default.h:41,
from /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/i686-pc-linux-gnu/bits/gthr.h:150,
from /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ext/atomicity.h:34,
from /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/bits/ios_base.h:41,
from /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ios:43,
from /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/ostream:40,
from /usr/lib/gcc/i686-pc-linux-gnu/4.7.2/../../../../include/c++/4.7.2/iostream:40,
from source.cpp:1: time.h:120:8: note: timespec::timespec() time.h:120:8: note: candidate expects 0
arguments, 2 provided time.h:120:8: note: constexpr
timespec::timespec(const timespec&) time.h:120:8: note: candidate
expects 1 argument, 2 provided time.h:120:8: note: constexpr
timespec::timespec(timespec&&) time.h:120:8: note: candidate expects
1 argument, 2 provided

解决方法:

在C 11中,您可以在构造函数的初始化列表中初始化聚合成员:

Foo() : bar{1,1} {}

在旧版本的语言中,您需要一个工厂函数:

Foo() : bar(make_bar()) {}

static timespec make_bar() {timespec bar = {1,1}; return bar;}
上一篇:在python中更新’常量’属性时引发异常


下一篇:由于属性必须是常量表达式错误,Java代码将无法编译