【问题标题】:C++ Declaration is incompatible with methodC++ 声明与方法不兼容
【发布时间】:2013-09-24 18:28:44
【问题描述】:

我正在实现的类有问题。

typedef enum
{
    YELLOW,
    GREEN,
    BLUE
} COLOUR;

class Stream
{
public:
    Stream();
    ~Stream();
    double getRate(COLOUR colour);
private:
    double yrate;
    double grate;
    double brate;
};

Stream::Stream()
{
    yrate = 2.2;
    grate = 3.3;
    brate = 4.4;
}

Stream::~Stream()
{
}

double Stream::getRate(COLOUR colour)
{
    double rate;
    switch(colour)
    {
    case YELLOW:
        rate = yrate;
        break;
    case GREEN:
        rate = grate;
        break;
    case BLUE:
        rate = brate;
        break;
    }
    return rate;
}

我正在使用 Visual C++ 2010 Express,我无法编译它,因为错误是: '错误:声明与“double Stream::getRate(COLOUR colour)”不兼容

是我遗漏了什么,还是我混淆了某些顺序?

提前致谢。

【问题讨论】:

  • 好像编译没有问题:codepad.org/OUS36Z3g
  • 编写枚举的更多 C++ 方式是enum COLOUR { ... };。但是,您提供的代码在所有三个版本的 Visual Studio 中都能正常编译,这表明问题在于您未粘贴的代码存在冲突。
  • @kfsone 我把它作为项目中的一个单独的头文件,即使没有其他任何内容,intellisense 也会告诉我这个错误。
  • 是的,但是这段代码本身不是问题,可能在其他地方有“COLOUR”或“getRate”的定义。制作一个干净的项目,从您的帖子中粘贴到其中,添加一个简单的 main 并编译。然后开始从你的项目中添加代码,看看它什么时候中断。

标签: c++ visual-studio-2010 class compiler-errors


【解决方案1】:

enum COLOUR
{
    YELLOW,
    GREEN,
    BLUE
};

相反。您正在使用的 typedef 成语(以不完整的方式)是为了与 C 兼容,从您的标签来看,您不需要。

【讨论】:

  • 但在这种情况下,OP 应编写 double getRate(enum COLOR colour);还是我错了?
  • 没错,但是,这是一个答案吗?
  • @duDE,在 C++ 中,getRate 中 COLOR 之前的 enum 是多余的。在 C 中不是。
  • 哦,我记得,那是在 C 语言中的 :) 谢谢!顺便说一句,像 OP 一样编译没有问题:codepad.org/OUS36Z3g
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 2012-12-02
  • 2011-03-08
  • 1970-01-01
相关资源
最近更新 更多