gpt4 book ai didi

c++ - 带 *const* 或不带 *const* 的类方法签名?

转载 作者:太空宇宙 更新时间:2023-11-04 16:05:50 25 4
gpt4 key购买 nike

尝试编译 (c++) 时,我在 Eclipse 中遇到以下错误

../CardDeck.cpp:17:22: error: passing ‘const CardDeck’ as ‘this’ argument of ‘int CardDeck::size()’ discards qualifiers [-fpermissive]

如果我将 int size() 方法更改为 int size() const,则错误消息消失并编译。我不知道为什么?

.H 文件如下:

  #include "Card.h"
#include <vector>

using namespace std;
class CardDeck{
private:
vector<Card*> deck;

public:

int size();
CardDeck();
CardDeck(const CardDeck& rhs);
CardDeck& operator=(const CardDeck& rhs);
Card& draw();
Card& top();

bool isEmpty();
void clear();
int value();
CardDeck& operator+=(const CardDeck& rhs); /// not sure if to return ref
CardDeck& operator+(const CardDeck& rhs);
friend CardDeck& operator*(unsigned int num,CardDeck& rhs);
friend CardDeck& operator*(CardDeck& lhs,unsigned int num);
bool operator<=(const CardDeck& rhs );
bool operator>=(const CardDeck& rhs);
bool operator<(const CardDeck& rhs);
bool operator>(const CardDeck& rhs);
bool operator==(const CardDeck& rhs);
bool operator!=(const CardDeck& rhs);
Card* operator[](int i);
};

C++ 文件是:

#include "CardDeck.h"
int CardDeck::size() {
return this->deck.size();
}
CardDeck::CardDeck(){};
CardDeck::CardDeck(const CardDeck& rhs){
this->clear();
int i;
for (i=0;i<rhs.size();i++){
Card* current_card = rhs.deck[i];
Card* new_copy = new Card(*current_card);
this->deck.push_back(new_copy);
}


}
Card* CardDeck::operator[](int i) {
return this->deck[i];
}



void CardDeck::clear(){
vector<Card*>::iterator it ;
for(it=this->deck.begin();it != this->deck.end();++it){
Card* temp = *it;
this->deck.erase(it);
delete(temp);
}
}

最佳答案

在你的复制构造函数CardDeck::CardDeck(const CardDeck& rhs)中,rhs是对const CardDeck<的引用 对象。

因此 rhs.size() 将无法编译,除非 size() 被显式标记为 const。这就是您的编译器告诉您的内容。

将您的代码设置为尽可能正确的 const 是一种很好的做法,因为这可以防止对类中的成员数据进行错误更改。实际上,isEmpty() 和可能的 value() 也应该标记为 const,所有重载的关系运算符也应该标记为 const

关于c++ - 带 *const* 或不带 *const* 的类方法签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35723575/

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