定义第二个静态成员函数的异常错误消息?
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?
尝试重新添加。
希望这会有所帮助!
【讨论】:
我不敢相信我犯了这个菜鸟的错误......甚至没有注意到 好收获。 ;) 同样的错误似乎出现在另一种方法中。 别担心——我们都会犯这样的错误! 它触发了一个奇怪且违反直觉的错误消息,与问题的根本原因无关。对我来说听起来很值得。 :-)以上是关于定义第二个静态成员函数的异常错误消息?的主要内容,如果未能解决你的问题,请参考以下文章