我有一个头文件和一个.cpp文件.我需要为我的.h文件编写函数,但是在我完全完成一个骨架.cpp文件之前我得到一个错误.
Money.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
Run Code Online (Sandbox Code Playgroud)
Money.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(){
}
Run Code Online (Sandbox Code Playgroud)
乘法和除法运算符的错误是:
Money.cpp:12:25:错误:'Money运算符*(double)'必须具有类或枚举类型的参数
Money.cpp:15:25:错误:'Money运算符/(double)'必须具有类或枚举类型的参数
0x4*_*2D2 14
您没有使用范围解析运算符告诉编译器您正在定义成员函数.它被解释为全局运算符重载,它接受两个参数,其中一个必须是类或枚举类型.这基本上意味着您的一个参数必须是用户定义的类型(不是基本类型的类型)或通过a定义的枚举类型enum.
在您的原始代码Money中只是返回类型; 它不会告诉编译器您正在从该类定义成员函数.
以下是您的一行修复:
Money Money::operator+(const Money& b) /*
^^^^^^^ */
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
此外,您的原型和定义也必须符合cv资格.你的定义缺少const限定符......
Money Money::operator+(const Money& b) const /*
^^^^^ */
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
更新:
我还发现你的定义Money::operator*和Money::operator/它们的原型不匹配.两者的原型需要一段double时间定义Money const&.您需要更改一个以匹配另一个.
// inside Money class
Money operator*(Money const&) const;
Money operator/(Money const&) const;
Run Code Online (Sandbox Code Playgroud)