将常量传递给C ++构造函数

时间:2017-01-15 20:25:39

标签: c++

我有一个构造函数接收整数的类:

class One
{
public:
    One(int i)
    {
        foo(i);
    }

    void foo(int i)
    {
        // Do something with i
    }
};

以上编辑很好。

我有第二个类,其成员类型为One。编译这会导致我传递int的错误(错误是“期望的类型说明符”):

class Two
{
public:
    One x(1);
};

但是,如果它是一个指针,我可以初始化该成员:

class Three
{
public:
    One *x = new One(1);
};

我可以在不使用指针的情况下初始化类吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

使用:

class Two
{
public:
    One x(1);
};

并且基于语言规则,编译器尝试将x解析为返回类型为One的对象的成员函数,而不是看到有效的参数声明至少需要一个0或更多类型说明符的列表,它会看到非类型

class Three
{
public:
    One *x = new One(1);
};
     

我可以在不使用指针的情况下初始化类吗?

是的,使用value-initialization uniform-b​​race-initialization 语法:

class Three
{
public:
    One x{1};
};

copy-initialization

class Three
{
public:
    One x = 1;  //Uses converting constructor, 
    //see http://en.cppreference.com/w/cpp/language/converting_constructor

    //or
    One x = One(your, multiple, arguments, here);
};

或构造函数中的member-initializer-lists

class Three
{
public:
    Three(...) : x(1) { ... }
    One x;
    ...
};

答案 1 :(得分:4)

One x(1);

被解析为函数声明,这就是它期望括号中的类型的原因。你可以使用

One x = 1;

One x{1};

代替。