#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‘Y(Int X):val(x),x(B()) ^prog.cpp:21:7的r值初始化类型为'A&’的非常数引用无效。prog.cpp:21:7:注意:初始化'X:: X(A& )‘X(A& a) {^
发布于 2018-07-02 00:27:48
因为X
的构造函数接受引用,而you can't pass a temporary by reference。
要修复它,请使X构造函数采用常量引用。然后,应将fun
和fun2
设置为常量,以便代码进行编译。
https://stackoverflow.com/questions/51125015
复制相似问题