将`int`发送给构造函数但编译器发送`int&`

时间:2016-01-02 19:42:08

标签: c++ class

我有:

//B.h
class B {
    public:
    B(int);
    //...
};

//A.h
#include "B.h"

class A {
    vector<B> vec;
    public:
    void X();
    //...
};

//A.cpp
A A::X() {
    A a;
    for (int i = 1; i <= 10; ++i) {
        a.vec.push_back(B(i));     // <<< problem
    }
    return a;
}

它说:

  

没有用于调用'B :: B(int&amp;)'

的匹配函数

但我不知道这里有什么问题。我将int发送给B::B ...当然只有B b = B(2);才能正常工作。

修改:已添加public,抱歉。

2 个答案:

答案 0 :(得分:3)

B的构造函数为private,因为class的默认访问说明符为privatestruct的默认值为public

A看不到B的构造函数。此外,值x没有值,因此代码具有未定义的行为。

以下代码运作良好:

class B {
public:
    B(int) {}
};

class A {
    void X(); // Note X() is private.
};

void A::X() {
    int x = 42;
    B b = B(x);
}

答案 1 :(得分:1)

除了在类定义后丢失分号(;)以及更多错误之外,B的构造函数是private!错误消息中有左值引用会分散您的注意力,因为您传递了左值。