向构造函数发送"int",但编译器发送"int&"

Sending `int` to constructor but compiler send `int&`

本文关键字:int 编译器 构造函数      更新时间:2023-10-16

我有:

//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&)"的调用没有匹配的函数

但我看不出这里出了什么问题。我将int发送到B::B。。。当然,只有B b = B(2);可以正常工作。

编辑:添加public,抱歉。

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);
}

除了类定义后缺少分号(;)和其他一些错误外,B的构造函数是private!错误消息中有一个左值引用会分散你的注意力,因为你正在传递一个左价值。

相关文章: