Необычное сообщение об ошибке, определяющее вторую статическую функцию-член?

0

Я столкнулся с этой очень простой проблемой, когда я получаю это сообщение об ошибке:

функция члена не может быть переопределена вне ее класса при попытке определить тело

Другие здесь имели это раньше, но в основном это было фактическое переопределение функции-члена (т. 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;
    }

Определение функций-членов никогда не подводило меня раньше, так почему я могу получить ошибку сейчас?

  • 0
    Вам не хватает скобки} в конце register_b :: write () и register_b :: assign (), возможно, потому, что оператор switch выглядит так, как будто он завершил функцию - простая ошибка, но ее легко сделать, и она может сделать все очень уродливым
  • 0
    да я заметил ...
Теги:
class
methods
member-functions

1 ответ

3

Вы упускаете близкую фигурную скобку на 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?
}

Попробуйте добавить } обратно.

Надеюсь это поможет!

  • 0
    Я не могу поверить, что сделал эту ошибку новичка ... и даже не замечая этого
  • 0
    Хороший улов. ;) Та же ошибка, похоже, в другом методе.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню