Я столкнулся с этой очень простой проблемой, когда я получаю это сообщение об ошибке:
функция члена не может быть переопределена вне ее класса при попытке определить тело
Другие здесь имели это раньше, но в основном это было фактическое переопределение функции-члена (т. int ClassName::methodName()
когда они должны были писать int something = ClassName::methodName()
), но, как ни странно, это не то, что моя проблема есть.
Моя проблема заключается в следующем:
//avr_helper.h
#pragma once
#include <avr/io.h>
enum input_type {INPUT, OUTPUT};
enum write_type {HIGH, LOW};
class register_b
{
static void assign(long register_pin, input_type type);
static void write(long pin, write_type type);
}
//avr_helper.cpp
#include "avr_helper.h"
void register_b::assign(long register_pin, input_type type) { // this works fine
switch(type) {
case INPUT:
DDRB &= ~(1<<register_pin);
break;
case OUTPUT:
DDRB |= (1<<register_pin);
break;
}
void register_b::write(long pin, write_type type) { // this gives the error mentioned in the title
switch(type) {
case HIGH:
PORTB &= ~(1<<pin);
break;
case LOW:
PORTB |= (1<<pin);
break;
}
Определение функций-членов никогда не подводило меня раньше, так почему я могу получить ошибку сейчас?
Вы упускаете близкую фигурную скобку на switch
заявлении в assign
определение функции члена. Я думаю, что это отключает парсер, следовательно, ошибка. Вы можете увидеть это здесь:
void register_b::assign(long register_pin, input_type type) { // this works fine
switch(type) {
case INPUT:
DDRB &= ~(1<<register_pin);
break;
case OUTPUT:
DDRB |= (1<<register_pin);
break;
// <-- Missing } here?
}
Попробуйте добавить }
обратно.
Надеюсь это поможет!