gpt4 book ai didi

c++ - 'must have an argument of class or enumerated type'到底是什么意思

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:11:17 27 4
gpt4 key购买 nike

我有一个头文件和一个.cpp 文件。我需要为我的 .h 文件编写函数,但在我完全完成骨架 .cpp 文件之前出现错误。

金钱.h

#ifndef MONEY_H
#define MONEY_H

#include <iostream>
#include <iomanip>

using namespace std;

class Money
{
public:
Money(int dollars, int cents);
Money operator+(const Money& b) const;
Money operator-(const Money& b) const;
Money operator*(double m) const;
Money operator/(double d) const;

void print() const;

private:
int dollars;
int cents;
};

#endif

金钱.cpp

#include "Money.h"

Money::Money(int dollars, int cents){

}
Money operator+(const Money& b) {

}
Money operator-(const Money& b) {

}
Money operator*(double m) {

}
Money operator/(double d) {

}

void print(){

}

错误与乘法和除法运算符有关:

Money.cpp:12:25: error: 'Money operator*(double)' must have an argument of class or enumerated type

Money.cpp:15:25: error: 'Money operator/(double)' must have an argument of class or enumerated type

最佳答案

您没有使用作用域解析运算符来告诉编译器您正在定义一个成员函数。它被解释为 global 运算符重载,它有两个参数,其中一个必须是类或枚举类型。这基本上意味着您的参数之一必须是用户定义的类型(不是 primitive type 的类型)或 enumerated type。这是通过 enum 定义的。

在您的原始代码中,Money 只是返回类型;它不会告诉编译器您正在定义该类的成员函数。

这是对您的其中一行的修复:

Money Money::operator+(const Money& b)                                         /*
^^^^^^^ */
{
// ...
}

此外,您的原型(prototype)和定义还必须符合 cv 限定条件。您的定义缺少 const 限定符...

Money Money::operator+(const Money& b) const                                   /*
^^^^^ */
{
// ...
}

更新:

我还发现您对 Money::operator*Money::operator/ 的定义与其原型(prototype)不匹配。两者的原型(prototype)都采用 double 而定义采用 Money const&。您需要更改一个以匹配另一个。

// inside Money class

Money operator*(Money const&) const;
Money operator/(Money const&) const;

关于c++ - 'must have an argument of class or enumerated type'到底是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17139490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com