【发布时间】:2018-07-01 16:20:29
【问题描述】:
#include<iostream>
class A {
public:
void fun() { fun2(); }
~A() = default;
protected:
virtual void fun2() = 0 ;
};
class B : public A {
protected:
virtual void fun2() { std::cout<<"Hiiii";}
};
class X {
public:
X(A& a) {
a.fun();
}
};
class Y {
public:
Y( int x ) : val(x), x(B())
{}
private:
int val;
X x;
};
int main() {
Y y(5);
}
我无法弄清楚为什么会出现以下编译错误:
prog.cpp:在构造函数“Y::Y(int)”中: prog.cpp:30:32:错误:从“A”类型的右值对“A&”类型的非常量引用进行无效初始化 Y(int x):val(x),x(B()) ^ prog.cpp:21:7:注意:初始化 'X::X(A&)' 的参数 1 X(A&a) { ^
【问题讨论】:
-
这是一个较短的复制:
int& r = 42;你明白为什么不能编译吗?你明白为什么你正在做的事情和这个是一样的吗? -
我明白了你的意思,但请你帮我理解为什么传递给 X 的 B() 应该是 const ?
-
因为 C++ 就是这样工作的。
标签: c++ c++11 compiler-errors