候选构造函数(隐式复制构造函数)不可行:第一个参数需要 l 值
Candidate constructor (the implicit copy constructor) not viable: expects an l-value for 1st argument
问题
我有一个Deck
类,它是 52 个Card
对象的容器。Deck
派生自另一个名为CardCollection
的类(因为我希望在其他地方有类似的卡片组,而不是一副完整的卡片(。我的问题是我可以创建一个Deck
对象
Deck deck();
但是当我使用
Deck deck = Deck();
叮叮当当(在CLion中(抱怨Candidate constructor (the implicit copy constructor) not viable: expects an l-value for 1st argument
.我的理解(基于这个问题是这两种实例化方式基本相同,但由于一种会引起警告
《守则》
我只会粘贴这些类声明的构造函数,以防止这成为"墙-o-text"问题。
//Card.h
class Card {
public:
int rank;
basic_string<char> suit;
Card(int r, std::string s); // rank and suit
~Card();
//...
}
// CardCollection.h
#include <vector>
#include "Card.h"
class CardCollection {
protected:
vector<Game::Card> _cards;
public:
CardCollection();
~CardCollection();
CardCollection(CardCollection &other);
explicit CardCollection(int n);
explicit CardCollection(vector<Game::Card> &cards);
//...
和
// Deck.h
#include "Card.h"
#include <vector>
#include "CardCollection.h"
class Deck : public CardCollection {
public:
Deck();
~Deck();
explicit Deck(vector<Game::Card> &cards);
Deck * shuffle();
//...
};
对于初学者来说,这个
Deck deck();
是一个没有参数且返回类型为Deck
的函数声明。
其次是类 CardCollection 的复制构造函数
CardCollection(CardCollection &other);
不能将非常量引用绑定到临时对象。
声明它像
CardCollection( const CardCollection &other);
相关文章:
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 在按值调用 (c++) 中转发构造函数参数
- 如何使用 swig 修改类构造函数以保留对其中一个构造函数参数的引用?
- 如何在构造函数参数中初始化"std::set"?
- 何时应在构造函数参数中使用 const C++?
- 使用模板化结构作为构造函数参数
- 使用 lambda 作为构造函数参数是否需要C++ 17?
- 如何使输入文本文件成为构造函数参数?c++
- shared_ptr构造函数参数是否应按值传递
- 是否允许使用初始值设定项列表将const数组引用实例化为构造函数参数
- 复制构造函数参数为0
- 用作成员构造函数参数的函数的求值顺序
- 结构中的默认成员值或默认构造函数参数
- C++将引用成员绑定到构造函数参数
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 模板函数指针参数与构造函数参数
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 如何基于构造函数参数模板化类成员函数的代码
- 将派生类构造函数参数传递给受保护的成员
- 如何根据构造函数参数使用超类类型初始化成员变量?