У меня есть h-файл, в котором есть класс с именем MainControl
и структура с именем Vote
.
Внутри MainControl Я определяю публичный оператор следующим образом (это функция-член):
MainControl& operator+=(Vote& v);
В соответствующем файле .cpp у меня есть эта функция:
MainControl& MainControl::operator+=(Vote& v){
...
}
Когда я пытаюсь в другом файле написать что-то вроде этого:
mc+=v
Где mc
это объект из класса MainControl, а v объект из структуры Vote
.
Я получаю эту ошибку:
error C2679: binary '+=': no operator found which takes a right-hand operand of type 'Vote' (or there is no acceptable conversion)
Я включил правильные файлы, которые, как мне кажется, у меня работает очень похожий оператор (вместо struct Vote
он включает другой класс).
Понятия не имею, чем это вызвано, кто-нибудь может помочь?
EDIT:
Оператор используется следующим образом:
mc += Vote(vr1, "Cyprus");
Где mc
из класса MainControl
.
Структура голосования выглядит так:
struct Vote
{
Voter voter;
string* voted_state;
// ALL is public here.
Vote(Voter current_voter, string state1, string state2 = "", string state3 = "", string state4 = "", string state5 = "", string state6 = "", string state7 = "", string state8 = "", string state9 = "", string state10 = "") :
voter(current_voter), voted_state(new string[VOTE_ARRAY_SIZE]){
voted_state[0] = state1;
voted_state[1] = state2;
voted_state[2] = state3;
voted_state[3] = state4;
voted_state[4] = state5;
voted_state[5] = state6;
voted_state[6] = state7;
voted_state[7] = state8;
voted_state[8] = state9;
voted_state[9] = state10;
}
~Vote() {
delete[] voted_state;
}
};
В аналогичной операции, которая не дает мне ошибок компиляции, оператор используется следующим образом:
mc += p1
Где p1
- это объект от имени участника класса, а mc - объект от класса MainControl
.
В файле .h, где я определяю класс MainControl
, у меня есть это объявление:
MainControl& operator+=(Participant& p);
Участник класса выглядит так:
class Participant
{
string state_name;
string song_name;
int time_length;
string singer_name;
bool is_registered;
public:
Participant(string state, string song, int time, string singer):
state_name(state),song_name(song),singer_name(singer),time_length(time),is_registered(false){
}
~Participant() = default;
string state() const;
string song() const;
int timeLength() const;
string singer() const;
int isRegistered() const;
void update(const string song, const int time, const string singer);
void updateRegistered(const bool status);
};
p1
было определено так:
Participant p1("USA", "Song_USA", 175, "Singer_USA");