定义第二个静态成员函数的异常错误消息?

Posted

技术标签:

【中文标题】定义第二个静态成员函数的异常错误消息?【英文标题】:Unusual error message defining a second static member function? 【发布时间】:2014-01-03 23:53:15 【问题描述】:

我遇到了这个非常简单的问题,我收到了这个错误消息:

成员函数在尝试定义主体时不能在其类之外重新声明

这里的其他人以前也有过,但它主要是对成员函数的实际重新声明(即,当他们打算写 int something = ClassName::methodName() 时写 int 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;
    

以前定义成员函数从来没有让我失败过,为什么我现在得到错误?

【问题讨论】:

您在 register_b::write() 和 register_b::assign() 的末尾缺少一个大括号 ,可能是因为 switch 语句看起来已经结束了函数 - 一个简单的错误,但很容易制作,并且会使事情变得非常难看 【参考方案1】:

您在assign 成员函数定义中的switch 语句中缺少一个大括号。我认为这会使解析器跳闸,因此会出错。你可以在这里看到:

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?

尝试重新添加

希望这会有所帮助!

【讨论】:

我不敢相信我犯了这个菜鸟的错误......甚至没有注意到 好收获。 ;) 同样的错误似乎出现在另一种方法中。 别担心——我们都会犯这样的错误! 它触发了一个奇怪且违反直觉的错误消息,与问题的根本原因无关。对我来说听起来很值得。 :-)

以上是关于定义第二个静态成员函数的异常错误消息?的主要内容,如果未能解决你的问题,请参考以下文章

设定错误和异常处理的三个函数(第二篇)

laravel - 背包 - addFilter 自定义查询

第二十章 异常和状态管理

为啥使用用户定义的异常而不是简单地显示错误消息[重复]

当我尝试添加第二个活动时未处理的事件循环异常

带有错误代码和错误消息的自定义 Python 异常