gpt4 book ai didi

c++ - 候选构造函数(隐式复制构造函数)不可行 : expects an l-value for 1st argument

转载 作者:行者123 更新时间:2023-12-03 07:01:06 28 4
gpt4 key购买 nike

问题
我有一个 Deck类是 52 Card 的容器对象。 Deck派生自另一个名为 CardCollection 的类(因为我想要其他地方的类似卡片组不是一副完整的卡片)。我的问题是我可以创建一个 Deck对象使用

Deck deck();
但是当我使用
Deck deck = Deck();
Clang-tidy(在 CLion 中)提示 Candidate constructor (the implicit copy constructor) not viable: expects an l-value for 1st argument .我的理解(基于 ​​ this 问题是这两种实例化方式基本相同,但由于其中一种会导致警告
编码
我只会粘贴这些类声明的构造函数,以防止出现“wall-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);

不能将非常量引用绑定(bind)到临时对象。

像这样声明
CardCollection( const CardCollection &other);

关于c++ - 候选构造函数(隐式复制构造函数)不可行 : expects an l-value for 1st argument,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59392050/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com