错误试图在向量C 中交换卡对象
Error trying to swap Card Objects in a vector c++
我是C 的新手,我的编程作业要求洗牌。到目前为止,我已经能够创建一个向量,并将所有52张卡添加到甲板中并显示它们。但是,当我尝试交换元素时,我会遇到错误。请帮我!
卡头文件:
#include <string>
using namespace std;
#ifndef CARD_H
#define CARD_H
class Card {
public:
Card();
Card(int f, int s);
string toString();
const int numFace = 13;
const int numSuit = 4;
const static string faces[];
const static string suits[];
void setFace(int face);
void setSuit(int suit);
void display();
private:
int face, suit;
};
#endif
卡C 文件:
#include <iostream>
#include <string>
#include <stdexcept>
#include "Card.h"
using namespace std;
const string Card::faces[] = {"Ace", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Jack", "Queen", "King"};
const string Card::suits[] = {"Diamonds", "Clubs", "Hearts", "Spades"};
Card::Card(){
setFace(1);
setSuit(1);
}
Card::Card(int face, int suit){
setFace(face);
setSuit(suit);
}
void Card::display(){
cout << faces[face-1] + " of " + suits[suit-1] << endl;
}
void Card::setFace(int face){
if(face >= 1 && face <= 13){
this->face = face;
} else {
throw invalid_argument("face must be 1-13!");
}
}
void Card::setSuit(int suit){
if(suit >= 1 && suit <= 4){
this->suit = suit;
} else {
throw invalid_argument("suit must be 1-4!");
}
}
string Card::toString(){
return faces[face-1] + " of " + suits[suit-1] + "n";
}
deckofcards头文件:
#include <string>
#include <vector>
#include "Card.h"
using namespace std;
#ifndef DECKOFCARDS_H
#define DECKOFCARDS_H
class DeckOfCards {
public:
const static int totalCards;
DeckOfCards();
void shuffle();
string dealCard();
bool moreCards();
vector< Card > deck;
void initCards();
void display();
private:
int currentCard;
};
#endif
deckofcard cpp文件:
#include <iostream>
#include <stdexcept>
#include <algorithm>
#include <vector>
#include <ctime>
#include "Card.h"
#include "DeckOfCards.h"
#include <cstdlib>
#include <ctime>
#include <utility>
using namespace std;
DeckOfCards::DeckOfCards(){
vector<Card> deck;
initCards();
}
void DeckOfCards::initCards(){
const int numCardInSuit = 13;
for(int i = 1 ; i <= numCardInSuit; i++){
deck.push_back(Card(i,1)); //push diamonds
deck.push_back(Card(i,2)); //push clubs
deck.push_back(Card(i,3)); //push hearts
deck.push_back(Card(i,4)); //push spades
}
}
void DeckOfCards::shuffle(){
srand( static_cast<unsigned int>( time(0)) );
int randomNum = 0;
Card card;
for(int i = 0; i < deck.size()-1; i++){
cout << "entered swap" << endl;
randomNum = rand() % 52;
swap(deck[i], deck[randomNum]);
/* vector< int > vect;
vect.push_back(99); Creating a vector and
vect.push_back(1); swapping this way works!
for(int ele : vect){
cout << ele << endl;
}
swap(vect[0], vect[1]);
cout << "Swapped" << endl;
for(int ele : vect){
cout << ele << endl;
}
*/
/*
card = deck[i]
deck[i] = deck[randomNum];
deck[randomNum] = card;
*/
cout << "finished swap" << endl;
}
}
string DeckOfCards::dealCard(){
return deck[1].toString();
}
bool DeckOfCards::moreCards(){
return true;
}
void DeckOfCards::display(){
for(int i = 0; i < deck.size(); i++){
cout << deck[i].toString();
}
}
主管:
#include <iostream>
#include "DeckOfCards.h"
using namespace std;
int main()
{
DeckOfCards myDeck;
myDeck.display();
myDeck.shuffle();
return 0;
}
编译程序时错误:
In file included from /usr/include/c++/5/bits/stl_pair.h:59:0,
from /usr/include/c++/5/bits/stl_algobase.h:64,
from /usr/include/c++/5/bits/char_traits.h:39,
from /usr/include/c++/5/ios:40,
from /usr/include/c++/5/ostream:38,
from /usr/include/c++/5/iostream:39,
from DeckOfCards.cpp:1:
/usr/include/c++/5/bits/move.h: In instantiation of 'void std::swap(_Tp&, _Tp&) [with _Tp = Card]':
<span class="error_line" onclick="ide.gotoLine('DeckOfCards.cpp',40)">DeckOfCards.cpp:40:32</span>: required from here
/usr/include/c++/5/bits/move.h:186:11: error: use of deleted function 'Card& Card::operator=(Card&&)'
__a = _GLIBCXX_MOVE(__b);
^
In file included from DeckOfCards.cpp:6:0:
Card.h:7:7: note: 'Card& Card::operator=(Card&&)' is implicitly deleted because the default definition would be ill-formed:
class Card {
^
Card.h:7:7: error: non-static const member 'const int Card::numFace', can't use default assignment operator
Card.h:7:7: error: non-static const member 'const int Card::numSuit', can't use default assignment operator
In file included from /usr/include/c++/5/bits/stl_pair.h:59:0,
from /usr/include/c++/5/bits/stl_algobase.h:64,
from /usr/include/c++/5/bits/char_traits.h:39,
from /usr/include/c++/5/ios:40,
from /usr/include/c++/5/ostream:38,
from /usr/include/c++/5/iostream:39,
from DeckOfCards.cpp:1:
/usr/include/c++/5/bits/move.h:187:11: error: use of deleted function 'Card& Card::operator=(Card&&)'
__b = _GLIBCXX_MOVE(__tmp);
^
对不起,我只是想适合所有内容,以使任何人都可以提供帮助!随时批评我的代码!非常感谢!
ps我正在使用https://www.onlinegdb.com/online_c _compiler
从您那里挑选一些关键行错误
In instantiation of 'void std::swap(_Tp&, _Tp&) [with _Tp = Card]':
use of deleted function 'Card& Card::operator=(Card&&)'
'Card& Card::operator=(Card&&)' is implicitly deleted because the default definition would be ill-formed:
non-static const member 'const int Card::numFace', can't use default assignment operator
您正在尝试将std::swap
与您的卡一起使用。
内部将尝试使用operator=
,含义
Cards a, b;
a = b; // Here we are using the operator=
因此,错误消息继续说,使用已删除函数operator=
它被隐式删除,因为默认定义会不正确。
它形成了病,因为您的const int
S无法分配给您的班级。
const int c = 5;
c = 10; // This is illegal for a const
错误消息还通过说非静态const成员...
来暗示解决方案您可以解决这是多种方法,在您的情况下,使const int
成为CC_5似乎是一个不错的选择。
相关文章:
- 对象内部有大量数据容器,实现更高效的对象交换
- 错误试图在向量C 中交换卡对象
- 如何在C++中交换对象数组的 2 个不同对象
- 在多线程环境中交换C 地图对象
- 根据 C++ 中的特定数据交换这些对象
- 如何在没有复制赋值运算符的情况下交换两个对象
- C++ 为什么我不能在已删除的默认构造函数的对象上使用交换
- 交换对象不实现移动语义时的交换函数
- 交换两个 std::array<T、100> 对象的成本是多少?
- 使用交换对象自杀
- 交换对象本身
- 将对象交换到文件中
- 交换指针,删除第二个对象并创建指向第二个的新指针
- 使用复制和交换习惯用法,复制对象的析构函数如何不解除分配指向内存
- 如何在对象类型未知时实现交换函数
- 我应该清除作为参数传入的()容器,还是交换一个新对象
- 无法在C++中交换数组中的对象
- 同时交换char数组中的多个对象
- 如何在c++中快速交换列表和向量等容器中的对象
- 如何使用数组交换对象,c++.我想改变