2017-09-08 3 views
0

これは、VS2015を使用した代替投票選挙方法に基づくC++プログラムの一部です。私は他の場所で違法オペランドエラーが返さプログラムアクセサー付きベクタオブジェクトのソート

void sortParties() { 
    sort(parties.begin(), parties.end(), [](const auto& a, const auto& b) 
    { 
     return a.getVotes() < b.getVotes(); 
    }); 
} 

で投票用紙から算出した(使用して、私は投票を並べ替えしようとした党

#pragma once 
#ifndef _PARTY_H 
#define _PARTY_H 

#include <string> 

class Party { 
public: 
    Party(); 
    ~Party(); 
    Party(std::string n, int pos); 

    void reset(); 
    void upTotal(); 
    int getPosition(); 
    std::string getName(); 
    int getVotes(); 


private: 
    std::string name; 
    int votes; 
    int position; 
}; 

#endif 

#include <iostream> 
#include "Party.h" 

using namespace std; 

Party::Party() {} 

Party::~Party() {} 

Party::Party(string n, int p) { 
    name = n; 
    position = p; 
} 

void Party::reset() { 
    votes = 0; 
} 

void Party::upTotal() { 
    votes += 1; 
} 

int Party::getPosition() { 
    return position; 
} 

string Party::getName() { 
    return name; 
}; 

int Party::getVotes() { 
    return votes; 
} 

のクラス受けています変数をプライベートからパブリックに移動して、次のことを書くことができました

void sortParties() { 
    sort(parties.begin(), parties.end(), [](const auto& a, const auto& b) 
    { 
     return a.votes < b.votes; 
    }); 
} 

これは動作しますが、私はプライベート変数とアクセサーを使って適切なカプセル化を使って投票したいと思います。何とかオーバーロードしたり、タイプを変換する必要がありますか?

+0

_PARTY_H = UBであなたのconstオブジェクトから関数を呼び出すことができます。おそらく問題はありませんが、修正する必要があります。 – Bathsheba

+1

getVotesはconstではありません - あなたはconstオブジェクトを持っています – UKMonkey

答えて

1

あなたが定義された以下の機能を持っている:

int getPosition(); 
std::string getName(); 
int getVotes(); 

彼らはおそらく、すべてのconstでなければなりません。すなわち

int getPosition() const; 
std::string getName() const; 
int getVotes() const; 

これは、あなたが

sort(parties.begin(), parties.end(), [](const auto& a, const auto& b) 
+0

補遺:これらの余分な 'const'は、メソッドがオブジェクトを変更しないことをコンパイラに伝えるので、' const'オブジェクトで使用できます。基本的に隠された 'this'パラメータを' const T * this'にしています。さらにトピック:https://stackoverflow.com/questions/751681/meaning-of-const-last-in-a-c-method-declaration – user4581301

+0

これは、スレッドセーフな関数であることをコンパイラに伝えます。 constの正確さを観察する理由は非常にたくさんあります。 – UKMonkey

関連する問題