#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){ ^
答案 0 :(得分:0)
因为X
的构造函数使用了一个引用,而you can't pass a temporary by reference则是
要解决此问题,请使X构造函数采用const引用。然后,应将fun
和fun2
设为const,以便编译代码。